VBA : rechercher un identifiant puis remplir une liste

Je veux réaliser une macro VBA qui remplisse une feuille à partir d'une autre en prenant en compte le n° d'établissement commun aux deux feuilles. Il faut que la macro écrive "oui" dans la colonne loyer si l'établissement est une location et "non" dans les cas contraire.

A noter qu'un établissement peut être enregistré dans une feuille mais pas dans une autre.

Pouvez vous m'aider ?

36etablissement.xlsx (10.40 Ko)

bonjour,

VBA Obligatoire???

Sinon formule :

=SI(ESTERREUR(RECHERCHEV(B2;etablissement;2;0));"?";SI(RECHERCHEV(B2;etablissement;2;0)="location";"oui";"non"))

@+

Bonjour

Un essai à tester. Te convient-il ?

Bye !

Bonjour Eddim, bonjour le forum,

Essaie comme ça :

Sub Macro1()
Dim O1 As Worksheet 'déclare la variable O1 (Onglet 1)
Dim O2 As Worksheet 'déclare la variable O2 (Onglet 2)
Dim TV1 As Variant 'déclare la variable TV1 (Tableau des Valeurs de l'Onglet 1)
Dim TV2 As Variant 'déclare la variable TV2 (Tableau des Valeurs de l'Onglet 2)

Set O1 = Worksheets("Feuil1") 'définit l'onglet O1
Set O2 = Worksheets("Feuil2") 'définit l'onglet O1
TV1 = O1.Range("A1").CurrentRegion 'définit le tableau des valeurs TV1
TV2 = O2.Range("A1").CurrentRegion 'définit le tableau des valeurs TV2
For I = 2 To UBound(TV1, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV1 (en partant de la seconde)
    For J = 2 To UBound(TV2, 1) 'boucle 1 : sur toutes les lignes J du tableau des valeurs TV2 (en partant de la seconde)
        If TV1(I, 2) = TV2(J, 1) Then 'condition : si la donnée en colonne 2 de TV1 est égale à la donnée en colonne 1 de TV2
            'renvoie "oui" ou "non" dans la cellule ligne I colonne 5 de l'onglet O1
            'en fonction de la valeur de la donnée ligne J colonne 2 de TV2
            O1.Cells(I, 5).Value = IIf(UCase(TV2(J, 2)) = "LOCATION", "oui", "non")
            Exit For 'sort de la boucle 2
        End If 'fin de la condition
    Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
End Sub

[Édition]

Bojour Gmb, Bernard, nos posts se sont croisés...

Bonjour bernard22, j'ai testé ta fonction et le problème est qu'elle renvoie un ? dans chaque cellule

ThauThème ton code fonctionne parfaitement. J'avais oublié de mentionner que sur certaines lignes, location n'est pas toujours tout seul tel quel dans une cellule, il peut se rencontrer comme location ou locationN ou Nlocation ou ata;location;N;;

Comment est ce qu'on peut faire en sorte que dès que la partie de texte location est présente, il la reconnaisse ?

Bonjour,

il faut évidemment nommer "Etablissement" la zone A2:B8 de l'onglet "Feuil1"

@+

5etablissement.xlsx (10.99 Ko)

Bernard, J'ai nommé "Etablissement" la zone A2:B8 mais je ne comprend pas pourquoi toutes les cellules ne sont pas correctement remplies.

Pourquoi ta formule fonctionne dans le fichier que tu as envoyé puisque il y a "Etablissement" dans recherchev à la place d'une plage de cellules ?

Bonjour le fil, bonjour le forum,

Eddim a écrit :

ThauThème ton code fonctionne parfaitement. J'avais oublié de mentionner que sur certaines lignes, location n'est pas toujours tout seul tel quel dans une cellule, il peut se rencontrer comme location ou locationN ou Nlocation ou ata;location;N;;

Comment est ce qu'on peut faire en sorte que dès que la partie de texte location est présente, il la reconnaisse ?

Essaie comme ça :

Sub Macro1()
Dim O1 As Worksheet 'déclare la variable O1 (Onglet 1)
Dim O2 As Worksheet 'déclare la variable O2 (Onglet 2)
Dim TV1 As Variant 'déclare la variable TV1 (Tableau des Valeurs de l'Onglet 1)
Dim TV2 As Variant 'déclare la variable TV2 (Tableau des Valeurs de l'Onglet 2)

Set O1 = Worksheets("Feuil1") 'définit l'onglet O1
Set O2 = Worksheets("Feuil2") 'définit l'onglet O1
TV1 = O1.Range("A1").CurrentRegion 'définit le tableau des valeurs TV1
TV2 = O2.Range("A1").CurrentRegion 'définit le tableau des valeurs TV2
For I = 2 To UBound(TV1, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV1 (en partant de la seconde)
    For J = 2 To UBound(TV2, 1) 'boucle 1 : sur toutes les lignes J du tableau des valeurs TV2 (en partant de la seconde)
        If TV1(I, 2) = TV2(J, 1) Then 'condition : si la donnée en colonne 2 de TV1 est égale à la donnée en colonne 1 de TV2
            'renvoie "oui" ou "non" dans la cellule ligne I colonne 5 de l'onglet O1
            'en fonction de la valeur de la donnée ligne J colonne 2 de TV2
            O1.Cells(I, 5).Value = IIf(InStr(1, TV2(J, 2), "location") > 0, "oui", "non")
            Exit For 'sort de la boucle 2
        End If 'fin de la condition
    Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
End Sub

Bonsoir,

Pour travailler avec recherchev, il faut que les données de l'onglet Feuil2 soient triées sur la colonne A.

Si tu ne peux pas trier ces données, il faut passer par la combinaison de INDEX et EQUIV (colonne F)

@+

12etablissement1.xlsx (11.17 Ko)

Bonjour à tous

Nouvelle version à tester.

Bye !

Merci pour à tous pour votre précieuse aide ! Thautheme la modification de recherche fonctionne très bien Bernard ta formule fonctionne. gmb ça fonctionne tel quel mais dans les cas ou les termes recherchés sont écrit différe il semble y avoir des bugs

Rechercher des sujets similaires à "vba rechercher identifiant puis remplir liste"