1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo erreur
' en cas d'erreure on va a la gestion d'erreur
Dim Cel As Range
If Not Intersect(Target, Range("A4:F7")) Is Nothing Then
'on vérifie que l'intersection entre la zone modifié et le tableau n'est pas nul, donc que tu as bien modifié le tableau
Application.EnableEvents = False
'on désactive les évènement pour que la macro ne s'apelle pas en boucle puisquelle va modifier le tableau et donc appeler la macro qui s'exécute en cas de modification du tableau, ca tourne en boucle et fait perdre du temps
'on évite les boucles du aux changements
If Target.Cells.Count > 1 Then Exit Sub
'si il y a plus d'une cellule modifiée, on sort
If Target.Column = Target.CurrentRegion.End(xlToRight).Column Then Exit Sub
'si la cellule modifiée est la dernière de la colonne, on sort
'target.colum=numéro de la colonne modifié
'Target.CurrentRegion.End(xlToRight).Column=dernière collone de la région
For Each Cel In Range(Target.Offset(0, 1), Cells(Target.Row, 256).End(xlToLeft))
' Cells(Target.Row, 256).End(xlToLeft) signifie la dernière cellule vers la droite de la ligne modifié
'ce qui donne pour chaque cellule de la cellule a droite de celle modifé a la dernière de la ligne
If Left(Cel.Formula, 1) <> "=" Then _
Cel.FormulaR1C1 = "=RC[-1]"
Next Cel
End If
erreur:
Application.EnableEvents = True
'on remet les évènement
If Err <> 0 Then MsgBox Err.Description, , "Erreur Excel n°" & Err.Number
On Error GoTo 0
End Sub |
Partager