Sub Complement(x As Single, y As Single) 'la procédure utilise deux arguments x et y de type single
Dim derlig As Integer, i As Integer, j As Integer 'déclare les variables derlig, i et j de type entier
Dim nbreste As Integer, S As String 'déclare la variable nbreste comme entier et S comme texte
S = "" 'initialise la variable S (cette ligne n'est pas nécessaire car S par défaut est vide)
With Sheets(Data0) 'prend en compte l'onglet Data0 <==== ici il y a peut-être un problème voir explication plus bas
derlig = .Range("A" & Rows.Count).End(xlUp).Row 'définit la dernière ligne éditée derlig de la colonne A de l'onglet Data0
For i = 3 To derlig 'boucle sur toutes les lignes i de 3 à derlign
'condition 1 : si la cellule ligne i, colonne E est inférieure ou égale à y (argument de la procédure)
If .Cells(i, "E").Value <= y Then
If .Cells(i, "C").Value <= x Then 'condition 2 : si la cellule ligne i, colonne C est inférieure ou égale à x (argument de la procédure)
'définit le nbreste (reste, convertis en entier, de la division de x par la valeur de la cellule ligne i colonne C)
nbreste = Int(x / .Cells(i, "C").Value)
'définit le texte S en utilsant S, le nbreste et la valeur des cellules ligne i, colonnes C et E
'une ligne est rajoutée (vbcrLf = saut de ligne) chaque fois que dans la boucle les deux conditions sont vérifiées
S = S & "ou " & nbreste & " palette(s) de " & .Cells(i, "C").Value & " x " & .Cells(i, "E").Value & vbCrLf
End If 'fin de la condition 2
End If 'fin de la condition 1
Next i 'prochaine ligne de la boucle
End With 'fin de la prise en compte de l'onglet Data0
'si le Texte S n'est pas vide S devient "Camion plein" sinon S devient "Complément impossible" plus deux retours de chariot plus S (le texte de la boucle)
If S = "" Then S = "Camion Plein" Else S = "Complément possible : " & vbCrLf & vbCrLf & S
MsgBox S, , "Complément" 'affiche le texte S dans un message
End Sub
'explication : Tel qu'écrit, cela implique que Data0 est une variable mais on ne la voit déclarée nulle part.
'Soit elle est déclarée ailleurs dans une partie du code que tu n'as pas fourni, soit, si c'est un onglet existant il faut écrire Sheets("Data0")...