Malgré moultes recherches je n'ai pas trouvé de solutions à mon problèmes.
J'ai un onglet base avec des numéraux de groupe et la colonne a côté des prénoms. Je souhaiterais via un code VBA faire une rechercheV sur un numéro de groupe (afficher dans une cellule du deuxième onglet) et que les prénoms qui lui sont associés soit afficher dans le deuxième onglet...
Je pense qu'avec une boucle ce doit être possible mais pour le moment toutes mes tentatives ont été infructueuses...
A tout hasard et au cas où une solution sans vba t'intéresserait, une proposition en pièce jointe (il suffit de changer le chiffre en C2)
Si VBA te semble utile, voir la méthode Find (avec FindNext)
Effectivement je préfererai en VBA car c'est un fichier qui va "voyager" du coup je souhaiterais mettre une interface propre en evitant de faire apparaitre les formules...
Je vais me pencher sur le find next, si tu as une autre idee, n'hésite pas !
Je ne suis pas un expert, mais il me semble qu'avec une liste de dimension réduite, une simple boucle, testant le contenu de chaque cellule parcourue dans la colonne B de la feuille Base, serait assez simple à mettre en oeuvre.
Une autre solution pourrait être de mettre en oeuvre, via Vba, le filtre élaboré en copiant dans la feuille2.
La méthode Find restant une solution tout à fait recommandée (attention, lire les nombreux échanges ici même à ce sujet)
Bonjour Solide et bienvenue, salut Modeste ,
Avec juste une petite boucle (Find et FindNext seraient plus rapide, mais ça dépends du nombre de ligne à scanner et la boucle est plus simple à comprendre ...)
Code:
Sub Test()
Dim I As Integer, J As Byte
J = 4
Sheets("Sheet2").Range("B4:C12").ClearContents
With Sheets("Base")
For I = 2 To .Range("B" & Rows.Count).End(xlUp).Row
If .Range("B" & I) = Sheets("Sheet2").Range("C2") Then
Sheets("Sheet2").Range("B" & J) = .Range("B" & I)
Sheets("Sheet2").Range("C" & J) = .Range("C" & I)
J = J + 1
End If
Next I
End With
End Sub
Par contre, en parlant d'interface propre, tu prends beaucoup plus de risques en mettant du VBA pour un fichier qui va voyager (le simple changement de nom de l'onglet peux faire planter ta Sub ) que des formules dans des cellules verrouillées qui s'adapteront automatiquement en cas de modification de ton classeur (ajout ou suppression de ligne, modification du nom de l'onglet, etc. ), mais c'est à toi de voir ...
Bonne suite
Mon problème est que ma plage de cellule B2:C595 utilisée pour la recherchev doit toujours être la même. Or avec ma boucle, ma plage s'incrémente à chaque fois.
Avez vous une idée de comment fixer cette plage? à l'aide d'une variable peut être qu'on fixe à chaque passage de boucle??
Ceci dit, peux-tu m'expliquer pourquoi utiliser vba pour recopier une formule, sur une plage fixe? (attention, je n'ai pas dit que ça n'avait pas de sens, hein, je cherche juste à comprendre dans quel cas de figure tu te trouves). Merci
Hi Modeste!
Merci pour ta réponse rapide, je viens de tester et ça fonctionne à peu près sauf que j'ai un autre bug qui est apparu avec ma formule.
>> En PJ un exemple simplifié de mon fichier. Je ne comprends pas pourquoi j'ai une erreur lorsque ma cellule en colonne C est vide.
Evidemment tu dois te douter que si je le fais en vba ce n'est pas pour rien
Concrètement, ma feuille1 est actualisée chaque jour (donc modifiée). Ma feuille2 est un tableau de base qui me sert à corriger les erreurs dans la feuille1. Le fichier sera utilisé par d'autres personnes que moi et toutes les corrections doivent se faire automatiquement. Voilà donc la réponse à ta question.
Je crains que tu n'aies un souci avec cette partie de ta formule:
Code:
RECHERCHEV(D2;Feuil2!$B$2:$C$17;1;FAUX)
La valeur_cherchée (ici, D2, donc Ref_A, pour ta première formule!) doit se trouver dans la première colonne de ta table_matrice ... Or ce n'est pas le cas! Les seules valeurs qui semblent correctes dans ta colonne "copie" sont celles où la valeur de C2 est recopiée, lorsque C2 n'est pas vide! Si tu supprimes ta condition et que tu recopies ta rechercheV dans toute la colonne, tu as des messages d'erreurs partout.
Si tes données sont structurées comme dans ton exemple, la fonction recherchev ne peut pas fonctionner! Il vaut mieux utiliser INDEX et EQUIV