VBA : rechercher un identifiant puis remplir une liste Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
E
Eddim
Jeune membre
Jeune membre
Messages : 21
Inscrit le : 22 mai 2017
Version d'Excel : 2013 FR

Message par Eddim » 26 mai 2017, 14:15

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 ?
Etablissement.xlsx
(10.4 Kio) Téléchargé 16 fois
Avatar du membre
bernard22
Membre dévoué
Membre dévoué
Messages : 877
Appréciations reçues : 11
Inscrit le : 26 mars 2015
Version d'Excel : 2013FR

Message par bernard22 » 26 mai 2017, 14:37

bonjour,

VBA Obligatoire???

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

@+
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 13'055
Appréciations reçues : 388
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 26 mai 2017, 14:42

Bonjour

Un essai à tester. Te convient-il ?
Bye !
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 4'047
Appréciations reçues : 212
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 26 mai 2017, 14:59

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...
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
E
Eddim
Jeune membre
Jeune membre
Messages : 21
Inscrit le : 22 mai 2017
Version d'Excel : 2013 FR

Message par Eddim » 26 mai 2017, 15:40

Bonjour bernard22, j'ai testé ta fonction et le problème est qu'elle renvoie un ? dans chaque cellule
E
Eddim
Jeune membre
Jeune membre
Messages : 21
Inscrit le : 22 mai 2017
Version d'Excel : 2013 FR

Message par Eddim » 26 mai 2017, 16:27

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 ?
Avatar du membre
bernard22
Membre dévoué
Membre dévoué
Messages : 877
Appréciations reçues : 11
Inscrit le : 26 mars 2015
Version d'Excel : 2013FR

Message par bernard22 » 26 mai 2017, 17:05

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

@+
Etablissement.xlsx
(10.99 Kio) Téléchargé 5 fois
E
Eddim
Jeune membre
Jeune membre
Messages : 21
Inscrit le : 22 mai 2017
Version d'Excel : 2013 FR

Message par Eddim » 26 mai 2017, 17:31

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 ?
Etablissement1.xlsx
(10.88 Kio) Téléchargé 6 fois
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 4'047
Appréciations reçues : 212
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 26 mai 2017, 20:39

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
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
Avatar du membre
bernard22
Membre dévoué
Membre dévoué
Messages : 877
Appréciations reçues : 11
Inscrit le : 26 mars 2015
Version d'Excel : 2013FR

Message par bernard22 » 26 mai 2017, 21:50

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)

@+
Etablissement1.xlsx
(11.17 Kio) Téléchargé 11 fois
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message