Récupérer les dimensions d'un Array
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:
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 |