Associer des valeurs identiques dans deux feuilles différentes

Résolu
Yann91445 Messages postés 9 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  2. Yann91445 Messages postés 9 Statut Membre
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  3. Yann91445 Messages postés 9 Statut Membre
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  4. Yann91445 Messages postés 9 Statut Membre
     
    Merci pour ton aide :-) .
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Mais de rien.
      A+
      0