Macro qui compare 2 fichiers excel

  • Initiateur de la discussion icecream33
  • Date de début
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
 

porcinet82

XLDnaute Barbatruc
Re : Macro qui compare 2 fichiers excel

Salut icecream33,

Je t'avouerai que je n'ai pas regardé ton code en entier, mais il suffit de rajouter une boucle sur les feuilles.
Cependant, une nouvelle question se pose, est ce que la 1ere feuille de ton 1er classeur doit etre compérée avec toutes les autres feuilles, et ainsi de suite, ou alors est-ce que la 1ere feuille de ton 1er classeur doit seulement etre compérée avec la 1ère feuille de ton classeur?

Tiens nous au courant,

@+
 
I

icecream33

Guest
Re : Macro qui compare 2 fichiers excel

salut porcinet,

Pour répondre a ta question il faut juste comparer les feuilles avec leurs jumelles de l'autre classeurs donc chaque feuille n'est comparée qu'une seule fois
 

porcinet82

XLDnaute Barbatruc
Re : Macro qui compare 2 fichiers excel

re,

Et bien il faut rajouter une boucle dans le classeur 1 du genre
PHP:
With Workbook("nom de ton classeur 1")
  For i=1 to .Sheets.Count
    .Sheets(i).Select
   
  Next i

Le soucis c'est que j'ai carrément la flemme de regarder ton code, il est vraiment trop long.
Donc soit tu nous donnes une version épuré, soit tu trouves avec ce que je t'ai donné.
A moins qu'un âme charitable passe dans le coin et regarde tout en détail...

@+
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia