Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Addition de la saisie

D

Doum

Guest
Comment dois-je faire pour additionner comme suit:
Ex.: dans A1, j'ai le nombre 31. si j'entre dans cette cellule, le chiffre 9, le calcul sera 31+9 et donc donnera 40 (dans cette même cellule A1)
Merci d'avance de votre réponse!
 
M

michel

Guest
BONSOIR Doum

ma proposotion , un peu tirée par les cheveux , additionne toutes les valeurs numeriques lors d'un double clic dans la cellule

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim i As Byte
Dim Cible As String
Dim Total As Double

Cible = Application.Substitute(Target, ",", ".") 'pour que fonction Val puisse reconnaitre les decimales
Cible = Application.Substitute(Cible, " ", "x") ' pour gerer deux nombres qui se suivent séparés par un espace
For i = 1 To Len(Cible)
If IsNumeric(Mid(Cible, i, 1)) Then
Total = Total + Val(Mid(Cible, i, Len(Cible) - i + 1))
i = i + Len(Str(Val(Mid(Cible, i, Len(Cible) - i + 1)))) - 1
End If
Next

Target = Total
End Sub


bonne soirée
MichelXld
 
R

Robert

Guest
Salut Doum, Michel, le forum,

Voici une aute méthode VBA mais elle nécessite que tu colles un des codes ci-dessous dans la feuille où tu veux que ça fonctionne. le Code 1 ne fonctionne que pour la cellule A1, le Code 2 fonctionne pour toutes les cellules de ta feuille. Clique avec le bouton droit de la souris sur l'onglet de la feuille et choisi l'option Visualiser le code. Tu te retrouves dans Visual Basic Editor. Dans le grand cadre blanc à droite colle un des codes que tu auras copié (Code 1 ou Code 2). Retourne à Excel par [Alt]+[F11].

Tape une première valeur en A1 et valide. Retape une nouvelle valeur, valide, la somme se fait... (sur toutes les cellule si tu as choisi le code 2)

debut code 1 (ligne en dessous)
Option Explicit
Private test As Boolean 'déclare la variable test
Private val As Variant 'déclare la variable val (valeur)

'à chaque changement de sélection de cellule
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
val = Range("A1").Value 'définit la variable val (valeur de la cellule active)
test = False 'réinitialise la variable test (test=Faux)
End Sub

'à chaque modification dans un cellule
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub 'si différent de A1 sort de la procédure
Dim valmod As Variant 'déclare la variable valmod (valeur modifiée)
Dim som As Variant 'déclare la variable som (somme)
If test = True Then Exit Sub 'si test=Vrai sort de la procédure (sinon boucle)
valmod = Target.Value 'définit la variable valmod (nouvelle valeur éditée)
som = val + valmod 'définit la varaible som (=ancienne valeur+nouvelle valeur)
test = True 'test=Vrai pour éviter la boucle
Target.Value = som 'la cellule modifiée prend la valeur de la somme
End Sub
fin code 1 (ligne au dessus)

debut code2 (ligne endessous)
Option Explicit
Private test As Boolean 'déclare la variable test
Private val As Variant 'déclare la variable val (valeur)

'à chaque changement de sélection de cellule
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
val = Target.Value 'définit la variable val (valeur de la cellule active)
test = False 'réinitialise la variable test (test=Faux)
End Sub

'à chaque modification dans un cellule
Private Sub Worksheet_Change(ByVal Target As Range)
Dim valmod As Variant 'déclare la variable valmod (valeur modifiée)
Dim som As Variant 'déclare la variable som (somme)
If test = True Then Exit Sub 'si test=Vrai sort de la procédure (sinon boucle)
valmod = Target.Value 'définit la variable valmod (nouvelle valeur éditée)
som = val + valmod 'définit la varaible som (=ancienne valeur+nouvelle valeur)
test = True 'test=Vrai pour éviter la boucle
Target.Value = som 'la cellule modifiée prend la valeur de la somme
End Sub
fin code 2 (ligne au dessus)

À plus,

Robert
 
L

Lord Nelson

Guest
Salut Doum et Michel,

Voici une autre suggestion, tout en gardant une saisie normale dans la cellule A1 :

Dim CL, OK As Boolean

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
CL = Target.Value
OK = True
Else
OK = False
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If OK = True Then
If Target.Address = "$A$1" Then
OK = False
Target.Value = Target.Value + CL
CL = Target
OK = True
End If
End If
End Sub

La variable OK permet d'éviter la cascade d'évènement lors de la mise à jour de la cellule.
CL permet de retenir l'ancienne valeur pour l'additionner à la nouvelle.

A+
Horatio
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…