Comparer deux fichiers excel

Fermé
beber - 2 mars 2009 à 13:29
 Utilisateur anonyme - 3 mars 2009 à 03:22
Bonjour,

Je dois comparer deux fichiers excel. Ils ont le même nombre de ligne et de colonne. Je dois comparer ligne par ligne et c’est ça mon problème. Dans la 1ère colonne de mon 1er fichier j’ai des codes barres différents. Je les retrouve dans la 1ère colonne de mon 2ème fichier mais pas dans le même ordre. Et je dois comparer chaque ligne entre elles. Par exemple, le 1er code barre de mon 1er fichier est 12223 en (ligne 1 ; col 1), je dois comparer cette ligne avec la ligne dans le 2ème fichier qui correspond au même code barre 12223 et qui est (lign 25 ; col 1). J’espère que quelqu’un pourra m’aider et que je suis claire dans mes explications ! Sinon dites-le moi j’essayerai de m’expliquer mieux !

merci d'avance
A voir également:

2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 mars 2009 à 16:38
Bonjour,

Peut il y avoir plusieurs le m^me code dans le fichier 2 ?
par exemple 12223 ligne 25 et ligne 34...

quelle indication veux tu avec une comparaison (positive ou négative) et où doit tu la mettre ?

VBA est il imposé?
2
Non il n'y a qu'une seule fois le même code dans le fichier 2. Dès qu'il y a une différence, la celulle où se trouve l'erreur est mise en couleur pour bien la voir! et oui visual est imposé! j'ai commencé à faire quelque chose je le posterai demain
0
Utilisateur anonyme
3 mars 2009 à 03:22
Bonsoir,

alors voici une suggestion, maintenant que je l'ai codé...

Postulat, la première colonne sert de clé unique

à adapter dans le code, les noms de fichiers :
Set BookXL1 = Workbooks("Source.xls")
Set BookXL2 = Workbooks("Compare.xls")


Option Explicit
'

Sub CompareClasseurs()

    Dim BookXL1 As Workbook, BookXL2 As Workbook
    Dim rngOrg As Range, rngCible As Range
    Dim lngLimite As Long, lngBoucle As Long
    Dim lngLimCol As Long, lngBclCol As Long
    Dim lngIndiceRejets As Long
    Dim bolReponse As Boolean, varValeur As Variant
    
    ' Désactivation de l'affichage
    Application.ScreenUpdating = False
    
    ' Initialisation de pointeurs sur chaque fichier
    Set BookXL1 = Workbooks("Source.xls")
    Set BookXL2 = Workbooks("Compare.xls")
    
    ' Indicateur de rejets
    lngIndiceRejets = 0
    
    ' Nombre de lignes non vides, débutant en A1, jusqu'a A65536
    lngLimite = BookXL1.Sheets("Feuil1").Range("A1:A65536").End(xlDown).Row
    ' Boucle FOR de 1 à ... puisque la méthode .Range("AX")
    For lngBoucle = 1 To lngLimite
        ' Initialise un pointeur sur la cellule source
        Set rngOrg = BookXL1.Sheets("Feuil1").Range("A" & lngBoucle)
        ' Lire sa valeur
        varValeur = rngOrg.Value
        ' Trouver la cellule correspondante dans l'autre classeur
        bolReponse = TrouveLigne(BookXL2, varValeur, rngCible)
        If (bolReponse) Then    ' Est identique à If (bolReponse = True) Then
            ' Initialise compteur de colonnes
            lngBclCol = 0
            ' Tant Que Cellule De_Colonnes_Contigus Est Non-Vide, déplace à droite
            ' Ici, si la largeur est plutôt fixe, un FOR x = 1 TO y serait mieux
            While rngOrg.Offset(0, lngBclCol) <> ""
                ' Si valeur cible <> valeur source
                If rngCible.Offset(0, lngBclCol).Value <> rngOrg.Offset(0, lngBclCol).Value Then
                    ' Modifie couleur de la cible
                    rngCible.Offset(0, lngBclCol).Interior.ColorIndex = 4
                End If
                ' Incrémente compteur/pointeur de colonnes
                lngBclCol = (lngBclCol + 1)
            Wend
        Else
            ' Incrémente indicateur de rejets
            lngIndiceRejets = (lngIndiceRejets + 1)
        End If
        
    Next
    
    BookXL2.Activate
    Sheets("Feuil1").Select
    Range("A1").Select
    
    BookXL1.Activate
    Sheets("Feuil1").Select
    Range("A1").Select
    
    Set rngCible = Nothing
    Set rngOrg = Nothing
    Set BookXL1 = Nothing
    Set BookXL2 = Nothing
    
    
    Application.ScreenUpdating = True
    
End Sub
'

Function TrouveLigne(ByVal ThisBook As Workbook, _
                     ByVal LaValeur As Variant, _
                     ByRef rraLaCible As Range) As Boolean

    On Error GoTo Err_Trouveligne

    ThisBook.Activate
    Sheets("Feuil1").Select
    Cells.Find(What:=LaValeur, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
    Set rraLaCible = ActiveCell
    TrouveLigne = True
    
Exit_TrouveLigne:
    Exit Function
    
Err_Trouveligne:
    TrouveLigne = False

End Function
'

Testé sous XLXP

Lupin
0