Somme de colonnes

Fermé
grosnul - Modifié par grosnul le 5/09/2011 à 20:47
 grosnul - 7 sept. 2011 à 18:46
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

Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
Modifié par Le Pingou le 5/09/2011 à 22:47
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
pépé35530 Messages postés 2942 Date d'inscription vendredi 1 mai 2009 Statut Membre Dernière intervention 19 mars 2016 1 386
5 sept. 2011 à 23:13
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
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
5 sept. 2011 à 23:50
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
Modifié par Le Pingou le 6/09/2011 à 21:52
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
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
6 sept. 2011 à 23:24
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
C'est ça !

C'est magique !

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

Merci encore
0