Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Range("d5"), Target) Is Nothing Then Range("e5").ClearContents: Application.EnableEvents = True: Exit Sub
If Not Intersect(Range("e5"), Target) Is Nothing Then
Application.EnableEvents = False
Cells(Application.Match(Range("d5").Value, Range("h:h"), 0), "i") = Range("e5")
Range("d5:e5").ClearContents
Application.EnableEvents = True
End If
Application.EnableEvents = True
End Sub
de @xamenod
S'il y a une valeur dans une cellule de la colonne I, j'ai besoin de l'additionner avec la nouvelle valeur en e5.
Bonsoir ma pomme,
Merci pour ta réponse. Cela fonctionne.
S'il y a une valeur dans une cellule de la colonne I, j'ai besoin de l'additionner avec la nouvelle valeur en e5.
Merci pour ton aide.
J'ai trouvé comment additionner la nouvelle valeur avec celle déjà en I.Bonsoir @xamenod,
Un essai dans le fichier joint via macro dans le module associé à la feuille.
VB:Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Not Intersect(Range("d5"), Target) Is Nothing Then Range("e5").ClearContents: Application.EnableEvents = True: Exit Sub If Not Intersect(Range("e5"), Target) Is Nothing Then Application.EnableEvents = False Cells(Application.Match(Range("d5").Value, Range("h:h"), 0), "i") = Range("e5") Range("d5:e5").ClearContents Application.EnableEvents = True End If Application.EnableEvents = True End Sub
Bonsoir Ma pomme.Bonsoir @xamenod,
Un essai dans le fichier joint via macro dans le module associé à la feuille.
VB:Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Not Intersect(Range("d5"), Target) Is Nothing Then Range("e5").ClearContents: Application.EnableEvents = True: Exit Sub If Not Intersect(Range("e5"), Target) Is Nothing Then Application.EnableEvents = False Cells(Application.Match(Range("d5").Value, Range("h:h"), 0), "i") = Range("e5") Range("d5:e5").ClearContents Application.EnableEvents = True End If Application.EnableEvents = True End Sub
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .CountLarge > 1 Then Exit Sub
If .Address = "$D$5" Then .Offset(, 1).ClearContents: Exit Sub
If .Address <> "$E$5" Then Exit Sub
Dim chn$: chn = .Offset(, -1)
If IsEmpty(.Value) Or chn = "" Then Exit Sub
If Not IsNumeric(.Value) Then Exit Sub
Dim cel As Range, dlg&, lig%
dlg = Cells(Rows.Count, 8).End(3).Row: If dlg < 5 Then Exit Sub
Set cel = Range("H5:H" & dlg).Find(chn, , -4163, 1, 1)
If cel Is Nothing Then Exit Sub
lig = cel.Row: Cells(lig, 9) = Cells(lig, 9) + .Value
End With
End Sub
Bonjour Soan, merci beaucoup pour ton code, il fonctionne parfaitement.Bonjour @xamenod, mapomme, le fil,
bon week-end, et désolé pour le retard de ma réponse, Henry.
en D5 : « A » ; met des nombres en E5 ; ils seront additionnés en i5 ;
si tu veux annuler un nombre qui a déjà été additionné, saisis-le en
négatif, par exemple -5 ; il sera alors retranché de la somme, car
total + (-5) = total - 5.
si tu changes D5, alors E5 est effacé ; puis les nombres que tu saisis
en E5 sont additionnés dans la bonne case de la colonne i, selon D5.
si tu mets d'autres cases sous H8:i8, elles seront prises en compte.
si tu saisis une valeur non numérique en E5, elle sera ignorée ;
si tu effaces D5 ou E5, il n'y aura aucun effet en colonne i.
SI tes données en colonne H sont toujours les mêmes que celles de
ta colonne R, dans le même ordre, alors tu peux construire ta liste
de D5 avec tes données de la colonne H ; utilise une plage nommée
pour prendre en compte l'extension de la liste, si ajouts ultérieurs ;
plage actuelle : H5:i8 ; supprime la colonne R devenue inutile.
code VBA du module de Feuil1 :
VB:Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) With Target If .CountLarge > 1 Then Exit Sub If .Address = "$D$5" Then .Offset(, 1).ClearContents: Exit Sub If .Address <> "$E$5" Then Exit Sub Dim chn$: chn = .Offset(, -1) If IsEmpty(.Value) Or chn = "" Then Exit Sub If Not IsNumeric(.Value) Then Exit Sub Dim cel As Range, dlg&, lig% dlg = Cells(Rows.Count, 8).End(3).Row: If dlg < 5 Then Exit Sub Set cel = Range("H5:H" & dlg).Find(chn, , -4163, 1, 1) If cel Is Nothing Then Exit Sub lig = cel.Row: Cells(lig, 9) = Cells(lig, 9) + .Value End With End Sub
si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis.
soan