Somme si la selection dans une plage donné vb

Résolu
Bonjour,



je suis a la recherche de la programation vba pour

faire une somme de cellules selectioner uniquement si ces cellules sont dans les colones d;e;f;g et les lignes 29 a 62

21 réponses

  1. Contributeur
    Bonjour,
    Et comment tu fait la sélection des cellules ?.
    Où doit être le résultat ?
    A+
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    0
    1. Contributeur
      Peut-être que cette solution te conviendras ?
      Cliquer sur une cellule de la plage la colorie en rouge, recliquer dessus la remet à la couleur par défaut.
      Le total des cellules rouge s'inscrit automatiquement en A1
      A coller dans le code de la feuille
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
      Dim cel As Range, Total As Single  
          If Target.Count > 1 Then Exit Sub  
          If Not Intersect(Target, [D29:G62]) Is Nothing Then  
              If Target.Interior.Color = vbRed Then  
                  Target.Interior.ColorIndex = -4142  
              Else  
                  Target.Interior.Color = vbRed  
              End If  
              Total = 0  
              For Each cel In [D29:G62]  
                  If cel.Interior.Color = vbRed Then  
                      Total = Total + cel.Value  
                  End If  
              Next cel  
              [A1] = Total  
          End If  
      End Sub

      Il serait plus simple de mettre un formule en A1 mais suis pas fort en formule Excel et laisse ce soins à un autre intervenant.
      Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
      NOTE : Je ne répond pas aux MP pour les questions techniques.
      0
      1. bonjour
        je pense que la formule dont j'ai besoin est beaucoup plus courte car en fait
        j'ai deja une macro de calcul complete sur plusieurs ligne, je veux juste avant tous ca inseré 3 ligne de macro pour dire si la selection que j'ai faite avec ma souris est dans la plage D29:G62 avec un minimum de 2 ligne et 4 colones alors j'execute tous le reste
        j'ai essayer d'integrer

        If Not Intersect(Target, [D29:G62]) Is Nothing Then
        If Intersect(Target, [D29:G62]) Then
        end if

        mais j'ai du faire une erreur
        0
        1. Contributeur
          Je ne pense pas pouvoir faire cela en "trois lignes" si tu trouve tant mieux pour toi, mais si ça t'intéresse avec quelque lignes en plus...
          Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
          Dim cel As Range, S() As String  
              If Not Intersect(Target, [D29:G62]) Is Nothing Then  
                  If Target.Count < 8 Then Exit Sub 'Y a moins de 8 cellules sélectionnées  
                  S = Split(Target.Address, ":")  
                  If Target.Column <> 4 Or Range(S(1)).Column <> 7 Then Exit Sub 'pour avoir 4 colonnes ça doit commencer en D  et finir en G
                  'ICI les conditions sont remplies  
                  'et si tout le reste c'est la somme de ces cellules le plus simple c'est  
                  [A1] = 0 'pour exemple en A1  
                  For Each cel In Target  
                      [A1] = [A1] + cel  
                  Next cel  
              End If  
          End Sub


          A+
          Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
          NOTE : Je ne répond pas aux MP pour les questions techniques.
          0
          1. bonjour

            merci beaucoup
            et désolé mais 3 ligne était une expression je débute en VBA
            faut pas m'en vouloir

            j'essaye et je vous tient au courant
            0
            1. Contributeur
              Bonjour tout le monde,

              Lermitte, j'ai l'impression que tu ne testes pas si la sélection dépasse la ligne 62.

              Autre proposition :
              Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
                  If Target.Column <> 4 Or Target.Columns.Count <> 4 Then Exit Sub  
                  If Target.Row < 29 Or Target.Rows.Count < 2 Or Target.Row + Target.Rows.Count - 1 > 62 Then Exit Sub  
                  ' ton programme  
                  [A28] = Application.Sum(Target)
              End Sub 

              eric
              0
              1. Contributeur
                Salut Eric,
                Exact, j'ai pas tester les limites row.
                Mais j'ai mis
                If Target.Count < 8 Then Exit Sub 'Y a moins de 8 cellules
                pour éviter de faire les autre tests si cette conditions n'est pas remplie, une habitude de quand les PC étaient très lent..
                Elle peut remplacer - Or Target.Rows.Count < 2
                A+
                PS: Je connaît aussi Rows.Count et .Columns.Count mais je ne sais pas ce qui s'est passé Excel n'a pas voulu les prendre.
                0
            2. merci beaucoup

              je viens d'essayer la formule de eric
              mais ca ne marche pas car il me souligne la 2eme ligne

              je ne comprend pas ce que veut dire la ligne
              [A28]=application.sum(target)
              et les numero utilisé dans la 2/3/ et 4eme ligne c'est le numero des colones et cellules mais si ma colonne D et E sont fusioné comment on les compte
              0
              1. rebonjour a tous les 2 j'ai essayer vos 2 macro seule
                ca ne marche pas
                de plus quand je les écrit tel quel elle disparaisse je ne les trouve plus dans macro, afficher les macro, pourquoi?

                merci pour vos reponse
                0
                1. Contributeur
                  Re,

                  ca ne marche pas
                  de plus quand je les écrit tel quel elle disparaisse je ne les trouve plus dans macro, afficher les macro, pourquoi?

                  Parce que tu ne fais pas bien, impossible de savoir sans être devant ton micro.

                  je ne comprend pas ce que veut dire la ligne
                  [A28]=application.sum(target)
                  met la somme d'une sélection valide en A28

                  un exemple fonctionnel :
                  http://www.cijoint.fr/cjlink.php?file=cj201110/cijEzfwE9y.xls
                  les fusions de cellules sont à éviter au maximum !!!!
                  Ici en l'occurence ça ne gène pas....

                  eric
                  0
                  1. re

                    si si je suis devant mon micro
                    mais désolé je debute alors je ne comprend pas tout

                    l'exemple fonctionel ne s'ouvre pas le lien est bloqué

                    par contre pourquoi la macro disparait quand j'ecrit private devant et quand je l'enleve je la retrouve
                    0
                    1. Contributeur
                      cijoint.fr merdouille un peu parfois.
                      J'étais sur un autre micro et je ne peux pas l'uploader sur un autre site, re-essaie un peu plus tard.

                      par contre pourquoi la macro disparait quand j'ecrit private devant et quand je l'enleve je la retrouve
                      Tu sais que tu si tu mets ton curseur sur une instruction et que tu fais F1 tu as une excellente aide ?

                      eric
                      0
                  2. Contributeur
                    RE?
                    je crois que j'ai compris !!!
                    Dans Excel >> Tu tape Alt+F11
                    L'IDE de visual basic s'ouvre
                    A gauche tu à la fenêtre de l'explorateur de projet avec les noms de tes feuilles, si tu ne le trouve pas tu tape Ctrl+R
                    Tu double clic sur le nom de la feuille concernée.
                    Dans la fenêtre qui s'ouvre tu fais un copier/coller de la macro d'Eric
                    Tu ferme l'IDE (la croix rouge)
                    Et GO... tu test
                    Et oublie pas de sauver Excel
                    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
                    NOTE : Je ne répond pas aux MP pour les questions techniques.
                    0
                    1. Contributeur
                      Pour réactualiser, tu à lu mon poste précédant pendant que je le modifiait.
                      Et j'ajouterais .. TU NE FAIT RIEN D'AUTRE
                      Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
                      NOTE : Je ne répond pas aux MP pour les questions techniques.
                      0
                      1. comment fait on pour l'executer une fois que j'ai selectioner mes cellules avec la souris
                        0
                        1. Contributeur
                          Rien, c'est automatique
                          Tu devrais avoir le total des cellules sélectionnées dans la cellule A28
                          0
                          1. ha ok
                            je vais essayer
                            par contre il me le faut pas en automatique car j'ai crée un bouton pour cliquer dessus

                            qu'est ce qu'il faut que j'enleve dans la formule pour qu'il ne soit pas automatique
                            0
                            1. Contributeur
                              essaie avec ça (non testé mais ça ne devrait pas être trop loin...)
                              Sub sumSel() 
                                  If Selection.Column <> 4 Or Selection.Columns.Count <> 4 Then Exit Sub   
                                  If Selection.Row < 29 Or Selection.Rows.Count < 2 Or Selection.Row + Selection.Rows.Count - 1 > 62 Then Exit Sub   
                                  ' ton programme   
                                  [A28] = Application.Sum(Selection) 
                              End Sub

                              eric
                              0
                              1. Contributeur
                                Y a quoi dans le code de ton bouton ?
                                Montre le code
                                Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
                                NOTE : Je ne répond pas aux MP pour les questions techniques.
                                0
                                1. ca y est ca marche
                                  0
                                  1. Contributeur
                                    oui, à mettre au début pour sortir de la macro si selection incorrecte.
                                    eric
                                    0
                                  2. Contributeur
                                    évite de modifier les messages après une réponse, sinon on ne comprend plus... ;-)
                                    0
                                • 1
                                • 2