Matcher champs

Bonjour à tous,

sur un classeur1 j'ai 3 champs:
ID REFERENCE COULEUR
4533 15018A NOIR
4537 15015A NOIR
4541 15976B NOIR
4542 15977A NOIR
4543 15977A BLEU
4544 15977A COGNAC
4545 16265 NOIR
4546 16265 ROUGE
4547 16067 KAKI
4548 16067 MARINE
4549 16067 NOIR
4550 16067 TAUPE
4551 16266 TAUPE
4552 16266 KAKI
4553 16266 NOIR
4554 16266 MARINE

Sur un second classeur, j'ai les 3 même champs dont le champ ID vide:

ID reference Lib Couleur
15018A Marron
15018A Noir
15018A Prune
15015A Marron
15015A Noir
15015A Prune
15976B Bleu
15976B Cognac
15976B Noir
15977A Bleu
15977A Cognac
15977A Noir
16265 Noir
16265 Rouge

Pensez vous qu'il est possible de trouver une solution pour faire matcher les champs ID si REFERENCE et COULEUR sont identiques?

Merci d'avance pour votre aide,

5 réponses

  1. Qu'est-ce que vous entendez par matcher ?
    0
    1. si REFERENCE et COULEUR sur le classeur1 sont identiques à REFERENCE et COULEUR du classeur2, alors ID du classeur2 est égal à ID du classeur1.

      Sachant que comme dans l'exemple, il n'y a pas le même nombre de ligne dans les 2 classeurs.
      0
      1. Pas très compliquer j'aurai juste besoin des nom exacte des deux classeurs, stp.
        0
    2. Grand merci pour ton aide.

      Ce sont des exemples mais disons classeur1 / feuille1 et classeur2 / feuille1

      Le champ ID à remplir étant dans classeur2 / feuille1
      0
      1. Avec les deux classeur ouvert avec les noms de classeur et les noms de feuille strictement identique au code :

        Soit :

        1er classeur : classeur1.xlsm
        1ère feuille : feuille1
        2e classeur : classeur2.xlsm
        2e feuille : feuille1

        Vous copier celui dans un "Module1" de l'un des deux classeur et vous lancer la macro analyser.

        Si vous ne savez pas comment faire je peux vous expliquer

        Sub Analyser()
        For L = 1 To Compter(Workbooks("classeur1.xlsm"))
            For LL = 1 To Compter(Workbooks("classeur2.xlsm"))
                If Workbooks("classeur1.xlsm").Sheets("feuille1").Cells(L, 2).Value = Workbooks("classeur2.xlsm").Sheets("feuille1").Cells(L, 1).Value And Workbooks("classeur1.xlsm").Sheets("feuille1").Cells(L, 3).Value = Workbooks("classeur2.xlsm").Sheets("feuille1").Cells(L, 2).Value Then
                    Workbooks("classeur2.xlsm").Sheets("feuille1").Cells(L, 3).Value = Workbooks("classeur2.xlsm").Sheets("feuille1").Cells(L, 1).Value
                End If
            Next
        Next
        End Sub
        
        Function Compter(classeur As Workbook) As Integer
        Dim Compteur As Integer
            Compteur = 0
        Dim L As Integer
            L = 1
        
        Do While classeur.Sheets("feuille1").Cells(L, 1).Value <> ""
            L = L + 1
        Loop
        Compter = L - 1
        End Function


        Redites moi si vous avez des question !
        0
      2. Bon nous avons adapté le code à notre situation, enregistré le classeur pour la prise en charge des macros etc, lancé le code, et là rien ne se passe. Voici le code adapté :

        Sub Analyser()
        For L = 1 To Compter(Workbooks("test_macro.xlsm"))
        For LL = 1 To Compter(Workbooks("test_macro.xlsm"))
        If Workbooks("test_macro.xlsm").Sheets("Feuil1").Cells(L, 4).Value = Workbooks("test_macro.xlsm").Sheets("Feuil2").Cells(L, 7).Value And Workbooks("test_macro.xlsm").Sheets("Feuil1").Cells(L, 6).Value = Workbooks("test_macro.xlsm").Sheets("Feuil2").Cells(L, 11).Value Then
        Workbooks("test_macro.xlsm").Sheets("Feuil2").Cells(L, 1).Value = Workbooks("test_macro.xlsm").Sheets("Feuil1").Cells(L, 1).Value
        End If
        Next
        Next
        End Sub

        Function Compter(classeur As Workbook) As Integer
        Dim Compteur As Integer
        Compteur = 0
        Dim L As Integer
        L = 1

        Do While classeur.Sheets("Feuil1").Cells(L, 1).Value <> ""
        L = L + 1
        Loop
        Compter = L - 1
        End Function

        pouvez-vous confirmer que ("test_macro.xlsm").Sheets("Feuil1").Cells(L, 4).value désigne bien la colonne D à l'index de ligne L? si c'est bien ça alors les références de nos valeurs sont bonnes et que rien ne soit écrit est très curieux, n'est-ce pas?
        En tout cas merci pour le coup de main/pouce
        0
      3. L représente la Ligne en coure dans la boucle for du 1er classeur

        LL représente la ligne en coure dans la boucle for du 2e classeur

        Mon erreur est toute bête voici la correction :

        Sub Analyser() 
        For L = 1 To Compter(Workbooks("test_macro.xlsm").Sheets("Feuil1")) 
        For LL = 1 To Compter(Workbooks("test_macro.xlsm").Sheets("Feuil2")) 
        If Workbooks("test_macro.xlsm").Sheets("Feuil1").Cells(L, 4).Value = Workbooks("test_macro.xlsm").Sheets("Feuil2").Cells(LL, 7).Value And Workbooks("test_macro.xlsm").Sheets("Feuil1").Cells(L, 6).Value = Workbooks("test_macro.xlsm").Sheets("Feuil2").Cells(LL, 11).Value Then 
        Workbooks("test_macro.xlsm").Sheets("Feuil2").Cells(L, 1).Value = Workbooks("test_macro.xlsm").Sheets("Feuil1").Cells(LL, 1).Value 
        End If 
        Next 
        Next 
        End Sub 
        
        Function Compter(feuille As sheets) As Integer 
        Dim Compteur As Integer 
        Compteur = 0 
        Dim L As Integer 
        L = 1 
        
        Do While feuille.Cells(L, 1).Value <> "" 
        L = L + 1 
        Loop 
        Compter = L - 1 
        End Function 


        Essayer comme ça mais sans votre classeur il est difficile pour moi d'être sûr que ça soit juste.

        Si vous voulez vous pouvez me transmettre des copies anonymisé de votre classeur via cjoint.com
        0
      4. erreur d'Exécution '13' : Incompatibilité de type
        donc débogage
        "For L = 1 To Compter(Workbooks("test_macro.xlsm").Sheets("Feuil1"))" apparaît en surbrillance
        0
      5. Faite une copie de vos classeur avec juste les entêtes de vos données et envoyer les moi via cjoint.com ça sera plus facile ;)
        0