Bonjour à tous,

cela faisait un moment que je n'avais eu la chance de venir ici mais nécessité faisant loi, me revoici.

Mon nouveau boss me demande de me remettre aux macros Excel mais je n'ai plus vraiment pratiqué depuis quelques années et je suis coincé sur un bug.
J'ai trois fichiers :
  • Un fichier original (test 1.xlsx)
  • un fichier modifié (test 2.xlsx)
  • Un fichier qui doit me permettre de comparer les deux à l'aide d'une macro (compare Test.xlsm)


J'ai récupérer le code ici.
Le code récupère les données sur la première feuille dans un Array et compare cellule par cellule au données de la seconde feuille elles aussi récupérées dans un Array.

Cependant, au moment de récupérer les dimensions de l'Array, j'ai une "erreur d'exécution 13 : incompatibilité de type" sur la ligne qui initie le "For".
Quand j'ajoute un espion sur "varSheetA" j'ai bien les bonnes données et dimensions dedans et je ne comprends pas pourquoi le LBound me génère cette erreur.
J'ai essayé de désactivé "Explicit" pour laisser "iRow" et "iCol" se définir tout seul et j'ai le même soucis.
Est-ce que quelqu'un aurait une idée ?

En ce qui concerne la partie Else du If, je n'ai pas encore pu la tester donc il est possible que ce soit du gros charabia qui plante. ^^


Ci-dessous, le code et ici les fichiers exemple.

En vous remerciant par avance pour votre aide.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
Option Explicit
 
Sub VerifVersion()
 
    Dim varSheetA As Variant
    Dim varSheetB As Variant
    Dim varSheetRes As Variant
    Dim strRangeToCheck As String
    Dim iRow As Long
    Dim iCol As Long
    Dim iRowList As Long
    Dim iColList As Long
    Dim wbkA As Workbook
    Dim wbkB As Workbook
 
 
    iRowList = 1
    iColList = 1
 
    strRangeToCheck = "A1:B30"
    ' If you know the data will only be in a smaller range, reduce the size of the ranges above.
    Debug.Print Now
    Set wbkA = Workbooks.Open(Filename:="C:\DosTest\test 1.xlsx")
    Set varSheetA = wbkA.Worksheets("Feuil1").Range(strRangeToCheck) ' or whatever sheet you need
    Set wbkB = Workbooks.Open(Filename:="C:\DosTest\test 2.xlsx")
    Set varSheetB = wbkB.Worksheets("Feuil1").Range(strRangeToCheck) ' or whatever sheet you need
    Debug.Print Now
 
    For iRow = LBound(varSheetA, 1) To UBound(varSheetA, 1)
        For iCol = LBound(varSheetA, 2) To UBound(varSheetA, 2)
            If varSheetA(iRow, iCol) = varSheetB(iRow, iCol) Then
                ' Cells are identical.
                ' Do nothing.
            Else
                ' Cells are different.
                ' Code goes here for whatever it is you want to do.
                'ThisWorkbook.ThisWorksheet.Range(iColList,iRowList)=(iRow,Icol)
                varSheetRes(iRowList, iColList) = iRow & ";" & iCol
                ThisWorkbook.Worksheets("Feuil1").Range("A1").Select
                varSheetRes.Paste
            End If
        Next iCol
    Next iRow
 
End Sub