Bonjour le forum,
Pour que le code précédent fonctionne convenablement, il faut ajouter cette ligne en début :
test_dif = True
Le code complet :
Sub Test_Tableau1()
Dim test_dif As Boolean, arg1 As String, arg2 As String
'test de différence TRUE par défaut
'Pour la première fois
test_dif = True
arg1 = Range("SBrgd").Worksheet.Name & "!" & Range("SBrgd").Address
arg2 = Range("SBrgd_Capture").Worksheet.Name & "!" & Range("SBrgd_Capture").Address
MsgBox "arg1 : " & arg1 & vbCrLf & _
"arg2 : " & arg2
If (test_dif = Evaluate("=And(" & arg1 & "=" & arg2 & ")")) Then
'test_dif = True
'statements
MsgBox "Plages identiques, pas de changement !" & vbCrLf & _
"Utilisation du modèle existant"
Else
'test_dif = False
'statements
MsgBox "La plage SBrgd a été modifiée" & vbCrLf & _
"Création d'un nouveau modèle"
'Faire une copie du tableau pour la prochaine comparaison
With Sheets("Feuil2")
.Range("M8").Resize(Range("Sbrgd").Rows.Count, 3).Value = Range("SBrgd").Value
End With
End If
End Sub
J'ai creusé du coté des formules, et j'ai pu coder cette deuxième solution, qui repose sur une formule matricielle :
Sub Test_Tableau2()
Range("F2").FormulaArray = "=(SBrgd=SBrgd_Capture)"
If [F2] = "Vrai" Then
MsgBox "Plages identiques, pas de changement !" & vbCrLf & _
"Utilisation du modèle existant"
Else
MsgBox "La plage SBrgd a été modifiée" & vbCrLf & _
"Création d'un nouveau modèle"
'Faire une copie du tableau pour la prochaine comparaison
With Sheets("Feuil2")
.Range("M8").Resize(Range("Sbrgd").Rows.Count, 3).Value = Range("SBrgd").Value
End With
End If
End Sub
L'exemple avec les deux solutions en pièce jointe.
Merci.