Re,
Premièrement, j'ai retiré les ligne de codes application.enableevents car ça pose problème en cas de plantage
Dans le code que j'ai créé, j'ai remarqué que la recherche de la ligne posait problème (je recherchait une addresse de cellule au lieu de rechercher du texte (dans la procédure find)
J'ai donc déclaré une nouvelle variable "txt" afin de retrouver le numéro de l'ID (comme il y avait des trous, c'était plus compliqué)
Comme c'étatit une chaine de texte qui était recherché tout est rentré dans l'ordre.
Ci dessous le détails de la procédure:
Private Sub Worksheet_Change(ByVal Target As Range)
'déclenchement de la procédure lorsque la plage change
If Not Intersect(Target, Range("C:C")) Is Nothing Then 'ici, je précise la plage mais on peut mettre la feuille entière
'déclaration des différentes variables
Dim lig As Range
Dim cel As Range
Dim txt As String
Dim col As Range
'ici, c'est à cause du formulaire --> si le nombre de cellules modifiées en même temps est supérieur à 1 alors ...
If Target.Count > 1 Then
Exit Sub 'sortir de la procédure
Else 'sinon
Set cel = Target.Offset(0, -2)
txt = Range("a" & Target.Row) 'txt prend la valeur de l'ID (colonne A, ligne de la cellule modifiée)
If txt = "" Then 'si txt est vide alors -->c'est qu'il y a des trous
txt = Range("a" & Target.Row).End(xlUp) 'on remonte jusqu'a la première cellule non vide de la colonne A (au dessus de la ligne de la cellule modifiée)
End If
Set col = Sheets("Hoja1").Cells.Find(Target.Offset(0, -1).Value) 'dans la feuille "Hoja1", on recherche la colonne qui correspond à l'ID de la cellule modifiée
Set lig = Sheets("Hoja1").Range("B:B").Cells.Find(txt) 'dans la feuille "Hoja1", on recherche la lignequi correspond au numéro de l'ID de la cellule modifiée
Sheets("Hoja1").Cells(lig.Row, col.Column).Value = Target.Value 'on remplace la valeur à l'intersection de la ligne et de la colonne
End If
End If
End Sub
Si mes explications ne sont pas claires, n'hésite pas à me redemander
Cordialement