formateur informatique

Listes déroulantes liées sur toutes les lignes du tableau

Accueil  >  Bureautique  >  Excel  >  Excel Avancé  >  Listes déroulantes liées sur toutes les lignes du tableau
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Listes déroulantes dépendantes sur chaque ligne du tableau

Nous avons déjà appris à créer des listes déroulantes reliées entre elles. Pour cela, nous avions bâti des calculs intermédiaires de repérage. Et sur la base des numéros incrémentés générés, nous avions produit l'extraction des données dépendantes, servant de source liée.

Listes déroulantes des villes dépendant des codes postaux sur tous les enregistrements de la base de données Excel

Mais lorsqu'il s'agit de proposer des listes déroulantes dépendantes sur chaque ligne de la base de données, le problème se corse. Dans ce contexte, il n'est pas envisageable de prévoir des calculs de repérage et d'extraction pour un nombre indéfini d'enregistrements. Et pourtant, cette fonctionnalité est précieuse dans le cas des tableaux de prospections par exemple. C'est pourquoi, nous apportons la solution dans cette formation.

Source et présentation de la problématique
Pour établir ces travaux, nous proposons de réceptionner un fichier Excel hébergeant des données et offrant certains précieux réglages. Nous réceptionnons un classeur composé des feuilles Prospection et Villes. La feuille Prospection dresse un tableau servant à archiver les nouveaux prospects au coup par coup. C'est en fonction du code postal saisi en colonne E que nous devons offrir une liste déroulante des villes adaptées en colonne F. Cette liste déroulante doit être présente pour chaque enregistrement et sur chaque nouvelle ligne de la base de données, au fil de l'implémentation. Chacune doit se nourrir en fonction de son code postal renseigné. Et c'est bien là toute la problématique.

En cellule I6, vous notez la présence d'une zone pour réceptionner un code postal de référence. C'est en fonction de cette valeur que des repérages et des extractions existent déjà.
  • En bas de la fenêtre Excel, cliquer sur l'onglet Villes pour afficher sa feuille,
Cette feuille héberge la base de données des codes postaux et des villes associées pour la région PACA.

Calculs Excel pour repérer les villes associées aux codes postaux dans base de données

Un calcul de repérage par numéros incrémentés est présent en colonne E :

=SI(Prospection!$I$6=D3; MAX($E$2:E2)+1; '')

Nous maîtrisons désormais ces techniques. Si la correspondance est établie avec le code postal de référence issu de la feuille Prospection, un marquage s'opère. Et ce marquage est exploité en colonne H pour produire l'extraction, grâce aux fonctions Index et Equiv:

=SIERREUR(INDEX(C:C; EQUIV(LIGNE(A1); E:E; 0); 1); '')

Ces villes constituent la source de données dynamique des listes déroulantes du tableau des prospects.

Prélever l'information d'une cellule au clic
Pour que chaque liste déroulante puisse se nourrir des villes associées au code postal de l'enregistrement en cours, nous devons être en mesure de prélever ce code en cellule I6 de la feuille Prospection. Et ce prélèvement doit intervenir quand une cellule de la colonne F est activée. Ainsi, au moment de la demande utilisateur pour exploiter la liste déroulante, le contenu se regénèrera automatiquement.

Cependant, le recalcul automatique se génère automatiquement à chaque modification de cellule dans Excel, mais pas à la sélection. C'est pourquoi, nous avons besoin d'une instruction VBA triviale à déclencher sur un évènement précis. Nous avions d'ailleurs développé cette technique à l'occasion de la conception du jeudu Memory pour Excel. Ensuite, nous pourrons refermer cette parenthèse et nous concentrer sur les formules.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur de code VBA Excel,
  • Dans l'explorateur de projet, double cliquer sur l'élément Feuil1 (Prospection),
  • Au-dessus de la feuille de code, déployer la liste déroulante de gauche,
  • Choisir l'objet Worksheet,
Procédure événementielle VBA Excel pour recalculer formules au changement de sélection sur la feuille

De cette manière, nous créons la procédure événementielle Worksheet_SelectionChange. Son code se déclenchera à chaque changement de sélection (SelectionChange) sur la feuille Excel (Worksheet) Prospection.
  • Entre les bornes de la procédure événementielle, ajouter l'instruction VBA suivante :
Application.Calculate

La méthode Calculate de l'objet Application ordonne simplement le recalcul de toute la feuille. Et ce recalcul interviendra désormais au changement de sélection.

Pour préserver les ressources, le code suivant est encore plus approprié :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 6 Then
Application.Calculate
End If
End Sub


Une condition est posée sur la colonne cliquée. Cette information nous est transmise grâce à la propriété Column de l'objet Target passé en paramètre de la procédure. De cette façon, nous engageons le recalcul uniquement si la colonne cliquée est celle des listes déroulantes (6=F).
  • Enregistrer les modifications (CTRL + S),
  • Fermer l'éditeur VBA Excel,
  • Puis, revenir sur la feuille Prospection,
  • En cellule I6, taper la formule suivante et la valider :
=SI(CELLULE('colonne')=6; INDIRECT(ADRESSE(CELLULE('ligne'); 5)); '')

Nous exploitons la fonction conditionnelle pour engager la réception de la donnée dans la mesure où la cellule cliquée par l'utilisateur appartient bien à la colonne F. Cette colonne est la sixième. Cette information nous est retournée par la fonction Cellule avec le paramètre colonne. Dès lors, grâce à la fonction Excel Adresse, nous prélevons l'information située sur la ligne en cours pour la colonne précédente (5), soit celle des codes postaux. Mais comme vous le savez, la fonction Adresse retourne les coordonnées de la cellule ainsi recomposée. Pour récupérer son contenu, nous l'englobons dans la fonction Indirect. Elle permet d'interpréter l'information qui lui est passée en argument, soit le contenu de la cellule ainsi désignée.
  • Cliquer sur l'une des villes de la colonne F,
Aussitôt, son code postal est rapatrié en cellule I6 grâce à ce calcul et à la gestion de l'événement par le code VBA.

Afficher contenu cellule Excel au clic de la souris

Si vous affichez la feuille Villes sans cliquer sur une autre cellule, vous notez que la zone d'extraction propose bien toutes les villes associées à ce code postal réceptionné.

Listes déroulantes des données extraites
C'est donc de cette zone d'extraction dont doivent se nourrir les listes déroulantes de la colonne F. A chaque clic, leur contenu s'adaptera au code postal correspondant pour fournir les villes associées. Mais le nombre de ces villes varie en fonction du code postal. Donc, la hauteur de la liste déroulante doit s'adapter à ce contenu. Pour cela, nous devons premièrement nommer cette plage d'extraction. Ensuite, nous devons retravailler ce nom grâce à la fonction Decaler notamment. Elle permettra d'ajuster la hauteur des listes déroulantes aux contenus.
  • Sélectionner la cellule H3 de la feuille Villes,
  • En haut à gauche de la feuille, saisir l'intitulé suivant dans la zone Nom: Villes,
  • Valider nécessairement ce nom par la touche Entrée du clavier,
Nommer cellule de départ de plage pour adapter à son contenu avec fonction Excel Decaler

Les données extraites disparaissent. La validation a ordonné le recalcul. Ce phénomène est donc tout à fait normal. A ce stade, notre nom ne fait référence qu'au point de départ de la plage d'extraction. Nous devons le retravailler pour le faire grandir avec le contenu.
  • En haut de la fenêtre Excel, cliquer sur l'onglet Formules pour activer son ruban,
  • Dans la section Noms définis du ruban, cliquer sur le bouton Gestionnaire de noms,
  • Dans la boîte de dialogue qui suit, sélectionner le nom Villes,
  • Dans la zone Fait référence à, adapter la syntaxe comme suit :
=DECALER(Villes!$H$3; 0; 0; NB.SI(Villes!$H:$H; '>*<')-1)
  • Cliquer sur le bouton à la coche verte pour valider la syntaxe,
  • Puis, cliquer sur le bouton Fermer de la boîte de dialogue,
Fonction Excel Decaler pour agrandir hauteur de la plage de cellules en fonction de son contenu

En premier argument de la fonction Decaler, nous indiquons le point de départ de la plage, soit la cellule H3, le début de l'extraction des villes. Les deux arguments suivants sont réglés à zéro. Ils définissent les potentiels décalages en ligne et colonne à observer. Dans notre cas, il n'y en a aucun. Le quatrième argument est fondamental. C'est lui qui permet de régler la hauteur variable de la plage grâce à la fonction Nb.SI. Elle dénombre les cellules non vides et ne portant pas de calcul conduisant à un résultat vierge grâce au critère '>*' appliqué sur la colonne H. Cette dernière doit être cliquée par son étiquette pour l'intégrer correctement dans la syntaxe.

Listes dépendantes de base de données
Il est temps de rendre opérationnelles ces listes déroulantes des villes pour chaque enregistrement et nouveau prospect. Nous suggérons de les paramétrer sur un nombre suffisamment important de lignes. Leur source de données est commune à toutes. Il s'agit de la plage dynamique Villes que nous venons de rendre extensible par calcul. Et bien qu'il s'agisse de la même source, ces listes proposeront un contenu différent, adapté au code postal de l'enregistrement.
  • En bas de la fenêtre Excel, cliquer sur l'onglet Prospection pour revenir sur sa feuille,
  • Sélectionner une grande plage pour construire les listes des villes, par exemple : F6:F100,
  • En haut de la fenêtre Excel, cliquer sur l'onglet Données pour activer son ruban,
  • Dans la section Outils de données du ruban, cliquer sur le bouton Validation des données,
  • Dans la zone Autoriser de la boîte de dialogue qui suit, choisir Liste,
  • Dans la zone Source juste en-dessous, saisir la syntaxe suivante : =Villes,
C'est ainsi que nous établissons la liaison entre le contenu des listes déroulantes sur la plage définie et la zone d'extraction variable et dépendant du code postal pour la ligne cliquée. En effet, Villes est bien le nom que nous avons attribué à cette plage et que nous avons ensuite retravaillé par formule.

Liste déroulante Excel multiple pour chaque enregistrement de la base de données avec contenu adapté

Ainsi configurée, la liste n'acceptera aucune saisie non prévue. Pour la débrider, vous pouvez vous référer à la formation sur les listes de choix non limitées.
  • Cliquer sur le bouton Ok de la boîte de dialogue pour créer ces listes,
  • Valider le message d'alerte qui suit,
Excel juge en effet la source comme erronée. En l'absence de données puisque le code postal de référence n'est pas rapatrié, la source lui paraît incohérente.
  • Cliquer sur la ville de Belgentier en cellule F9,
  • Puis, déployer sa liste déroulante,
Comme vous pouvez le voir, toutes les villes associées au code postal devenu la référence sont proposées. Si vous cliquez sur la ville de Castellane juste en dessous, en déployant sa liste, les suggestions s'adaptent parfaitement et précisément.

Listes déroulantes multiples sur chaque enregistrement Excel avec contenu adapté au code postal choisi

Si vous créez un nouveau prospect, au déploiement de sa liste déroulante des villes, son contenu s'auto génère en fonction du code postal saisi. Nous avons donc bâti un outil précieux déclinable dans bon nombre de contextes exploitant des bases de données avec des informations dépendantes.

Remarque : La liste déroulante pour la première ville ne fonctionne pas. La raison est simple. Les codes postaux du département du Vaucluse (84) sont absents de cette source de données.

Pour rappel, la solution que nous avons aboutie tient en plusieurs points :
  • Un événement VBA permet le recalcul au clic sur une cellule,
  • Grâce à lui, une formule exploitant les fonctions Cellule et Adresse rapatrient le code postal,
  • Sur ce dernier, un calcul de repérage est effectué sur la feuille Villes,
  • Sur ces numéros incrémentés, une extraction est produite grâce aux fonctions Index et Equiv,
  • La plage de cette extraction est rendue dynamique grâce aux fonctions Decaler et Nb.Si,
  • Le nom de cette plage est enfin utilisé comme source pour toutes les listes de la base.
 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn