Matcher champs

djul_87 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   -
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. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
     
    Qu'est-ce que vous entendez par matcher ?
    0
  2. djul_87 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
     
    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. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
       
      Pas très compliquer j'aurai juste besoin des nom exacte des deux classeurs, stp.
      0
  3. djul_87 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
     
    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. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
       
      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. djul_87 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
       
      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. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
       
      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. djul_87 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
       
      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. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
       
      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
  4. djul_87 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
     
    Faire correspondre
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question