formateur informatique

Chercher et Extraire des données dans un classeur fermé

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Chercher et Extraire des données dans un classeur fermé
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 :


Chercher dans un autre classeur

Grâce à l'astuce précédente, nous avons appris à récupérer du contenu à partir d'un classeur externe et fermé. Dans cette suite logique, nous allons apprendre à réaliser des recherches dans un classeur externe pour extraire des informations précises et les importer sur le classeur principal.

Classeur Excel pour extraire des informations depuis une base de données externe

Sur l'exemple illustré par la capture, l'utilisateur choisit la référence d'un article à l'aide d'une liste déroulante. Instantanément, les informations associées comme la désignation et le prix sont rapatriées dans les cellules du dessous. Pourtant ce classeur n'héberge aucune information. La recherche de la référence est engagée dans une base de données abritée par un classeur externe et fermé. Cette prouesse, nous proposons de la réaliser par le code VBA Excel.

Classeurs Excel à télécharger
Pour aboutir ces travaux, nous avons besoin d'un classeur principal et d'une base de données externe. Comme vous pouvez le voir, la décompression livre deux classeurs Excel. Le premier est nommé bdd. C'est lui qui héberge la base de données dans laquelle nous devons entreprendre les recherches. Le second est nommé importer-autre-classeur. C'est lui qui doit diriger ces recherches dans la base externe.
  • Double cliquer sur le classeur bdd.xlsx pour l'ouvrir dans Excel,
Base de données Excel externe

Nous y découvrons un tableau long recensant de nombreux articles vestimentaires. La référence à chercher est située en colonne B. Les informations s'étendent sur la plage de cellules B4:H247. Les données à rapatrier sur le nom, le prix, le poids et le stock sont placées respectivement en deuxième, troisième, quatrième et sixième colonnes de ce tableau. Ces remarques sont loin d'être anodines quand il s'agira de bâtir la formule d'extraction en VBA Excel, depuis le classeur principal.
  • Fermer cette base de données en cliquant sur la croix de sa fenêtre,
  • Puis, double cliquer sur le fichier importer-autre-classeur.xlsm pour l'ouvrir dans Excel,
Nous découvrons le tableau de synthèse à implémenter automatiquement au choix d'une référence avec la liste déroulante en cellule E5. Il s'agit bien entendu des références issues de la base de données externe. Les informations associées sur la désignation, le prix, le poids et le stock doivent être rapatriées en cellules respectives C7, C9, E9 et G9.

Code VBA au choix
C'est donc au choix d'une référence avec la liste déroulante que nous devons exécuter un code VBA capable de réaliser la recherche de ce code dans le tableau du classeur externe bdd.xlsx. Pour cela et nous en avons l'habitude, nous devons exploiter une procédure événementielle spéciale, capable de détecter les changements de valeurs dans les cellules de la feuille. Cette procédure événementielle existe déjà et nous allons le constater.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
Nous découvrons effectivement la présence de la procédure Worksheet_Change. Nous l'avons construite en choisissant l'élément Worksheet avec la liste de gauche, en haut de la feuille de code. Elle se déclenchera dès qu'une cellule sera modifiée dans la feuille. Mais nous devrons limiter son exécution au changement de valeur en cellule E5 pour ne pas consommer les ressources inutilement. Nous y reviendrons en temps voulu. Un paramètre est en attente dans cette procédure. Il se nomme Target. Il représente la cellule modifiée. C'est grâce à lui que nous pourrons récolter la référence à rechercher dans la base de données externe.

La variable du chemin à la base externe
Pour débuter, nous avons besoin d'une variable pour mémoriser le chemin d'accès complet à la base de données externe. C'est ainsi que nous pourrons exploiter une fonction de recherche capable d'analyser ce tableau. Ce chemin doit être composé du chemin d'accès au classeur externe, du nom du classeur lui-même à inscrire entre crochets, du nom de la feuille cible pour enfin atteindre la plage du tableau à préfixer d'un point d'exclamation. C'est ainsi dans la syntaxe Excel.
  • Dans les bornes de la procédure événementielle, ajouter la déclaration de variable suivante :
...
Dim chemin As String
...


Nous nommons cette variable chemin. Naturellement, nous la typons comme un texte (As String) pour recevoir le chemin d'accès complet à construire.

Vérifier la cellule modifiée
Nous l'avons annoncé précédemment, nous ne devons exécuter ce code VBA que si le changement est opéré dans la cellule E5 de la liste déroulante. ...
If Target.Address = "$E$5" Then

End If
...


C'est la propriété Address de l'objet Target passé en paramètre qui renseigne sur les coordonnées de la cellule modifiée par l'utilisateur sur la feuille. S'il s'agit bien de la cellule de la liste déroulante ("$E$5), alors (Then) nous poursuivons l'exécution.

Le chemin de la plage externe
C'est maintenant que nous devons assembler les différents éléments énoncés précédemment pour pouvoir pointer sur la plage de cellules B4:H247 de la base de données externe.
  • Dans l'instruction conditionnelle, ajouter la ligne VBA suivante :
...
chemin = "'" & ThisWorkbook.Path & "\[bdd.xlsx]Catalogue'!B4:H247"
...


Selon la syntaxe d'Excel, ce chemin doit nécessairement est inscrit entre côtes. Comme nous sommes déjà dans des doubles côtes, nous utilisons la simple côté (') pour l'encadrement, avec la touche 4 en haut à gauche du clavier. La propriété Path de l'objet ThisWorkbook renseigne tout d'abord sur l'emplacement du classeur externe, soit le dossier de l'application active. Après un antislah (\) pour entrer dans le dossier, nous lui associons le nom du classeur choisi, entre crochets ([bdd.xlsx]). Puis, par voie hiérarchique, nous désignons sa feuille que nous faisons suivre d'un point d'exclamation (Catalogue'!), après avoir fermé la côte, pour enfin atteindre la plage de cellules cible (B4:H247) afin d'y exécuter la recherche de la référence choisie avec la liste déroulante.

Lancer la recherche
La fonction Excel dédiée mais aussi la plus simple pour organiser cette recherche et les extractions des informations associées est la fonction RechercheV. Mais attention, nous sommes en train de coder en VBA. En anglais, elle se nomme vlookup. Nous devons lui demander de chercher la référence (E5) dans la plage externe (chemin). Puis, nous devons spécifier le numéro de la colonne de l'information concordante à retourner. Dans le tableau de recherche, la désignation est par exemple située en deuxième colonne (2).
  • A la suite dans l'instruction conditionnelle, ajouter les deux lignes VBA suivantes :
...
[C7].Formula = "=vlookup(E5, " & chemin & ", 2, false)"
[C7].Value = [C7].Value
...


Dans la cellule de la désignation (C7), nous inscrivons la formule de recherche grâce à la propriété Formula. Nous exploitons la fonction RechercheV (vlookup) à la recherche de la référence choisie (E5) dans la base de données externe (," & chemin & "). La concaténation s'impose ensuite pour briser la chaîne statique dans laquelle nous sommes, pour pouvoir transmettre une donnée dynamique. En retour, nous demandons de restituer la désignation placée en deuxième colonne du tableau (2). Enfin, nous réalisons une recherche exacte (false). Ensuite, nous remplaçons la formule par la valeur de l'extraction par une affectation exacte.

Importer les autres valeurs
Pour extraire les autres informations concordantes, c'est exactement le même principe qui doit être engagé. Mais en fonction de la donnée demandée, la fonction RechercheV doit adapter son indice de retour.
  • Toujours à la suite de l'instruction conditionnelle, ajouter les lignes VBA suivantes :
...
[C9].Formula = "=vlookup(E5, " & chemin &", 3, false)"
[C9].Value = [C9].Value
[E9].Formula = "=vlookup(E5, " & chemin &", 4, false)"
[E9].Value = [E9].Value
[G9].Formula = "=vlookup(E5, " & chemin &", 6, false)"
[G9].Value = [G9].Value
...


Pour le prix (C9), le poids (E9) et le stock (G9), nous engageons la même recherche verticale sur le tableau. Mais nous demandons les informations respectives en retour (3, 4 et 6). Il ne nous reste plus qu'à tester cette solution.
  • Enregistrer les modifications (CTRL + S) et revenir sur la feuille Excel (ALT + Tab),
  • Avec la liste déroulante en cellule E5, choisir une nouvelle référence,
Extractions à partir d-un classeur externe en VBA Excel

Aussitôt et comme vous pouvez l'apprécier, toutes les informations, issues de la base de données externe fermée, sont extraites dans les cellules prévues à cet effet.

 
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