• Initiateur de la discussion Initiateur de la discussion maval
  • Date de début Date de début

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 !

maval

XLDnaute Barbatruc
Bonjour,

J'ai un code pour calculer deux cellules qui fonctionne très bien et j'aimerai lui apporter une modification c'est à dire:
je met en "G3 la somme de 1000 j'ai automatiquement en "G4" la somme de 944. Pour avoir toujours la somme des deux cellules à 1944.
J'aimerai pouvoir calculer les colonnes "G,H, I et J" de la même manière.

Code:
        Private Sub Worksheet_Change(ByVal Target As Range)
    
  With Target
    If .Count > 1 Or .Column <> 7 Or .Row < 3 Then Exit Sub
 
    Application.EnableEvents = False
        If .Row Mod 2 <> 0 Then .Offset(1).Value = 1944 - .Value
    Application.EnableEvents = True
End With
 
    If Intersect(Target, [G3:G4]) Is Nothing Or Target.Count > 1 Then Exit Sub
    
    'si la cellule modifié n'est ni D3, ni D4, sortir
    Application.EnableEvents = False
    'Bloquer la gestion des évènement
    If Target.Address(0, 0) = "G3" Then
    'si la cellule a pour adresse D3
       [G4] = 1944 - [G3]
        'G4 = 1944-G3
    
    Else
    'sinon
       [G3] = 1944 - [G4]
        'G3 = 1944-G4
       
    End If
    Application.EnableEvents = True
    'remise en route gestion des évènements
    End Sub

D'avance merci à qui pourra m'aider.

Cordialement
Maval
 
Re : Modifier d'un code

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
   If .Count > 1 Or .Column < 7 Or .Column > 10 Or .Row < 3 Then Exit Sub
   Application.EnableEvents = False
   .Offset((.Row Mod 2) * 2 - 1).Value = 1944 - .Value
   Application.EnableEvents = True
   End With
End Sub
Testé cette fois sur votre classeur.
À +
 
Re : Modifier d'un code

Bonjour maval, Bernard,

La question manque de précision : que doit-il se passer quand on efface ?

Donc en anticipant essayez ceci :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, Range("G3:J" & Rows.Count), Me.UsedRange)
If r Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each r In r 'en cas d'entrées/effacements multiples
  If r.Row Mod 2 Then
    r(2) = IIf(r = "", "", 1944 - r.Value)
  Else
    r = IIf(r(0) = "", "", 1944 - r(0))
  End If
Next
Application.EnableEvents = True
End Sub
A+
 
Re : Modifier d'un code

Re,

Ceci est mieux car la macro beugait si l'on entrait autre chose qu'un nombre :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, v As Variant
Set r = Intersect(Target, Range("G3:J" & Rows.Count), Me.UsedRange)
If r Is Nothing Then Exit Sub
For Each r In r 'en cas d'entrées/effacements multiples
  If r.Row Mod 2 Then
    r(2) = IIf(r = "", "", 1944 - Val(r))
  Else
    v = IIf(r(0) = "", "", 1944 - Val(r(0)))
    If r <> v Then r = v
  End If
Next
End Sub
Et l'on évite aussi les Application.EnableEvents.

A+
 
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
9
Affichages
506
Réponses
5
Affichages
906
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Retour