Explication sur macro ?

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Laosurlamontagne

XLDnaute Occasionnel
Bonjour,

En furetant à droite à gauche, j'ai trouvé une macro qui semble correspondre à ce que je recherche mais je n'arrive pas à la comprendre afin de l'adapter à mes besoins. Pourriez-vous me l'expliquer pas-à-pas ? (je ne connais rien du tout en vba):

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
col2 = 0
If Target.Count > 1 Then Exit Sub
If Target.Value <> "" Then
  If Target.Column = 2 Then col2 = 4
  If Target.Column = 4 Then col2 = 2
  If col2 = 0 Then Exit Sub
  If col2 = 2 And Cells(Target.Row, 2) <> "" Then Cells(Target.Row, 3).Formula = "=" & Target.Address(0, 0) & "-" & Cells(Target.Row, 2).Address(0, 0)
  If col2 = 4 And Cells(Target.Row, 4) <> "" Then Cells(Target.Row, 3).Formula = "=" & Cells(Target.Row, 4).Address(0, 0) & "-" & Target.Address(0, 0)

End If
End Sub

La conséquence de ce code est l'écriture d'une formule colonne C si la colonne B et D de la même ligne sont remplies... Et c'est exactement ce que je veux faire (mais avec une formule différente).

Merci pour votre aide.
 
Re : Explication sur macro ?

Bonsoir 🙂,
La traduction du code :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
col2 = 0
' Mauvais, variable non déclarée, on peut espérer qu'elle soit déclarée en Byte ou en Integer
' à l'ajout de 0 dans sa valeur ...
If Target.Count > 1 Then Exit Sub
' Si plus d'une cellule modifiée, on quitte la Sub...
If Target.Value <> "" Then
' Si la cellule modifiée n'est pas vide
  If Target.Column = 2 Then col2 = 4
  ' Si la modification est en colonne 2, col2 vaut 4
  If Target.Column = 4 Then col2 = 2
  ' Si la modification est en colonne 4, col2 vaut 2
  If col2 = 0 Then Exit Sub
  ' Finalement, mais on aurait pu le prévoir dès le début, si col2 ne vaut pas 2 ou 4, on sort...
  If col2 = 2 And Cells(Target.Row, 2) <> "" Then Cells(Target.Row, 3).Formula = "=" & Target.Address(0, 0) & "-" & Cells(Target.Row, 2).Address(0, 0)
  ' Si on est en colonne 2 et si la valeur de la cellule de la même ligne, colonne 2, n'est pas vide
  ' la formule de la cellule de la même ligne colonne 3 est égal à
  ' "=" et l'adresse de Target et signe moins et adresse de target décalées de 2 colonnes
  If col2 = 4 And Cells(Target.Row, 4) <> "" Then Cells(Target.Row, 3).Formula = "=" & Cells(Target.Row, 4).Address(0, 0) & "-" & Target.Address(0, 0)
  ' Bref, l'inverse
End If
' Fin du test
End Sub
mais ça me parait un peu alambiqué 🙄...
Personnellement, j'aurais écrit
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Count > 1 Or .Value = "" Then Exit Sub
If .Column = 2 Then
.Offset(0, 1).Formula = "=" & .Offset(0, 2).Address & "-" & .Address
ElseIf .Column = 4 Then
.Offset(0, -1).Formula = "=" & .Address & "-" & .Offset(0, -2).Address
End If
End With
End Sub
qui devrait rendre le même service si je ne me suis pas trompé 😛...
Bonne suite 😎
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
712
Réponses
4
Affichages
442
Réponses
4
Affichages
581
Retour