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
Partager