Sub MiseAjour()
Dim temps, fs As Worksheet, fm As Worksheet, tS, tM, d As Object, i&, N&, j&
temps = Timer
Application.ScreenUpdating = False
Set fs = Sheets("Source") ' Feuille de la source
fs.Range("n15").ClearContents ' RàZ du compteur d'actualisation
fs.Columns(1).Interior.ColorIndex = xlColorIndexNone: fs.Range("a1").Interior.Color = vbYellow ' mise en couleur
tS = fs.Range("A1").CurrentRegion.Columns(1) ' tableau source
Set fm = Sheets("MAJ Valeurs") ' Feuille des mises à jour
fm.Columns(1).Interior.ColorIndex = xlColorIndexNone: fm.Range("a1").Interior.Color = vbYellow ' mise en couleur
tM = fm.Range("A1").CurrentRegion.Columns(1) ' tableau des mises à jour
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare ' la casse est ignorée
For i = 2 To UBound(tS)
d(tS(i, 1)) = i ' mémorise la ligne
Next
For i = 2 To UBound(tM)
If d.exists(tM(i, 1)) Then
N = N + 1
j = d(tM(i, 1))
fs.Cells(j, 1).Interior.Color = vbRed
fm.Cells(i, 1).Interior.Color = vbRed
fs.Cells(j, 2) = fm.Cells(i, 2)
fs.Cells(j, 5) = fm.Cells(i, 3)
fs.Cells(j, 9) = fm.Cells(i, 4)
End If
Next
fs.Range("n15") = N ' on inscrit le nombre d'actualisations faites
MsgBox Timer - temps
MsgBox "Mise à jour terminée", vbInformation ' information de l'utilisateur
End Sub