Matcher champs

Fermé
djul_87 Messages postés 6 Date d'inscription lundi 22 septembre 2014 Statut Membre Dernière intervention 22 septembre 2014 - 22 sept. 2014 à 14:37
via55 Messages postés 14474 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 19 septembre 2024 - 22 sept. 2014 à 21:01
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

skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
22 sept. 2014 à 14:40
Qu'est-ce que vous entendez par matcher ?
0
djul_87 Messages postés 6 Date d'inscription lundi 22 septembre 2014 Statut Membre Dernière intervention 22 septembre 2014
22 sept. 2014 à 14:52
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
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
22 sept. 2014 à 15:01
Pas très compliquer j'aurai juste besoin des nom exacte des deux classeurs, stp.
0
djul_87 Messages postés 6 Date d'inscription lundi 22 septembre 2014 Statut Membre Dernière intervention 22 septembre 2014
22 sept. 2014 à 15:12
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
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
22 sept. 2014 à 15:20
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
djul_87 Messages postés 6 Date d'inscription lundi 22 septembre 2014 Statut Membre Dernière intervention 22 septembre 2014
22 sept. 2014 à 16:04
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
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
22 sept. 2014 à 16:15
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
djul_87 Messages postés 6 Date d'inscription lundi 22 septembre 2014 Statut Membre Dernière intervention 22 septembre 2014
22 sept. 2014 à 16:21
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
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
22 sept. 2014 à 16:52
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
djul_87 Messages postés 6 Date d'inscription lundi 22 septembre 2014 Statut Membre Dernière intervention 22 septembre 2014
22 sept. 2014 à 15:18
Faire correspondre
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
via55 Messages postés 14474 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 19 septembre 2024 2 728
22 sept. 2014 à 21:01
Bonsoir

Une autre possibilté sans macro, par formule matricielle :
https://www.cjoint.com/?0IwvdGKFDI9

Cdlmnt
0