Somme de colonnes

Bonjour,

le titre n'est certe pas très explicite, alors voilà:
sous excel , je souhaite faire une macro qui par exemple additionne des colones comme suit:

colonnes |A | B | C | D

je veux des colonnes qui donnent | A+B | A+C | A+D | B+C | B+D | C+D

en fait chaque colonne est additionnée une fois avec la suivante
évidemment, pour corser, le nombre de colonnes au départ peut varier...

Il y a une formule m athématique pour calculer le nombre de colonnes finales qui est

( (x*x)+x)/2 )-x

par exemple si au départ j'ai 5 colonnes, cela fera 10 colonnes à la fin.

en fait le nombre de colonnes finales c'est aussi (tjs pour 5) : 1+2+3+4=10
et pour 6 : 1+2+3+4+5=15

Merci de vos réponse . Une piste de réflexion serait déjà bienvenue...peut être la réponse existe t'elle quelque part ?

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,
    Juste au passage, le A+B est la somme des colonnes et ou vous placez le résultat ?
    Et combien de lignes par colonnes (A,B,C,D) .... y a-t-il le même nombre de lignes par colonnes ?
    Et aussi, qu'elle en est l'application qui utilise ces résultats ?

    Salutations.
    Le Pingou
    1. Bonjour,

      Je ne sais pas si cela pourra t'aider :

      http://www.cijoint.fr/cjlink.php?file=cj201109/cijZZ7BeDH.xls

      Dans ton message, tu ne précises pas s'il y a une seule somme par colonne ou plusieurs lignes dans chaque colonne.

      A+

      pépé
      1. Bonjour,
        Avec dans la ligne 1 le nom de colonne (A, B, ...etc.)
        Cette procédure ou vous devez encore introduire la ligne de calcul à la place de la variable [res].
        Sub sommecol()
        nbcol = Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
        ReDim List_col(1 To nbcol) As Variant
        For i = 1 To nbcol
            List_col(i) = Cells(1, i)
        Next i
        pa = 1
        ad = 2
        For pa = 1 To nbcol - 1
            For c = ad To nbcol
                res = List_col(pa) + List_col(c)
                MsgBox " la somme des colonne " & res
            Next c
            ad = ad + 1
        Next pa
        End Sub
        1. Bonjour,

          et merci pour vos réponses (certains travaillent très très tard !)

          LE PINGOU et PEPE

          Pour le fond, c'est ça !

          pour la forme si possible ça ressemblerait à ceci:

          on a sur la feuil1, par exemple

          | A | B | C | ...
          | 10| 2 | 5 | ...
          | 20| 4 | 10| ...
          | 25| 6 | 15| ...

          et sur la feuil2, on obtient le résultat :

          | AB | AC | BC | ...
          | 12 | 15 | 07 | ...
          | 24 | 30 | 14 |
          | 31 | 40 | 21 | ...

          etc...

          et voilà !

          En tout cas, c'est merveilleux de simplicité, même si je ne comprends pas tout

          Si (cerise sur le gateau) vous pouviez me montrer juste la logique des boucles

          je ne comprends pas pourquoi une fois les A+... on passe à B sans repasser par A...

          je crois que ça se joue entre "pa" et "ad", boucles imbriquées ?

          Et donc encore merci !

          PS : puis-je vous demander avec quel bouquin vous avez appris le VBA ?
          1. Bonjour,
            A la base 5 colonnes (A, B, C, D et E), dans une première boucle externe on prendra en compte les 4 premières colonnes (A, B ,C et D) et dans une boucle interne à la première sur les 4 dernières (B, C,D et E).
            A la fin de la boucle interne les résultats (A-B, A-C, A-D et A-E9).
            Début de la deuxième boucle externe avec la colonne (B) et pour la boucle interne on décale de 1colonne soit (C, D et E). Ce qui donne (B-C, B-D et B-E). Et ainsi de suite.
            La variable (pa) est le compteur de la boucle externe, (c) celui de la boucle interne qui est incrémenté par l'index de passage (ad).
            Vous devez encore réaliser le calcul souhaité au niveau de la ligne (res) et placer le résultat en feuille 2.
            Note: pas de bouquin mais l'aide fournie avec le logiciel et de la recherche sur divers site plus beaucoup de curiosité avec des essaies pour voir ce qui se passe....!
            Salutations.
            Le Pingou
            1. Bonjour,
              Essayez cette procédure pour voir ... !
              Sub sommecol()
              Dim sh2 As Worksheet
              Set sh2 = Sheets("Feuil2")
              nbcol = Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
              nbli = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
              ReDim List_col(1 To nbcol) As Variant
              ReDim somcol(1 To nbli - 1) As Long
              For i = 1 To nbcol
                  List_col(i) = Cells(1, i).Column
              Next i
              pa = 1: nc = 1
              ad = 2
              For pa = 1 To nbcol - 1
                  For c = ad To nbcol
                      For s = 2 To nbli
                          somcol(s - 1) = Cells(s, List_col(pa)) + Cells(s, List_col(c))
                      Next s
                      With sh2
                      .Range(.Cells(1, nc), .Cells(nbli - 1, nc)) = Application.Transpose(somcol)
                      nc = nc + 1
                      End With
                  Next c
                  ad = ad + 1
              Next pa
              Set sh2 = Nothing
              End Sub
              1. C'est ça !

                C'est magique !

                (j'espère pouvoir dire un jour "c'est logique !")

                Merci encore