Somme de colonnes

grosnul -  
 grosnul -
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

  1. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    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
    0
  2. pépé35530 Messages postés 2951 Date d'inscription   Statut Membre Dernière intervention   1 390
     
    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é
    0
  3. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    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
    0
  4. grosnul
     
    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 ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    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
    0
  7. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    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
    0
    1. grosnul
       
      C'est ça !

      C'est magique !

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

      Merci encore
      0