Partage
  • Partager sur Facebook
  • Partager sur Twitter

Macro excel

Somme des différentes valeurs prises par une cellule

    14 mars 2018 à 0:26:08

    Bonjour à tous,

    Après plusieurs années de recherche, je n'est pas trouvé de réponse à mon problème. (je ne dit pas que mes recherches sont infaillible :D)

    Je vous explique :

    J'aimerai créer un compteur sur excel, c'est à dire : 

    J'ai en entrée une cellule (par exemple la cellule A1) et je lui met une valeur.

    J'ai en sorti une cellule (par exemple la cellule B1) qui va accumuler les valeurs qu'a pris la cellule d'entrer (A1):

    J'aimerai qu'à chaque fois que je modifie A1, B1 ce modifie, ex :

    J'ai entré la valeur 5 dans A1, B1 passe de 0 à 5, je modifie A1 par 8 et a ce moment la, B1 affichera 13.

    J'ai donc cherché à créer une fonction mais en vain... Je ne vois pas ce que je pourrais créer comme macro ni comment l'affecter à la case B1. Je n'ai pas réussi a créer de fonction du type B1=B1+A1...

    Merci à vous! ;)

    • Partager sur Facebook
    • Partager sur Twitter
      14 mars 2018 à 9:36:50

      Salut,

      Si tu as vraiment cherché pendant plusieurs années, tu dois sérieusement revoir ta manière de faire :).

      Une solution simple : tu utilises l'événement Worksheet.Change qui est appelé lorsque la valeur d'une cellule est modifiée, ensuite si la cellule modifiée est A1 alors tu modifies la valeur de B1.

      A lire : https://msdn.microsoft.com/fr-fr/vba/excel-vba/articles/worksheet-change-event-excel

      Quelle expérience as-tu en VBA ?

      -
      Edité par Stormweaker 14 mars 2018 à 9:37:05

      • Partager sur Facebook
      • Partager sur Twitter
        14 mars 2018 à 9:53:35

        J'ai avancer un peu je crois mais je ne vois pas comment je peut modifié la valeur de B1 lorsque A1 est modifié. J'ai fait ça :

        Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
            Dim KeyCells As Range
        
            ' La variable KeyCells contient les cellules qui déclencheront
            ' une alerte si elles sont modifiées.
            Set KeyCells = Range("A1")
            
            If Not Application.Intersect(KeyCells, Range(Target.Address)) _
            Is Nothing Then
            'Modifier B1 lorsque A1 est modifié
        
        
        
            End If
        End Sub

        Merci de votre aide

        -
        Edité par lionbuffle 14 mars 2018 à 14:33:19

        • Partager sur Facebook
        • Partager sur Twitter
          14 mars 2018 à 17:42:46

          T'as fait le plus dur, le code qui sera présent dans le If sera exécuté si la cellule modifiée est A1 (EDIT : en fait si la plage modifiée contient A1, donc si tu modifies en même temps A1 et B1 (par exemeple avec un copier-coller) la valeur de B1 prendra celle du copier coller puis la macro sera appelée, je ne sais pas si ça te génera, mais c'est à noter).

          Pour accéder à la valeur d'une cellule il faut utiliser la propriété Value, par exemple Range("A1").Value te donne la valeur de la cellule A1, tu peux aussi l'utiliser pour modifier la valeur d'une cellule.

          -
          Edité par Stormweaker 14 mars 2018 à 17:47:54

          • Partager sur Facebook
          • Partager sur Twitter
            15 mars 2018 à 23:10:05

            Alors j'ai fait ce que vous m'avez conseillé seulement la valeurs n'est pas modifié. Me suis-je trompé dans le programme?

            Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
                Dim KeyCells As Range
             
                ' La variable KeyCells contient les cellules qui déclencheront
                ' une alerte si elles sont modifiées.
                Set KeyCells = Range("B17")
                 
                If Not Application.Intersect(KeyCells, Range(Target.Address)) _
                Is Nothing Then
                'Modifier B1 lorsque A1 est modifié
                Range("D26") = Range("B18") - Range("D26")
             
                End If
            End Sub

            Merci d'avance

            • Partager sur Facebook
            • Partager sur Twitter
              16 mars 2018 à 11:08:05

              Est-ce que tu as bien placé ce code dans la feuille "thisWorkbook" quand tu es dans l'éditeur ?

              Est-ce que tu es certain des cellules que tu veux utiliser ? Tu vérifies si la cellule B17 est modifiée pour ensuite modifier la valeur de D26 par rapport à B18.

              Pour modifier la valeur il vaut mieux utiliser Range("D26").Value, ta ligne devient donc Range("D26").Value = Range("B18").Value - Range("D26").Value

              • Partager sur Facebook
              • Partager sur Twitter
                16 mars 2018 à 15:42:47

                Cela marche je ne l'avais pas bien placé effectivement. Mais du coup il prend la valeur de B18 juste avant qu'elle soit changer (Car elle est changé par la valeur de B17 rentré à la main) du coup ça ne retire l'ancienne valeur et non la nouvelle.

                J'ai trouvé cette solution ou du coup je rentre dans la case la valeur qu'on veut retirer. Cela n'est pas automatique mais fonctionne.

                Option Explicit
                Dim un%, deux%, trois%
                Private Sub Worksheet_SelectionChange(ByVal Target As Range)
                  un = Range("D26")
                  deux = Range("L26")
                  trois = Range("T26")
                End Sub
                
                Private Sub Worksheet_Change(ByVal Target As Range)
                  Application.EnableEvents = False
                    If Target.Address = "$D$26" Then Range("D26") = un - Range("D26")
                    If Target.Address = "$L$26" Then Range("L26") = deux - Range("L26")
                    If Target.Address = "$T$26" Then Range("T26") = trois - Range("T26")
                  Application.EnableEvents = True
                End Sub

                Je me demande si du coup il ne serai pas possible avec cet algorithme de faire ce que je cherche?

                • Partager sur Facebook
                • Partager sur Twitter
                  16 mars 2018 à 16:59:30

                  Qu'est-ce que tu veux faire exactement ?

                  Le code que tu as donné retranche la valeur que tu rentres dans une cellule à celle qui était présente.

                  Ce que tu as demandé dans ton premier post c'est d'ajouter la valeur d'une cellule que tu modifies à la valeur d'une autre cellule.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 mars 2018 à 19:56:31

                    Salut !

                    lionbuffle, bien sûr que tu peux utiliser l'exemple que tu donnes !

                    Personnellement, je le placerai plus facilement dans la feuille concernée plutôt que dans "thisworkbook"

                    voici un exemple de ce que tu pourrais faire :

                    Option Explicit
                    
                    Dim un%
                    
                     
                    Private Sub Worksheet_Change(ByVal Target As Range)
                    
                    un = Range("B18")
                      
                      Application.EnableEvents = False
                        If Target.Address = "$B$17" Then Range("B18") = un + Range("B17")
                        ' après, tu ajoutes toutes les instructions que tu veux, comme dans l'exemple que t'as donné
                      Application.EnableEvents = True
                    End Sub
                    



                    • Partager sur Facebook
                    • Partager sur Twitter

                    Macro excel

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown