Saisir dans une cellule, afficher un cumul, pas la saisie (Macro ?)

papapaul

XLDnaute Impliqué
:) Salut Forum.
Dans des cellules, je saisis des données pour faire des résultats cumulés.
Je voudrais pouvoir modifier une ou plusieurs de ces données
mais que après la modif, apparaisse toujours dans la cellule
le résultat cumulé en fonction de la modif
et pas la saisie que je viens de refaire.

Je voudrais le faire avec une macro dans le code de la feuille.
J'essaye d'expliquer dans le fichier.

Merci d'avance à ceux qui pourront m'aider.
J'ai bien chercher dans les posts mais rien ne colle vraiment.:(
Trop compliquée pour moi cette affaire

Bonne journée ;)
 

Pièces jointes

  • Cumul par Macro.xls
    17 KB · Affichages: 135
G

Guest

Guest
Re : Saisir dans une cellule, afficher un cumul, pas la saisie (Macro ?)

Bonjour PapaPaul,

Voici une solution par macro
Cumul des valeur de B9 jusqu'à la cellule en cours -1 ligne + la valeur de la cellule en cours

calcul dans Worksheet_Change(ByVal Target As Range)
Bon Week-End
 

papapaul

XLDnaute Impliqué
Re : Saisir dans une cellule, afficher un cumul, pas la saisie (Macro ?)

:) Hasco, tu es formidable.
C'est parfaitement ce que j'essaye de faire
depuis plusieurs jours.:p
Je pense pouvoir adapter à mes vrais trucs.

En tout cas j'aurai jamais pu trouver ça tout seul.
Dix milles merci à toi.
Merci à ce trop génial Forum.
Amitiés à tous;)
 

papapaul

XLDnaute Impliqué
Re : Saisir dans une cellule, afficher un cumul, pas la saisie (Macro ?)

:eek: Oups, trop content trop vite moi.
C'est presque bon, mais...
Impeccable pour le cumul dans la cellule que je saisis
Ca additionne bien ma saisie avec les cellules du dessus
à partir de la ligne 9.
mais le cumul ne suis pas sur les cellules en dessous
(jusqu'en B ou C14), faudrait les mêmes résultats que
dans la colonne (F) ou il y a les formules(F).
Je vais essayer de comprendre les codes pour y arriver
mais Hasco, tu sais surement quelle ligne de code
il faudrait ajouter ou modifier ?
J'y réfléchis mais :p pour mes petits neurones.
Merci.
 
G

Guest

Guest
Re : Saisir dans une cellule, afficher un cumul, pas la saisie (Macro ?)

Re bonjour Papapaul,

Voici une macro qui devrait le faire:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Union(Target, Range("B10:C14")).Address <> Range("B10:C14").Address Then Exit Sub
    If Not IsNumeric(Target.Value) Then Exit Sub
    Dim Valeur As Variant
    Dim c As Range, plage As Range
    Set plage = Range(Cells(10, Target.Column).Address & ":" & Cells(14, Target.Column).Address)
    On Error Resume Next
    Application.EnableEvents = False
    For Each c In plage
        'Debug.Print c.Row, Range(Cells(9, c.Column).Address & ":" & Cells(c.Row, c.Column).Address).Address
        Valeur = Application.Sum(Range(Cells(9, c.Column).Address & ":" & Cells(c.Row - 1, c.Column).Address))
        If Not IsError(Valeur) Then c = Valeur + c.Value + [SIZE=3][COLOR=red]Valeur[/COLOR][/SIZE]
    Next
    Application.EnableEvents = True
End Sub

je ne sais pas si tu veux réellement ce cumul (le deuxième Valeur).

Testes et éventuellement enlèves le.
La ligne debug.print peut t'aider à y voir plus clair pour que cela corresponde à ce que tu souhaites.
en tout cas il me semble que la démarche est.

A bientôt et bonne soirée
 

papapaul

XLDnaute Impliqué
Re : Saisir dans une cellule, afficher un cumul, pas la saisie (Macro ?)

:) Salut tous (Hasco, Pierrejean)
excuses Pierrejean mais le temps d'écrire je t'avais pas vu
et puis je comprends mal ce que tu a compris :D

Merci Hasco pour ta 2ème version.
Effectivement en enlevant Valeur,
je pense que j'obtiens ce que je souhaite.
Quelques vérifications encore et je vous tiens
au courant si ca colle pas.
Merci et Bravo tous les 2. Pourtant pas simple mon truc.

Amitiés;)
 

papapaul

XLDnaute Impliqué
Re : Saisir dans une cellule, afficher un cumul, pas la saisie (Macro ?)

:mad: Grrr de grrr. pas encore ca.
Les cumuls ne doivent se modifier que dans la cellule(Modif x)
de saisie et sur les cellules en-dessous.
Les cellules Modif au dessus de la saisie doivent
restées identiques au résultat précédent.
Je joins un autre fichier avec j'espère des
explications plus claires :)o)
J'ai laissé dans Feuil1 le 1er code de Hasco.
Plus compliqué que je pensais :eek:
Je continue à essayer.
Merci @+
 

Pièces jointes

  • Cumul par Macro_Hasco_PJ.xls
    21.5 KB · Affichages: 80
G

Guest

Guest
Re : Saisir dans une cellule, afficher un cumul, pas la saisie (Macro ?)

bonjour Papapaul, Le Forum,

Je crois qu'on arrive au bout:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Union(Target, Range("H26:H30")).Address <> Range("H26:H30").Address Then Exit Sub
    If Not IsNumeric(Target.Value) Then Exit Sub
    Dim c As Range
    Application.EnableEvents = False
 
    'Pour la cellule changée on compte de H25 jusqu'à elle même
    Target = Application.Sum(Range("H25:H" & Target.Row))
 
    'Pour les suivantes
    For Each c In Range("H" & Target.Row + 1 & ":H30")
        'On compte de H25 jusqu'a la cellule précédente (+haut)
        c = Application.Sum(Range("H25:H" & c.Row - 1))
 
       'Décommenter la ligne ci dessous pour voir les formules appliquées
       'Au lieu du résultat en dur
       'c.Formula = "=SUM(H25:H" & c.Row - 1 & ")"
 
    Next
    Application.EnableEvents = True
 
End Sub

Par contre dans ton énoncé de la première modification tu as une erreur (33 et 36 sont inversés), ce qui m'a fait errer un peu:)

A bientôt
 
Dernière modification par un modérateur:

papapaul

XLDnaute Impliqué
Re : Saisir dans une cellule, afficher un cumul, pas la saisie (Macro ?)

:) Bonjour Forum, Hasco (très matinal :eek:)
C'est presque ça !! Merci et bravo,
mais encore un petit truc ..

Pour obtenir ce que je souhaite :(dans mon fichier d'essai)
J'ai seulement changé le Range : B9:B14 a la place de H26:H30 (pas génant)
J'ai enlevé -1 dans cette ligne
c = Application.Sum(Range("B9:B" & c.Row - 1))

C'est tout OK sauf une dernière chose qui cloche.
C'est quand je saisis sur la dernière ligne de la plage cumul (B14) :mad:

Aussi, excuse moi mais je suis pas doué : je ne pige pas
ce que tu m'indique avec ces lignes.
'Décommenter la ligne ci dessous pour voir les formules appliquées
'Au lieu du résultat en dur
'c.Formula = "=SUM(H25:H" & c.Row - 1 & ")"


Je continue à chercher :p

Bonne journée à tous

 

Pièces jointes

  • Cumul par Hasco (presque_OK).xls
    21.5 KB · Affichages: 85
G

Guest

Guest
Re : Saisir dans une cellule, afficher un cumul, pas la saisie (Macro ?)

PapaPaul,

Une ligne commentée est une ligne Précédée par un apostrophe en Vba.
En général elle apparaît en vert. Les lignes commentées ne sont pas exécutées lorsque la macro est lancée.

Commenter une ligne c'est mettre un apostrophe devant la ligne pour qu'elle ne soit pas exécutée. (elle se met en vert)

Décommenter c'est enlever l'apostrophe pour que la ligne soit exécutée.

1 - Décommenter la ligne qui commence par 'c.formula = "=SUM......"

2 - Commenter celle qui commence par c = Application....

de façon à ce que la macro ressemble à ceci.

Code:
    For Each c In Range("H" & Target.Row + 1 & ":H30")
        'On compte de H25 jusqu'a la cellule précédente (+haut)
        [COLOR=yellowgreen][SIZE=3]'[/SIZE][B]c = Application.Sum(Range("H25:H" & c.Row - 1))[/B][/COLOR]
 
       'Décommenter la ligne ci dessous pour voir les formules appliquées
       'Au lieu du résultat en dur
      [B] [COLOR=black]c.Formula = "=SUM(H25:H" & c.Row - 1 & ")"[/COLOR][/B]
 
    Next

Si tu Changes H26 (dans cet exemple).

H26 est recalculé en entrant dans la macro:
Target = Application.Sum(Range("H25:H" & Target.Row))

La boucle se charge du calcul pour les cellules qui suivent H27:H30

La première Lignec= Application...., fait le calcul et renvoi de résultat en dur dans la cellule

La deuxième ligne c.Formula = "=SUM...3", place une formule '=somme()' dans les cellules.

Ainsi tu pourra voir après modification de H26, une formule dans les cellules H27:H30, et vérifier si cela correspond à ton attente.

Une fois les tests faits tu pourra Recommenter la ligne qui donne des résultats en durs et décommenter celle qui donne les formules (Ou la supprimer, au choix)

A bientôt
 
Dernière modification par un modérateur:

papapaul

XLDnaute Impliqué
Re : Saisir dans une cellule, afficher un cumul, pas la saisie (Macro ?)

:) Salut Forum, Hasco
Je comprenais pas "décommenter" pour afficher les formules.
L'apostrophe pour rendre inactif une ligne, si. Merci.

Mais ça résouds pas tout à fait le problème qui me reste.
Pour obtenir ce que je veux, j'ai enlever -1 dans la ligne
c = Application.Sum(Range("B9:B" & c.Row))
Ca marche très bien : à partir de 1,2,3,4,5
si je mets 2 à la place de 1 en B10 j'obtiens
32,64,129,259,519. C'est ce que je veux, chouette.

Si je décommente comme tu m'indique :
'c = Application.Sum(Range("B9:B" & c.Row))
'Décommenter la ligne ci dessous pour voir les formules appliquées
'Au lieu du résultat en dur
c.Formula = "=SUM(B9:B" & c.Row - 1 & ")"

J'obtiens 32,62,124,248,496, ca ne prends pas les anciennes valeurs
1,2,3,4,5
Normal : faudrait surement aussi enlever le -1
Mais j'y arrive pas, ca bug, sinon je vois bien les formules mais
ce sont des sommes simples: exemple =SOMME(B9:B12)
qui n'additionne pas les valeurs d'origine en dessous de
la cellule de saisie (1,2,3,4,5).
Tanpis, c'est pas grave.

Mon idée marche en modifiant ca
c = Application.Sum(Range("B9:B" & c.Row)) : (pas de -1)

sauf quand je veux modifier la dernière cellule de mes cumuls,
dans l'exemple ici, B14.:mad:
J'ai expliqué dans mon fichier ce qui cloche.

Aura-tu le temps de regarder ?

En tout cas Merci. +
 
G

Guest

Guest
Re : Saisir dans une cellule, afficher un cumul, pas la saisie (Macro ?)

PapaPaul,

voili, voilà,

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Union(Target, Range("B9:B14")).Address <> Range("B9:B14").Address Then Exit Sub
    If Not IsNumeric(Target.Value) Then Exit Sub
    Dim c As Range
    Application.EnableEvents = False
 
    'Pour la cellule changée on compte de H25 jusqu'à elle même
    [COLOR=royalblue]Target = Application.Sum(Range("B9:B" & Target.Row))[/COLOR]
 
    [COLOR=red]If Target.Row < 14 Then[/COLOR]
    'Pour les suivantes
       For Each c In [COLOR=yellowgreen]Range("B" & Target.Row + 1 & ":B14")[/COLOR]
           'On compte de H25 jusqu'a la cellule précédente (+haut)
           c = Application.Sum(Range("B9:B" & c.Row))
 
          'Décommenter la ligne ci dessous pour voir les formules appliquées
          'Au lieu du résultat en dur
          'c.Formula = "=SUM(H25:H" & c.Row - 1 & ")"
 
       Next
    [COLOR=red]End If[/COLOR]
    Application.EnableEvents = True
 
End Sub

En effet, lorsque tu changes la cellule B14
Elle est modifiée une première fois par
Code:
[COLOR=#4169e1]Target = Application.Sum(Range("B9:B" & Target.Row))[/COLOR]

Puis elles est claculée une deuxième fois par la boucle for dont la plage 'Range("B" & Target.Row + 1 & ":B14")' devient
Range("B14:B15") (si on la laisse faire)

Il faut donc éviter de rentrer dans la boucle en testant la valeur du numéro de ligne:
If Target.Row < 14 Then
.....
End if

Je pense que nous sommes arrivés là où tu voulais allé. Non?

A bientôt
 

papapaul

XLDnaute Impliqué
Re : Saisir dans une cellule, afficher un cumul, pas la saisie (Macro ?)

:) Merci dix Milles fois :) Ca y est !!! Projet terminé !

Fallait bien interrompre la boucle mais
j'ai été incapable de trouver comment.
Ca paraît pourtant tellement simple
If Target.Row < 14 Then
Faut juste le mettre au bon endroit

Grâce à toi, mes cheveux repoussent. :D
Un jour peut-être, je pourrais moi aussi aider les autres.

Amitiés et Longue vie au Forum et aux XLDeurs. ;)
 

Discussions similaires

Réponses
26
Affichages
492

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 979
dernier inscrit
bderradji