Associer des valeurs identiques dans deux feuilles différentes

[Résolu/Fermé]
Signaler
Messages postés
9
Date d'inscription
mercredi 5 février 2014
Statut
Membre
Dernière intervention
17 février 2014
-
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
-
Bonjour.
J'utilise EXCEL 2010. Je suis débutant dans la programmation VBA.

En clair, j'ai deux feuilles (un tableau par feuille).

Feuille 1

ColA

Nbre1 cas 1 résultat 1 résultat 2 résultat 3
Nbre1 cas 2 résultat 1 résultat 2 résultat 3
Nbre2 cas 1 résultat 1 résultat 2 résultat 3
Nbre2 cas 2 résultat 1 résultat 2 résultat 3
...

Feuille 2

ColA ColB

Nbre1 x
Nbre2 y
Nbre3 z
...

x, y et z sont des chiffres fixes

Je dois faire des tests et boucles sur la feuille 1 mais j'ai besoin des valeurs x, y, z ... pour faire mes boucles et tests.

Ma question est donc : comment associer la colonne A de la feuille 1 à la colonne A de la feuille 2 et donc la colonne B de la feuille 2 et au final affecter à une variable TOTO la valeur x, y z ... ?

En gros, lorsque je parcours la colonne A de la feuille 1, le programme sait me dire quel chiffre x, y est associé.

J'ai fait une boucle de test mais j'ai tellement de valeurs dans mon premier tableau que EXCEL rame comme je teste tous les nombres de la colonne A. Du coup j'ai fait un malheureux GO TO pour arrêter de tester. Mais pour la dernière valeur je parcours toute la colonne et çà prend énormément de temps.

Mon code :

For Each rCellule In ActiveSheet.Cells.Columns(2)

For i = 2 To NbreCells + 1

For j = 2 To Elemtot + 1

If Sheets("Fichier_Brut").Cells(i, 2).Value = Sheets("Tri").Cells(j, 1).Value Then

pli = Sheets("Tri").Cells(j, 2)

GoTo etiquette

End If

Next j

etiquette:


i : variable de la première feuille
j : variable de la deuxième feuille


J'espère avoir été clair.


Je vous remercie.

4 réponses

Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 642
Bonjour,

J'espère avoir été clair
Raté!
Personnellement, j'entrevois ce que tu souhaites.
Cependant, j'ai besoin d'un explication simple. Du genre :

Je veux comparer les éléments contenus Feuil "Fichier_Brut", colonne B avec les éléments contenus dans la feuil "tri" colonne A. S'ils sont égaux, alors je veux faire ceci ou cela...
Messages postés
9
Date d'inscription
mercredi 5 février 2014
Statut
Membre
Dernière intervention
17 février 2014

Alors je retente.

Si la valeur d'une cellule de la colonne A de "fichier_brut" est égale à la valeur d'une cellule de la colonne A de "tri" alors j'affecte à pli la valeur de la cellule de la colonne B de "tri".
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 642
Ok. C'est mieux.

Essaye ceci :
Sub RetourneColB()
Dim Tab_Feuil1(), Tab_Feuil2(), Dico As Object, DrLig As Long, i As Long, Lign As Long, Elem

'Récolte des données Feuil1 Colonne A
With Sheets("Feuil1")
    DrLig = .Columns("A").Find("*", , , , , xlPrevious).Row
    Tab_Feuil1 = Application.Transpose(.Range("A2:A" & DrLig).Value)
End With
'Récolte des données Feuil2 Colonne A
With Sheets("Feuil2")
    DrLig = .Columns("A").Find("*", , , , , xlPrevious).Row
    Tab_Feuil2 = Application.Transpose(.Range("A2:A" & DrLig).Value)
    Set Dico = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(Tab_Feuil1)
        On Error Resume Next
        'teste si les données sont similaires
        If Not IsError(Application.Match(Tab_Feuil1(i), Tab_Feuil2, 0)) Then
            Lign = .Columns(1).Find(Tab_Feuil1(i), lookat:=xlWhole).Row
            'enregistrement de la donnée en doublon + la valeur contenue en colonne B feuil2
            Dico(Tab_Feuil1(i)) = .Cells(Lign, 2)
        End If
    Next i
End With
'Restitution des données
Sheets("Feuil1").[Z2].Resize(Dico.Count, 1) = Application.Transpose(Dico.keys)
Sheets("Feuil1").[AA2].Resize(Dico.Count, 1) = Application.Transpose(Dico.items)
End Sub
Messages postés
9
Date d'inscription
mercredi 5 février 2014
Statut
Membre
Dernière intervention
17 février 2014

Merci beaucoup :))) .

La macro tourne bien.

Si j'ai bien compris le fonctionnement des dictionnaires mais donc pour récupérer les valeurs que je souhaite il faut que je récupère l'item avec la clé qui lui ait associé ?
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 642
C'est tout à fait cela.
Un dictionary se construit comme ceci :
Dico(clé) = Item
Cela permet, entres autres, d'établir des listes sans doublon.
Tu trouveras ICI un tutoriel de l'excellent Jacques Boisgontier.
Messages postés
9
Date d'inscription
mercredi 5 février 2014
Statut
Membre
Dernière intervention
17 février 2014

Merci pour ton aide :-) .
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 642
Mais de rien.
A+