comparer 2 fichiers EXCEL

BOSE24

XLDnaute Nouveau
Bonjour

je découvre votre site je débute en VAB , j'ai a comparer 2 feuilles excel données dans quatres colonnes .
la référence on doit comparer la colonne a,b,c,d feuille 1 et feuilles 2.
j'ai trouvé un modelé fait PAR TOTOTITI2008 qui compare sur colonne A ET B fichier joint .Avez vous une solution a me proposer tout le reste sur le fichier est super mais j'ai besoin de la comparaison sur les 4 colonnes.

merci de votre retour
 

Pièces jointes

  • VMM-Comparer.xlsm
    69.7 KB · Affichages: 73
Dernière modification par un modérateur:

BOSE24

XLDnaute Nouveau
Re : comparer 2 fichiers EXCEL

Bonsoir

merci du retour solution intéressante si les lignes sont les mêmes mais j'ai besoin de savoir si y a eut des modifications lignes surprimes changées modifier comme indications de la feuile 3 mais je garde ta solution
 

klin89

XLDnaute Accro
Re : comparer 2 fichiers EXCEL

Bonjour BOSE24, CPk, le forum :)

Pour y voir plus clair, teste sur quelques lignes de données dans tes 2 feuilles avec tous les cas pouvant se présenter.
Si j'ai bien compris :
On compare Feuil1 et Feuil2, je m'appuie sur la colonne A, pour détecter les doublons.

Par rapport à Feuil1,
une nouvelle ligne en Feuil2, on notera "nouveau" en colonne F
une même ligne en Feuil2 avec un changement en colonne C, on notera "changé" en colonne F
une ligne de Feuil1 n'apparaissant plus dans Feuil2, on notera "effacé" en colonne F
Restitution dans une feuille créée pour l'occasion.
VB:
Option Explicit

Sub test()
Dim a, e, i As Long, j As Long, w, x, y As Long
    a = Sheets("Feuil1").Range("a1").CurrentRegion.Value
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a, 1)
            ReDim w(1 To 6)
            For j = 1 To UBound(a, 2)
                w(j) = a(i, j)
            Next
            w(6) = "Effacé"
            .Item(a(i, 1)) = w
        Next
        a = Sheets("Feuil2").Range("a1").CurrentRegion.Value
        For i = 2 To UBound(a, 1)
            If .exists(a(i, 1)) Then
                w = .Item(a(i, 1))
                If w(3) <> a(i, 3) Then
                    w(6) = "Changé"
                Else
                    w(6) = Empty
                End If
            Else
                ReDim w(1 To 6)
                For j = 1 To UBound(a, 2)
                    w(j) = a(i, j)
                Next
                w(6) = "Nouveau"
            End If
            .Item(a(i, 1)) = w
        Next
        For Each e In .keys
            If IsEmpty(.Item(e)(6)) Then .Remove e
        Next
        x = .items: y = .Count
    End With
    Application.ScreenUpdating = False
    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets("Résultat").Delete
    On Error GoTo 0
    Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Résultat"
    With Sheets("Résultat").Cells(1)
        .Resize(1, 6).Value = Array("A_TAG", "A_IOAD", "A_DESC", "A_IENAB", "A_PRI", "Statut")
        .Offset(1).Resize(y, 6).Value = _
        Application.Transpose(Application.Transpose(x))
        With .CurrentRegion
            .Font.Name = "calibri"
            .Font.Size = 10
            .VerticalAlignment = xlCenter
            .BorderAround Weight:=xlThin
            .Borders(xlInsideVertical).Weight = xlThin
            With .Rows(1)
                .BorderAround Weight:=xlThin
                .Interior.ColorIndex = 38
            End With
            .Columns.AutoFit
        End With
    End With
    Application.ScreenUpdating = True
End Sub
klin89
 

BOSE24

XLDnaute Nouveau
Re : comparer 2 fichiers EXCEL

Bonsoir kln89

merci de ton retour je viens de faire un essais j'ai un problème car ile me détecte des ligne changées mais qui ne le sont pas .
je t'explique pourquoi dans la colonne à chez des données qui peuvent avoir la même valeur la seul chose qui les différencie c'est la colonne D
exc
colonne A colonne B colonne C Colonne D
AAA DF BG BBB
AAA CV VB AB

donc il faut bien je pense en référence prendre la colonne A mais aussi la colonne D je ne sais pas si c'est possible pour le reste super

peut on le faire

merci pour votre aide

BOSE 24
 

BOSE24

XLDnaute Nouveau
Re : comparer 2 fichiers EXCEL

Bonsoir

une meilleur explication suite
la colonne A j'ai des données qui peuvent avoir la même valeur la seul chose qui les différencie c'est la colonne D
exc
colonne A colonne B colonne C Colonne D
AAA DF BG BBB
AAA CV VB AB

Il faut en référence prendre la colonne A (référence importante mais aussi la colonne D pour bien identifier les produits,je ne sais pas si c'est possible pour le reste parfait

merci pour votre aide
BOSE 24
 

klin89

XLDnaute Accro
Re : comparer 2 fichiers EXCEL

Re BOSE24,

Dans l'exemple joint, sur les 2 feuilles, la colonne D contient toujours la même valeur :confused:
Par contre, en colonne C, j'ai remarqué que des changements s'opéraient d'une feuille à l'autre.
Va comprendre :rolleyes:

Alors, remplace ceci :
VB:
If w(3) <> a(i, 3) Then
par
VB:
If w(4) <> a(i, 4) Then
klin89
 

BOSE24

XLDnaute Nouveau
Re : comparer 2 fichiers EXCEL

RE klin89

merci de ton retour mais comment on détecte si des valeur ce modifie en colonne B et C elle ne sont pas détectée

si tu peux me dire lors de mon premier post je parle d'une comparaison sur 4 colonne avec A ref obligatoire

BOSE24
 

BOSE24

XLDnaute Nouveau
Re : comparer 2 fichiers EXCEL

klin89

je te fais parvenir un model de fichier le resultat est de comparer par ligne les colonne si il y a des modification j'espere que tu comprendra les resulats demandé valeur de référence colonne A

merci
 

CPk

XLDnaute Impliqué
Re : comparer 2 fichiers EXCEL

Bonjour Klin89 et BOSE24 , désolé pour mon absence. Du coup j'ai perdu le fil mais pour résumer et si j'ai bien tout compris, on identifie une ligne de la feuille 1 par deux valeurs (colonne 1 et colonne 4) et on la recherche dans la feuille2 .

Si on la trouve est que les deux autres colonnes ont changé alors on sait que cela a été modifié
Si on ne la trouve pas, alors cela veut dire qu'elle a était supprimé de la feuille 2 ?
 

BOSE24

XLDnaute Nouveau
Re : comparer 2 fichiers EXCEL

Bonjour CPk et Klin89

exact pour la définition de

et si on trouve une nouvelle ligne dans la feuille 2 qui ne correspond à aucune ligne de la feuille 1 identifier par la colonne A ET D
c' est une nouvelle
bien sur on marque nouvelle changé ou supprime avec les lignes correspondantes si possible

bien sur si possible
 

klin89

XLDnaute Accro
Re : comparer 2 fichiers EXCEL

Re le forum,

Sans conviction.
A tester sur le fichier du post #1
VB:
Option Explicit

Sub test()
Dim a, e, i As Long, j As Long, w, x, y As Long, txt As String
    a = Sheets("Feuil1").Range("a1").CurrentRegion.Value
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a, 1)
            'on determine les cles du dictionnaire
            txt = Join$(Array(a(i, 1), a(i, 4)), Chr(2))
            ReDim w(1 To 6)
            For j = 1 To UBound(a, 2)
                w(j) = a(i, j)
            Next
            w(6) = "Effacé"
            .Item(txt) = w
        Next
        a = Sheets("Feuil2").Range("a1").CurrentRegion.Value
        For i = 2 To UBound(a, 1)
            txt = Join$(Array(a(i, 1), a(i, 4)), Chr(2))
            If .exists(txt) Then
                w = .Item(txt)
                If w(2) <> a(i, 2) Or w(3) <> a(i, 3) Then
                    w(6) = "Changé"
                Else
                    w(6) = Empty
                End If
            Else
                ReDim w(1 To 6)
                For j = 1 To UBound(a, 2)
                    w(j) = a(i, j)
                Next
                w(6) = "Nouveau"
            End If
            .Item(txt) = w
        Next
        For Each e In .keys
            If IsEmpty(.Item(e)(6)) Then .Remove e
        Next
        x = .items: y = .Count
    End With
    Application.ScreenUpdating = False
    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets("Résultat").Delete
    On Error GoTo 0
    Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Résultat"
    With Sheets("Résultat").Cells(1)
        .Resize(1, 6).Value = Array("A_TAG", "A_IOAD", "A_DESC", "A_IENAB", "A_PRI", "Statut")
        .Offset(1).Resize(y, 6).Value = _
        Application.Transpose(Application.Transpose(x))
        With .CurrentRegion
            .Font.Name = "calibri"
            .Font.Size = 10
            .VerticalAlignment = xlCenter
            .BorderAround Weight:=xlThin
            .Borders(xlInsideVertical).Weight = xlThin
            With .Rows(1)
                .BorderAround Weight:=xlThin
                .Interior.ColorIndex = 38
            End With
            .Columns.AutoFit
        End With
    End With
    Application.ScreenUpdating = True
End Sub
Il n'empêche que dans le fichier du post #1, il n'y avait aucun doublon figurant en colonne A des Feuilles 1 et 2, contrairement au nouvel exemple proposé.:mad:

klin89
 

Discussions similaires

Réponses
8
Affichages
404
Réponses
16
Affichages
651

Statistiques des forums

Discussions
312 402
Messages
2 088 113
Membres
103 731
dernier inscrit
dbsglob