Public Sub Macro1()
Dim O1 As Object 'déclare la variable O1 (Onglet 1)
Dim O2 As Object 'déclare la variable O2 (Onglet 2)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'déclare la variable PA (Première Adresse)
Dim EC As Integer 'déclare la variable EC (ECart)
Dim test As Boolean 'déclare la variable test
Set O1 = Sheets("Feuil1") 'définit l'onglet O1
Set O2 = Sheets("Feuil2") 'définit l'onglet O2
DL = O1.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O1
Set PL = O1.Range("A2:A" & DL) 'définit la plage PL
For Each CEL In PL 'boucle sur toutes les cellule CEL de la plage PL
test = False 'initialise la variable test
'définit la recherche R (recherche la valeur de la cellule CEL dans la colonne 1 (=A) de l'onglet O2)
Set R = O2.Columns(1).Find(CEL.Value, , xlValues, xlWhole)
If Not R Is Nothing Then 'condition 1 : si il existe au moins une occurrence trouvée
PA = R.Address 'définit l'adresse PA de la première occurrence trouvée
Do 'exécute
If R.Offset(0, 1).Value = CEL.Offset(0, 1).Value Then 'condition 2 : si les cellules correspondantes en colonne B sont égales
EC = CInt(R.Offset(0, 2).Value) + CInt(CEL.Offset(0, 2).Value) 'définit l'écart EC
test = True 'définit la variable test
Exit Do 'sort de la boucle Do... Loop
End If 'fin de la condition 2
Set R = O2.Columns(1).FindNext(R) 'redéfinit la recherche R (occurrence suivante)
Loop While Not R Is Nothing And R.Address <> PA 'boucle tant qu'il existe des occurrences ailleurs qu'en PA
End If 'fin de la condition 1
If test = False Then 'si test est "faux" (cela signifie qu'aucune occurence n'est trouvée avec type et numéro communs)
'message
MsgBox "Il n'y a aucune occurrence de type : " & CEL.Value & " et de numéro : " & CEL.Offset(0, 1).Value & " dans l'onglet : Feuil2 !"
GoTo question 'va à l'étiquette "question"
Else 'sinon (si test est "vrai")
If EC < -20 Then 'condition 3 : si l'écart est inférieur à -20
MsgBox "Erreur pour le type : " & CEL.Value & ", numéro : " & CEL.Offset(0, 1).Value _
& ", car il y a un écart de : " & EC & " !" 'message
GoTo question 'va à l'étiquette "question"
End If 'fin de la condition 3
End If 'fin de la condition 2
GoTo inte 'va à l'étiquette "inte"
question:
'condition 4 : si "non" au message
If MsgBox("Etes-vous certain de vouloir intégrer?", vbYesNo, "Demande de confirmation") = vbNo Then
'code pour "non" à l'intégration
MsgBox "Je n'intègre pas !" 'à effacer...
Else 'sinon (si "oui" au message)
inte:
'code pour "oui" à l'intégration
MsgBox "J'intègre !" 'à effacer...
End If 'fin de la condition 4
Next CEL 'prochaine cellule de la boucle
End Sub