Re-,
Effectivement, en faisant une boucle, c'était un peu long.....
J'ai adopté une autre méthode
Je passe le calcul en manuel et le raffraichissement de l'écran à Faux (gain de temps)
tout d'abord, j'insère un nom de plage (base), qui englobe toutes les données de la colonne H de la feuille 2007
J'insère une colonne dans la feuille2008 (au cas où)
J'insère dans cette colonne la formule : =NB.SI(base;A2), ceci me permet de savoir si la donnée de 2008 se retrouve dans 2007
Je force le calcul sur la colonne D
Je fais un filtre sur la valeur "0" (donc, les données non présentes dans la feuille 2007)
Je copie les cellules visibles
Je colle ces cellules (format spécial, uniquement les valeurs) dans la première cellule vide de la colonne H
J'enlève le filtre sur 2008
je supprime la colonne D
Et voili...
dans le code de la feuille, tu mets ceci :
Private Sub CommandButton4_Click()
Call copier_différences
End Sub
puis dans un module standard (insertion/Module), tu colles ce code :
Sub copier_différences()
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
Dim pl As Range
Set pl = Range("H3:H" & Range("H65536").End(xlUp).Row)
pl.Name = "base"
With Sheets("ABG2008")
.Columns("D:D").Insert Shift:=xlToRight
.Range("D2").FormulaR1C1 = "=COUNTIF(base,RC[-3])"
.Range("D2").AutoFill Destination:=.Range("D2:D" & .[A65000].End(xlUp).Row)
.Range("D2:D" & .[A65000].End(xlUp).Row).Calculate
.Range("D1").AutoFilter Field:=4, Criteria1:="0"
.Range("A2:B" & .[A65000].End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy
[H65000].End(xlUp)(2).Select
Selection.PasteSpecial Paste:=xlPasteValues
End With
Sheets("ABG2008").Select
[A1].AutoFilter
Columns("D").Delete
Sheets("abg2007").Select
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
J'espère que cela ira.....