Incrémentation d'une cellule par une cellule

Résolu
bonjour,
Je suis une novice sur excel et j'essai de trouver une solution pour incrémenter une cellule par le contenu d'une autre cellule qui doit ensuite s'effacer quand j'appuie sur entrée.
Je m'explique:
En D40 je te tape 100 et je voudrais que ce chiffre s'ajoute à C40 et que la valeur de D40 se remette à 0 après validation.
Je voudrais créer cela pour plusieurs colonne.( précisément de D40 a D456 et respectivement de C40 a c 56.

Merci d'avance j'espère avoir été assez clair.

<config>Windows 7 / office 2007

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    bonjour

    lorsque tu saisis une valeur dans D40:D456
    la cellule correspondante est additionnée de la
    valeur

    Private Sub Worksheet_Change(ByVal Target As Range) 
    Static flag As Boolean 
    If Intersect(Target, Range("D40:D456")) Is Nothing Or flag Then 
        flag = False 
        End 
    End If 
    
    flag = True 
    Target.Offset(0, -1) = Target.Offset(0, -1) + Target 
    Target = "" 
    
    End Sub 
    


    a installer dans le module feuille concernée

    pour cela:
    copie la macro ci dessus
    clic droit sur le nom de l'onglet
    visualiser code
    coller

    en espérant que...
    :-x
    1. Ca marche pas mal mais j'aimerai si possible effacer automatiquement la valeur qui vient d'etre ajouter
      1. Contributeur
        merci pour le "pas mal"...

        la valeur dans D est remise à "rien" par

        Target = ""

        1. non franchement c'est exactement ce que je veux sauf que la cellule n'est pas vidé malgré target="".
          En fait le chiffre que je rente reste afficher je dois l'effacer manuellement.
          Si tu trouves pas c'est juste un petit détail mais je peux faire sans. Encore merci et désolé pour ma maladresse concernant le pas mal.
          1. Contributeur
            Effectivement

            macro corrigée:
            Private Sub Worksheet_Change(ByVal Target As Range) 
            
            If Intersect(Target, Range("D40:D456")) Is Nothing Then: Exit Sub 
                Target.Offset(0, -1) = Target.Offset(0, -1) + Target 
                Application.EnableEvents = False 
                    Target = "" 
                Application.EnableEvents = True 
            End Sub


            Sub sos_evenements()
            Application.EnableEvents = True
            End Sub

            la macro sos_evenements est à placer dans un module (module 1 ou autre) car enableevents=false reste sur cet état si on sort accidentellement de la macro tant qu'il n'y a pas de remise à true
            c'est la raison pour la quelle j'avais mis un booléen mais il y a eu le syndrome du lundi!

            N'inquiète pas pour le "pas mal": le cancre n'allait pas louper le truc :-D
        2. desole j'ai pas compris ce que je dois modifier.
          Rajouter un module sos_evenement et remplacer la première macro par la 2eme modifier.
          Si c'est ca c ce que j'ai fait et rien ne fonctionne, as tu une idée pour ou j'ai déconner?
          1. En gros j'ai pas compri ce que je dois faire et j'ai pas compri non plus ton explication.
            1. Contributeur
              ci joint démo
              http://www.cijoint.fr/cjlink.php?file=cj201006/cijrG5tcRN.xls
          2. C'est bon j'ai trouver merci bcp c'est exactement ce que je voulais.
            J'ai posé une autre question sur le forum si tu veux m'aider pas de soucis .
            Bonne journee merci