Macro excel 2007 pour recheche de texte

weedhopper Messages postés 4 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 19 février 2012 - 2 avril 2009 à 10:18
kabalagi Messages postés 2 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 2 avril 2009 - 2 avril 2009 à 17:09
Bonjour à vous.

Tout d'abord, j'espère ne pas m'être trompé de forum !

Voilà ma question :

J'ai deux onglets. L'un (le A) contient 1200 noms et matricules, l'autre (le B) contient 700 noms

Je voudrais ecrire un macro qui scanne l'onglet B et pour chaque ligne aille chercher dans l'onglet A le matricule (en faisant une recherche sur le nom) et vienne ensuite le rajouter s'il le trouve.

Au début, j'avais fait une boucle sur les 700 noms et pour chaque item une autre boucle pour comparer avec les 1200 noms...mais bon c'est long à l'execution.

Merci d'avance

3 réponses

kabalagi Messages postés 2 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 2 avril 2009
2 avril 2009 à 16:35
Bonjour,

tu peux peut-être te passer d'écrire une macro en utilisant simplement la fonction RECHERCHEV dont voici un exemple :

Dans OngletA, tu codes la formule suivante dans chaque ligne en regard du nom :

=RECHERCHEV(A2;OngletB!A:B;2;FAUX)

La référence "A2" correspond au nom recherché de OngletA.
La reférence "OngletB!A:B" correspond à la plage de recherche où se trouvent le nom et le matricule dans l'OngletB. Attention, la valeur recherchée (le nom) doit être dans la première colonne de la plage de recherche. Dans cet exemple, la valeur matricule occupe la deuxième colonne de la plage de recherche (B), ce qui est précisé par le paramètre "2". Dans un autre exemple, si le nom est en colonne C et le matricule en colonne G, il faudrait écrire : RECHERCHEV(A2;OngletB!C:G;5;FAUX). Enfin, le paramètre "FAUX" précise que si la valeur cherchée n'existe pas, il affiche une erreur (N/A) que tu peux gérer par une fonction SI(ESTERREUR(...);;). Ce qui donnerait au final :

=SI(ESTERREUR(RECHERCHEV(A2;Feuil1!A:B;2;FAUX));"";RECHERCHEV(A2;Feuil1!A:B;2;FAUX))

La fonction RECHERCHEV présuppose que tes valeurs sont stockées en colonne (ce qui doit être le cas vu le nombre de valeurs). Sache quand même qu'il existe une fonction RECHERCHEH qui fait la même choses sur des lignes.
0
weedhopper Messages postés 4 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 19 février 2012
2 avril 2009 à 16:51
Oui, mais en fait, ma macro sera integré dans une série de macro...c'est pour cette raison que je voulais faire la recherche via une macro.
0
kabalagi Messages postés 2 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 2 avril 2009
2 avril 2009 à 17:09
Il est tout à fait possible de positionner la fonction RECHERCHEV par macro dans une colonne de travail puis ensuite recopier les valeurs de cette colonne à l'endroit désiré (ou laisser en l'état si la colonne est une colonne définitive).

En VB, ça donnerait un truc du genre :

 Sheets("OngletA").Range("B1:B700").Formula = "=IF(ISERROR(VLOOKUP(RC1,OngletB!C1:C2,2,FALSE)),"""",VLOOKUP(RC1,OngletB!C1:C2,2,FALSE))"
0
Rejoignez-nous