Associer des valeurs identiques dans deux feuilles différentes

Résolu/Fermé
Yann91445 Messages postés 9 Date d'inscription mercredi 5 février 2014 Statut Membre Dernière intervention 17 février 2014 - 5 févr. 2014 à 13:38
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 5 févr. 2014 à 15:23
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.
A voir également:

4 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
5 févr. 2014 à 13:44
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...
0
Yann91445 Messages postés 9 Date d'inscription mercredi 5 février 2014 Statut Membre Dernière intervention 17 février 2014
5 févr. 2014 à 13:54
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".
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
5 févr. 2014 à 14:32
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
0
Yann91445 Messages postés 9 Date d'inscription mercredi 5 février 2014 Statut Membre Dernière intervention 17 février 2014
5 févr. 2014 à 15:14
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é ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
5 févr. 2014 à 15:17
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.
0
Yann91445 Messages postés 9 Date d'inscription mercredi 5 février 2014 Statut Membre Dernière intervention 17 février 2014
5 févr. 2014 à 15:23
Merci pour ton aide :-) .
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
5 févr. 2014 à 15:23
Mais de rien.
A+
0