Comparer deux fichiers excel à l'aide d'une macro VBA

Fermé
SaidB22 Messages postés 2 Date d'inscription lundi 14 février 2022 Statut Membre Dernière intervention 15 février 2022 - Modifié le 14 févr. 2022 à 16:37
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 15 févr. 2022 à 14:05
Bonjour,

Étant novice sur le langage VBA, j'aimerais savoir si quelqu'un parmi vous pourrait m'aider à mettre en place une macro qui me permettrait de comparer deux colonnes sur deux fichiers Excel distincts et compléter d'autres colonnes sur le fichier de destination, quand la condition est vérifiée ( quand les valeurs des cellules comparées sont identiques ) .

En résumé, j'aimerais comparer les valeurs de la colonne B du fichier A avec les valeurs de la colonne F du fichier B, si les valeurs sont identiques, il faudrait remplir d'autres colonnes sur le fichier B en se basant sur le fichier A.

Par avance merci de votre aide !



A voir également:

3 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
15 févr. 2022 à 10:34
Bonjour Said, bonjour le forum,

Pour éviter de perdre du temps, je te propose de nous envoyer un fichier Excel parce que je doute que PhotoChope soit capable de faire ça. Et aussi, plus de précision sur les autres colonnes à remplir. Ton problème me paraît relativement simple à résoudre avec le fichier qui va bien.
Pour envoyer un fichier il y a plein de sites hébergeurs de fichiers. Par exemple : https://www.cjoint.com/
0
SaidB22 Messages postés 2 Date d'inscription lundi 14 février 2022 Statut Membre Dernière intervention 15 février 2022
15 févr. 2022 à 11:05
Bonjour @ThauTheme,

Merci pour ta réponse.

En effet, je souhaiterais comparer deux fichiers Excel A et B et effectuer quelques manips quand la condition est vérifiée ou pas :

1 - On compare la colonne B du fichier A avec la colonne F du fichier B, si les cellules sont identiques :

--> On remplit les colonnes vertes du fichier B avec les données correspondantes, contenues dans les colonnes vertes du fichier A.

Autre manip supplémentaire :

- Si on s’aperçoit qu'il existe des données sur la colonne B du fichier A mais pas dans la colonne F du fichier B, on ajoute la ligne avec les données correspondantes contenues dans les colonnes vertes du fichier A.

Voici le lien vers les fichiers en question : https://www.cjoint.com/c/LBpkdSUlJrz
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié le 15 févr. 2022 à 14:05
Bonjour Said, bonjour le forum,

Si tes deux fichiers sont ouverts, le code ci-dessous à placer dans le fichier A (qui, par conséquent deviendra Fichier A.xlsm) :

Sub Macro1()
Dim CA As Workbook 'déclare la variable CA (Calsseur A)
Dim OA As Worksheet 'déclare la variable OA (Onglet A)
Dim CB As Workbook 'déclare la variable CB (Calsseur B)
Dim OB As Worksheet 'déclare la variable OB (Onglet B)
Dim TVA As Variant 'déclare la variable TVA (Tableau des Valeurs A)
Dim TVB As Variant 'déclare la variable TVB (Tableau des Valeurs B)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim TEST As Boolean 'déclare la variable TEST
Dim PLV As Integer 'décalre la varaible PL  (Prelière Ligne vide)

Set CA = ThisWorkbook 'définit le classeur CA
Set OA = CA.Worksheets("PUBLISHING TEAM   Facturation 2") 'définit l'onglet OA
Set CB = Workbooks("Fichier B.xlsx") 'définit le classeur CB
Set OB = CB.Worksheets("Feuil1") 'définit l'onglet OB
TVA = OA.Range("A1").CurrentRegion 'définit le tableau des valeurs TVA
TVB = OB.Range("A1").CurrentRegion 'définit le tableau des valeurs TVB
For I = 2 To UBound(TVA, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TVA (en partant de la seconde)
    TEST = False 'définit la variable TEST
    For J = 2 To UBound(TVB, 1) 'boucle 2 : sur toutes les lignes J du tableau des valeurs TVB (en partant de la seconde)
        'condition : si le texte après le tiret de la donnée ligne I colonne 2 de TVA est égal a la valeur ligne J colonne 6 de TVB (convertie en texte)
        If Split(TVA(I, 2), "-")(1) = CStr(TVB(J, 6)) Then
            OB.Cells(J, 9).Value = TVA(I, 5) 'récupère dans la cellule ligne J colonne 9 de l'onglet OB la valeur de la donnée ligne I colonne 5 de TVA
            OB.Cells(J, 11).Value = TVA(I, 6) 'récupère dans la cellule ligne J colonne 11 de l'onglet OB la valeur de la donnée ligne I colonne 6 de TVA
            OB.Cells(J, 13).Value = TVA(I, 7) 'récupère dans la cellule ligne J colonne 13 de l'onglet OB la valeur de la donnée ligne I colonne 6 de TVA
            TEST = True 'redéfinit la variable TEST
            Exit For 'sort de la boucle 2
        End If 'fin de la condition
        If TEST = False Then 'si TEST est [vrai] (la ligne n'existe pas dans B)
            PLV = OB.Cells(Application.Rows.Count, "A").End(xlUp).Row + 1 'définit la premiere ligne vide PLV de la colonne A de l'onglet OB
            OB.Cells(PLV, 1).Value = TVA(I, 4) 'récupère dans la cellule ligne PLV colonne 1 de l'onglet OB la valeur de la donnée ligne I colonne 4 de TVA
            OB.Cells(PLV, 6).Value = Split(TVA(I, 2), "-")(1) 'récupère dans la cellule ligne PLV colonne 6 de l'onglet OB la valeur de la donnée ligne I colonne 2 de TVA (après le tiret)
            OB.Cells(PLV, 7).Value = TVA(I, 1) 'récupère dans la cellule ligne PLV colonne 7 de l'onglet OB la valeur de la donnée ligne I colonne 1 de TVA
            OB.Cells(PLV, 8).Value = TVA(I, 3) 'récupère dans la cellule ligne PLV colonne 8 de l'onglet OB la valeur de la donnée ligne I colonne 3 de TVA
            OB.Cells(PLV, 9).Value = TVA(I, 5) 'récupère dans la cellule ligne PLV colonne 9 de l'onglet OB la valeur de la donnée ligne I colonne 5 de TVA
            OB.Cells(PLV, 11).Value = TVA(I, 6) 'récupère dans la cellule ligne PLV colonne 11 de l'onglet OB la valeur de la donnée ligne I colonne 6 de TVA
            OB.Cells(PLV, 13).Value = TVA(I, 7) 'récupère dans la cellule ligne PLV colonne 13 de l'onglet OB la valeur de la donnée ligne I colonne 7 de TVA
            Exit For 'sort de la boucle 2
        End If 'fin de la condition
    Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
MsgBox "Données traitées !" 'message
End Sub


0