XL 2016 SOMME CELLULE

laurence ruchon

XLDnaute Nouveau
Bonjour

Je voudrais savoir si il est possible d'avoir un calcul automatique dans une cellule. Exemple dans une cellule je tape 1 ensuite dans cette même cellule je mets 5. Je voudrais que ma cellule indique 6 : (5+1)
ensuite je saisie 2 et là la cellule indique 8 etc

Je vous remercie par avance pour votre aide.

Laurence RUCHON
 

Dan

XLDnaute Barbatruc
Bonjour

Essayer avec ce code dans la feuille concernée (click droite sur l'onget, puis choisir visualiser le code et coller le ci-dessous)
VB:
Dim ok As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
Dim valeur
If ok = True Then Exit Sub
valeur = Target
If Not Intersect(Target, Range("A1")) Is Nothing Then
    ok = True
    Application.Undo
    Target = Target + valeur
End If
ok = False
End Sub
Le code fonctionne sur la cellule A1

Cordialement
 

soan

XLDnaute Barbatruc
Inactif
Bonjour,

mais qu'est-ce qu'ils ont tous, à vouloir utiliser une cellule Excel comme si c'était une calculatrice ? 😜 🤣

ma solution, très simple : appuyer sur les touches Windows r ; taper calc ; appuyer sur la touche Entrée


soan
 
Dernière édition:

Phil69970

XLDnaute Barbatruc
Bonjour Laurence, le forum

La réponse est ici
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target <> "" Then
        Application.EnableEvents = False
        valsaisie = Target
        Application.Undo
        If Left(Target.Formula, 1) = "=" Then
            Target.Formula = Target.Formula & "+" & Trim$(Str$(valsaisie))
        Else
            Target.Formula = "=" & Trim$(Str$(valsaisie))
        End If
        Application.EnableEvents = True
    End If
End Sub
@Phil69970
 

Dan

XLDnaute Barbatruc
Bonjour,

Pour ma part, j'évite toujours l'instruction Application.EnableEvents car si par hasard la macro que la macro plante avant d'atteindre l'instruction Application.EnableEvents = True, excel aura désactivé la gestion des événements VBA et quelle que soit la macro évènementielle devant être lancée derrière pendant que l'utilisateur continuera de travailler... Dégats assurés...

Expérience vécue, je privilégie toujours une variable Boolean placée en entête de module (comme ici dans ma proposition) ou une variable déclarée Static à l'intérieur de la procédure

Cordialement
 

Rouge

XLDnaute Impliqué
Bonjour à tous,

Suite à un MP de Laurence ruchon qui précise que ce sont toutes les cellules des colonnes C, D et E qui sont concernées, je mets mon nouveau fichier. le code que j'utilise est le suivant:

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static AncValeurC As String
    Static AncValeurD As String
    Static AncValeurE As String
    On Error GoTo Sortie
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    If Not Intersect(Target, Columns("C")) Is Nothing Then
        AncValeurC = Target
    ElseIf Not Intersect(Target, Columns("D")) Is Nothing Then
        AncValeurD = Target
    ElseIf Not Intersect(Target, Columns("E")) Is Nothing Then
        AncValeurE = Target
    End If
Sortie:
    Application.EnableEvents = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Static AncValeurC As String
    Static AncValeurD As String
    Static AncValeurE As String
    On Error GoTo Sortie
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    If Not Intersect(Target, Columns("C")) Is Nothing Then
        If Target.Count > 1 Then GoTo Sortie
            If Target = "" Then
                AncValeurC = ""
                GoTo Sortie
            End If
            If AncValeurC <> "" Then Target = Target + AncValeurC * 1
        AncValeurC = Target
    ElseIf Not Intersect(Target, Columns("D")) Is Nothing Then
        If Target.Count > 1 Then GoTo Sortie
            If Target = "" Then
                AncValeurD = ""
                GoTo Sortie
            End If
            If AncValeurD <> "" Then Target = Target + AncValeurD * 1
        AncValeurD = Target
    ElseIf Not Intersect(Target, Columns("E")) Is Nothing Then
        If Target.Count > 1 Then GoTo Sortie
            If Target = "" Then
                AncValeurE = ""
                GoTo Sortie
            End If
            If AncValeurE <> "" Then Target = Target + AncValeurE * 1
        AncValeurE = Target
    End If
Sortie:
    Application.EnableEvents = True
End Sub

Cdlt
 

Pièces jointes

  • laurence ruchon_SOMME CELLULE_2.xlsm
    18 KB · Affichages: 6

Phil69970

XLDnaute Barbatruc
Bonjour à tous

Suite au post #7 de @Rouge et pour restreindre seulement au colonne C, D, et E je propose:
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C:E")) Is Nothing Then
    If Target <> "" Then
        Application.EnableEvents = False
        valsaisie = Target
        Application.Undo
        If Left(Target.Formula, 1) = "=" Then
            Target.Formula = Target.Formula & "+" & Trim$(Str$(valsaisie))
        Else
            Target.Formula = "=" & Trim$(Str$(valsaisie))
        End If
        Application.EnableEvents = True
    End If
End If
End Sub
* @laurence ruchon pour avoir le maximum de réponse il est toujours préférable de préciser un complément de demande en public et non pas en MP

@Phil69970
 

Discussions similaires

Réponses
7
Affichages
348
Réponses
32
Affichages
968

Statistiques des forums

Discussions
315 126
Messages
2 116 491
Membres
112 763
dernier inscrit
issam2020