I
icecream33
Guest
Salut à tous!
Voilà j'ai récupéré un code qui permet de comparer 2 classeurs excel sur ce forum seulement voila j'aimerais que la macro compare toutes les feuilles (chaques onglets en fait) colorie les cellules qui different et reporte les cellules qui sont diffrentes dans un nouveau classeur.Alors ça la macro que j'ai récupéré le fait bien mais le fait juste pour la premiere feuille! et retourne le resultat dans un nouveau classeur:
Dim dernierecolonne As Integer
Dim plage01 As Range
Public nomfeuille(50)
Public tableau_recap(50, 10000)
Public reference_cellules_01(50, 10000, 1)
Public reference_cellules_02(50, 10000, 1)
Public nbdecellules As Integer
Public nbsheet1 As Integer
Public nbsheet2 As Integer
Public nb_cel_modifiees As Integer
Public reference_fichier As String
Public refcel As Integer
Public feuille_fichier_1 As Integer
Sub lance()
commence
'fic_ouv_un
nbfeuilles
verif_noms_feuilles
imprime_rapport
End Sub
Sub nb_colonnes()
nbdecellules = 0
Range("a1").Select
dernierecolonne = 0
Range("a65536").End(xlUp).Select
derniereligne = ActiveCell.Row
Range("a1").Select
For i = 0 To derniereligne - 1
ActiveCell.Offset(i, 0).Select
dernierecellule = ActiveCell.Address
celluleadroite = "iv" & i + 1
Range(celluleadroite).End(xlToLeft).Select
If ActiveCell.Column > dernierecolonne Then
dernierecolonne = ActiveCell.Column
cellulereference = ActiveCell.Address
Range("a1").Select
End If
Range("a1").Select
Next i
ActiveCell.Offset(derniereligne - 1, dernierecolonne - 1).Select
pointbasplage = ActiveCell.Address
Set plage01 = Range("a1", pointbasplage)
Range("a1", pointbasplage).Name = "plage" & ActiveSheet.Name & reference_fichier
nbdecellules = plage01.Cells.Count
End Sub
Sub nbfeuilles()
'Workbooks.Open Filename:=fichier_un
Application.ScreenUpdating = False
Windows(nom_fichier_un).Activate
reference_fichier = "_01"
For Each sheet In Worksheets
sheet.Select
'nomfeuille(nbsheet) = ActiveSheet.Name
tableau_recap(nbsheet1, 0) = ActiveSheet.Name
'tableau_recap(nbsheet1, 0) = "plage" & ActiveSheet.Name & reference_fichier
nb_colonnes
recuperation_des_donnees
nbsheet1 = nbsheet1 + 1
Next sheet
End Sub
Sub recuperation_des_donnees()
'ReDim tableau_recap(nbsheet1, nbdecellules)
Range("a1").Select
For a = 1 To nbdecellules
tableau_recap(nbsheet1, a) = plage01.Cells(a).Value
Next a
End Sub
Sub verif_noms_feuilles()
On Error Resume Next
'Workbooks.Open Filename:=fichier_deux
Windows(nom_fichier_deux).Activate
Sheets("Feuil1").Select
reference_fichier = "_02"
For Each sheet In Worksheets
sheet.Select
nomfeuille(nbsheet2) = ActiveSheet.Name
For x = x To nbsheet1
sortie = 0
For nbsheet2 = nbsheet2 To nbsheet1
If nomfeuille(nbsheet2) = tableau_recap(x, 0) Then
'''''''''''''''''''''''''nbsheet1 = x
feuille_fichier_1 = x
sortie = 1
Exit For
End If
If nbsheet2 = nbsheet1 Then
MsgBox "La feuille " & nomfeuille(nbsheet2) & " est nouvelle" '''' une feuille nouvelle
End If
Next nbsheet2
If sortie = 1 Then
Exit For
End If
Next x
nb_colonnes
verifications_cellules
x = x + 1
feuille_fichier_1 = x '''''''''''feuille_fichier_1 + 1
nbsheet2 = nbsheet2 + 1
Next sheet
End Sub
Sub verifications_cellules()
Range("a1").Select
refcel = 1
'nomdeplage = Range("a1", pointbasplage).Name
For a = 1 To nbdecellules
toto = plage01.Cells(a).Value
titi = plage01.Cells(a).Address
If tableau_recap(feuille_fichier_1, a) <> plage01.Cells(a).Value Then
plage01.Cells(a).Interior.Color = vbYellow
reference_cellules_02(nbsheet2, 0, 0) = ActiveSheet.Name
reference_cellules_02(nbsheet2, refcel, 0) = plage01.Cells(a).Address
reference_cellules_02(nbsheet2, refcel, 1) = plage01.Cells(a).Value
reference_cellules_01(nbsheet2, refcel, 1) = tableau_recap(feuille_fichier_1, a)
refcel = refcel + 1
End If
Next a
nb_cel_modifiees = nb_cel_modifiees + refcel - 1
End Sub
Sub imprime_rapport()
Workbooks.Add
'ActiveSheet.Name = "Rapport du " & Date
Range("a3").Select
'ActiveCell.Offset(0, 0).Value = reference_cellules(nbsheet2, 0)
'For nbcel = 0 To nb_cel_modifiees
'ActiveCell.Offset(t, 0).Value = reference_cellules(nbsheet2, 0)
ActiveCell.Offset(-1, 1).Value = nom_fichier_un
ActiveCell.Offset(-1, 4).Value = nom_fichier_deux
ActiveCell.Offset(-2, 1).Value = "Nom du fichier original"
ActiveCell.Offset(-2, 2).Value = "adresse"
ActiveCell.Offset(-2, 3).Value = "texte"
ActiveCell.Offset(-2, 4).Value = "Nom du fichier modifié"
ActiveCell.Offset(-2, 5).Value = "adresse"
ActiveCell.Offset(-2, 6).Value = "texte"
For x = 0 To 50
If reference_cellules_02(x, 0, 0) = "" Then
Exit For
Else
Columns("A:A").ColumnWidth = 1
Columns("B:B").ColumnWidth = 24
Columns("E:E").ColumnWidth = 24
ActiveCell.Offset(t, 1).Value = reference_cellules_02(x, 0, 0) '''nom feuille
ActiveCell.Offset(t, 4).Value = reference_cellules_02(x, 0, 0) '''nom feuille
End If
For z = 1 To 10000
If reference_cellules_02(x, z, 0) = "" Then
Exit For
Else
ActiveCell.Offset(t, 2 + 3).Value = reference_cellules_02(x, z, 0) '''adresse
ActiveCell.Offset(t, 3 + 3).Value = reference_cellules_02(x, z, 1) '''texte
ActiveCell.Offset(t, 2).Value = reference_cellules_02(x, z, 0) '''adresse
ActiveCell.Offset(t, 3).Value = reference_cellules_01(x, z, 1) '''texte
t = t + 1
End If
Next z
Next x
End Sub
Voilà j'ai récupéré un code qui permet de comparer 2 classeurs excel sur ce forum seulement voila j'aimerais que la macro compare toutes les feuilles (chaques onglets en fait) colorie les cellules qui different et reporte les cellules qui sont diffrentes dans un nouveau classeur.Alors ça la macro que j'ai récupéré le fait bien mais le fait juste pour la premiere feuille! et retourne le resultat dans un nouveau classeur:
Dim dernierecolonne As Integer
Dim plage01 As Range
Public nomfeuille(50)
Public tableau_recap(50, 10000)
Public reference_cellules_01(50, 10000, 1)
Public reference_cellules_02(50, 10000, 1)
Public nbdecellules As Integer
Public nbsheet1 As Integer
Public nbsheet2 As Integer
Public nb_cel_modifiees As Integer
Public reference_fichier As String
Public refcel As Integer
Public feuille_fichier_1 As Integer
Sub lance()
commence
'fic_ouv_un
nbfeuilles
verif_noms_feuilles
imprime_rapport
End Sub
Sub nb_colonnes()
nbdecellules = 0
Range("a1").Select
dernierecolonne = 0
Range("a65536").End(xlUp).Select
derniereligne = ActiveCell.Row
Range("a1").Select
For i = 0 To derniereligne - 1
ActiveCell.Offset(i, 0).Select
dernierecellule = ActiveCell.Address
celluleadroite = "iv" & i + 1
Range(celluleadroite).End(xlToLeft).Select
If ActiveCell.Column > dernierecolonne Then
dernierecolonne = ActiveCell.Column
cellulereference = ActiveCell.Address
Range("a1").Select
End If
Range("a1").Select
Next i
ActiveCell.Offset(derniereligne - 1, dernierecolonne - 1).Select
pointbasplage = ActiveCell.Address
Set plage01 = Range("a1", pointbasplage)
Range("a1", pointbasplage).Name = "plage" & ActiveSheet.Name & reference_fichier
nbdecellules = plage01.Cells.Count
End Sub
Sub nbfeuilles()
'Workbooks.Open Filename:=fichier_un
Application.ScreenUpdating = False
Windows(nom_fichier_un).Activate
reference_fichier = "_01"
For Each sheet In Worksheets
sheet.Select
'nomfeuille(nbsheet) = ActiveSheet.Name
tableau_recap(nbsheet1, 0) = ActiveSheet.Name
'tableau_recap(nbsheet1, 0) = "plage" & ActiveSheet.Name & reference_fichier
nb_colonnes
recuperation_des_donnees
nbsheet1 = nbsheet1 + 1
Next sheet
End Sub
Sub recuperation_des_donnees()
'ReDim tableau_recap(nbsheet1, nbdecellules)
Range("a1").Select
For a = 1 To nbdecellules
tableau_recap(nbsheet1, a) = plage01.Cells(a).Value
Next a
End Sub
Sub verif_noms_feuilles()
On Error Resume Next
'Workbooks.Open Filename:=fichier_deux
Windows(nom_fichier_deux).Activate
Sheets("Feuil1").Select
reference_fichier = "_02"
For Each sheet In Worksheets
sheet.Select
nomfeuille(nbsheet2) = ActiveSheet.Name
For x = x To nbsheet1
sortie = 0
For nbsheet2 = nbsheet2 To nbsheet1
If nomfeuille(nbsheet2) = tableau_recap(x, 0) Then
'''''''''''''''''''''''''nbsheet1 = x
feuille_fichier_1 = x
sortie = 1
Exit For
End If
If nbsheet2 = nbsheet1 Then
MsgBox "La feuille " & nomfeuille(nbsheet2) & " est nouvelle" '''' une feuille nouvelle
End If
Next nbsheet2
If sortie = 1 Then
Exit For
End If
Next x
nb_colonnes
verifications_cellules
x = x + 1
feuille_fichier_1 = x '''''''''''feuille_fichier_1 + 1
nbsheet2 = nbsheet2 + 1
Next sheet
End Sub
Sub verifications_cellules()
Range("a1").Select
refcel = 1
'nomdeplage = Range("a1", pointbasplage).Name
For a = 1 To nbdecellules
toto = plage01.Cells(a).Value
titi = plage01.Cells(a).Address
If tableau_recap(feuille_fichier_1, a) <> plage01.Cells(a).Value Then
plage01.Cells(a).Interior.Color = vbYellow
reference_cellules_02(nbsheet2, 0, 0) = ActiveSheet.Name
reference_cellules_02(nbsheet2, refcel, 0) = plage01.Cells(a).Address
reference_cellules_02(nbsheet2, refcel, 1) = plage01.Cells(a).Value
reference_cellules_01(nbsheet2, refcel, 1) = tableau_recap(feuille_fichier_1, a)
refcel = refcel + 1
End If
Next a
nb_cel_modifiees = nb_cel_modifiees + refcel - 1
End Sub
Sub imprime_rapport()
Workbooks.Add
'ActiveSheet.Name = "Rapport du " & Date
Range("a3").Select
'ActiveCell.Offset(0, 0).Value = reference_cellules(nbsheet2, 0)
'For nbcel = 0 To nb_cel_modifiees
'ActiveCell.Offset(t, 0).Value = reference_cellules(nbsheet2, 0)
ActiveCell.Offset(-1, 1).Value = nom_fichier_un
ActiveCell.Offset(-1, 4).Value = nom_fichier_deux
ActiveCell.Offset(-2, 1).Value = "Nom du fichier original"
ActiveCell.Offset(-2, 2).Value = "adresse"
ActiveCell.Offset(-2, 3).Value = "texte"
ActiveCell.Offset(-2, 4).Value = "Nom du fichier modifié"
ActiveCell.Offset(-2, 5).Value = "adresse"
ActiveCell.Offset(-2, 6).Value = "texte"
For x = 0 To 50
If reference_cellules_02(x, 0, 0) = "" Then
Exit For
Else
Columns("A:A").ColumnWidth = 1
Columns("B:B").ColumnWidth = 24
Columns("E:E").ColumnWidth = 24
ActiveCell.Offset(t, 1).Value = reference_cellules_02(x, 0, 0) '''nom feuille
ActiveCell.Offset(t, 4).Value = reference_cellules_02(x, 0, 0) '''nom feuille
End If
For z = 1 To 10000
If reference_cellules_02(x, z, 0) = "" Then
Exit For
Else
ActiveCell.Offset(t, 2 + 3).Value = reference_cellules_02(x, z, 0) '''adresse
ActiveCell.Offset(t, 3 + 3).Value = reference_cellules_02(x, z, 1) '''texte
ActiveCell.Offset(t, 2).Value = reference_cellules_02(x, z, 0) '''adresse
ActiveCell.Offset(t, 3).Value = reference_cellules_01(x, z, 1) '''texte
t = t + 1
End If
Next z
Next x
End Sub