Re,
Sur ta feuille VMT.VMAS tu as des données plus loin que la ligne 252 – ce que je ne pouvais pas deviner – et la déclaration de variable BYTE est trop limitée. Il faut donc déclarer tes variales i et j en INTERGER.
Ensuite, contrairement à ton modèle, la première ligne à traiter est sur la ligne 8 et non pas sur la ligne 2. Il faut donc modifier la boucle For/Next en conséquence.
Voici le code corrigé :
Option Explicit ' On oblige la déclaration des variables
Private Sub CommandButton21_Click()
Dim i As Integer, j As Integer ' On déclare les variables afin de gagner en rapidité
For i = 8 To Range("A" & Rows.Count).End(xlUp).Row ' Boucle qui va de 8 à la dernière ligne remplie.
On Error Resume Next ' Si un numéro de matricule de la feuille VMT.VMAS n'est pas trouvé sur la feuille VMTmens, il ne faut pas que ça bloque
j = Application.WorksheetFunction.Match(Range("A" & i), Worksheets("VMTmens").Range("A:A"), 0) ' On recherche l'une après l'autre la position des numéros de matricule de la feuille VMT.VMAS sur la feuille VMTmens et on l'affecte à la variable j.
If j > 0 Then ' Si aucune correspondance n'a été trouvée sur la feuille VMTmens, j garde sa valeur 0. Donc on continune seulement si un devis correspondant a été trouvé
Range("H" & i) = Worksheets("VMTmens").Range("L" & j) ' On affecte à la cellule de la colonne H de la feuille VMT.VMAS la valeur de la cellule de la colonne L de la ligne sur laquelle a été trouvé le numéro de matricule de la feuille VMTmens.
' Donc si j = 0 ça ne passe pas par cette ligne entre If et End if et la cellule de la colonne H de la feuille VMT.VMAS n'est pas modifiée.
End If
j = 0 ' Remise à zéro de la valeur de la variable j
Next i
End Sub
Cordialement