Somme d'une liste variable

Résolu
chris09300 Messages postés 140 Date d'inscription lundi 9 juin 2008 Statut Membre Dernière intervention 18 avril 2012 - 4 mai 2010 à 20:12
chris09300 Messages postés 140 Date d'inscription lundi 9 juin 2008 Statut Membre Dernière intervention 18 avril 2012 - 6 mai 2010 à 14:14
Bonsoir
je travaille sur excel2007. Je souhaiterais avoir la somme des prix dans une liste variable. la liste par de ligne 13 a xxx. quelqu'un a t'il une idee.

Montant TOTAL
0.00 € 0.00 €

Nom prix
michel 1000 ok
andre 150 nok
pierre 1205 ok

9 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 mai 2010 à 20:57
Salut

-1- Quand arriveras-tu à choisir la bonne catégorie pour tes questions VBA ?
C'est lassant !
Il y a de fortes chance que la prochaine fois, je supprime ton message.

-2- "avoir la somme des prix dans une liste variable" ne veut absolument rien dire

-3- Si tu veux une somme, tu sélectionnes la cellule où tu souhaites afficher le résultat, puis tu cliques sur le menu "Formules" puis "Maths et triogonométrie" et tu recherches "Somme"
La fonction ouvrira une fenêtre dans laquelle tu pourras définir la colonne contenant les chiffres à additionner.

Si cela ne correspond pas à ce que tu cherches, explique ce que tu veux faire : à chaque fois c'est un flou artistique absolu auquel personne ne comprends rien !

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
6 mai 2010 à 13:49
SI tu mets les valeurs en D16, il faut changer plusieurs choses :
La colonne dans la formule EQUIV : D16 au lieu de B13 et D65536 au lieu de B65536.
Et il faut faire +15 au lieu de +12
il faut changer aussi les n° de ligne et de colonne de la formule ADRESSE


Détail de la formule :
La formule EQUIV considère la plage donnée en paramètre comme une "matrice", et le résultat remonté est la position à l'intérieur de cette matrice. C'est à dire que quelque soit la ligne où commence ta plage de données, la première ligne à l'index 1.
Pour avoir le n° de la ligne, j'ajoute donc le nb de ligne d'écart entre 1 et la ligne où débute ta plage.
Tu as mis en D16, il faut donc rajouter 15 au résultat d'EQUIV pour avoir le n° de la dernière ligne.

ADRESSE donne la référence d'une cellule en désignant sa ligne et sa colonne.
INDIRECT représente la plage déterminée par son paramètre, ici : ADRESSE première cellule de ta plage, concaténé avec ":" et l'ADRESSE de la dernière cellule de ta plage déterminée automatiquement.

Et donc, SOMME qui somme toutes les valeurs comprises dans la plage.

Tout est dans l'aide intégrée à EXCEL. Tu cliques sur ta fonction dans la barre de formule, tu fais Fx, puis aide sur la fonction.

Molenn
3
chris09300 Messages postés 140 Date d'inscription lundi 9 juin 2008 Statut Membre Dernière intervention 18 avril 2012 1
4 mai 2010 à 21:16
tu n'as pas du lire mon message. c'est une liste variable et non fixe. Ce que tu me dis c'est bon pour une liste fixe. comme ont peux le voir j'ai une case montant dans laquelle je voulais avoir la somme de la colonne prix qui est en dessus sur l'exemple.
Tu n'est pas cool, tu dois comprendre qu'il n'est pas toujours facile de resumer ce que l'on souhaites dans un titre. Je suis nouveau sur ce site et cela fait trois fois que tu me choute.pas sympa
christian
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
5 mai 2010 à 00:31
Oui, peut-être un peu sec je l'admets, mais de ton côté, respecter de simples règles ne serait pas un gros effort.
D'autre part, côté programme, ce que tu appelles "liste" n'est pas une description correcte, tu as un ensemble de cellules, pas une liste.
Comme tout classeur Excel, les données ne sont jamais "fixes", comme tu dis, quand on s'adresse aux cellules, on ne sait jamais le nombre de lignes que le Range comporte (ou alors c'est un classeur qui n'évoluera pas, bof)
Donc, la première chose à faire, c'est de rechercher comment on détermine le Range avec lequel on va travailler.
Alors deux solutions :
- soit on prend en compte toute la colonne et pendant la boucle on teste quand il n'y a plus de données dans les cellules pour sortir de la boucle (Exit For ou Exit Do),
- soit on fait cette recherche avant de commencer la boucle et on travaille sur cet ensemble de cellules (une histoire de Shift-Control-Fin).

La prochaine fois, analyse où se trouve ta difficulté, ce que tu n'arrives pas à faire, mais là, tu donnes la description de ce que tu as à faire et basta, donnez-moi la solution.
Non, il faut expliquer ce que tu as essayé, ce que tu penses être la solution mais que tu n'arrives pas à mettre en place.

Toutes ces difficultés se trouvent parmi les sources des autres : c'est à toi de les charger, de lire des pages et des pages de code, de détailler ce qui est fait dedans ET comprendre comment ça marche, de suivre ligne à ligne comment évoluent les variables (débogage avec F9, F8, F5) : c'est la meilleure solution pour avancer.
Sans compte sur l'aide de ton logiciel : en cherchant de bons termes, et en lisant, on trouve souvent des solutions.
Et pourquoi pas lire des livres ? il y en a http://www.vbfrance.com/recherche.aspx?tr=livre&r=excel+2007

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

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

Posez votre question
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
5 mai 2010 à 09:51
C'est bizarre ton truc.
Tu es dans EXCEL, tes prix, vu ton exemple, sont dans une colonne, toujours la même.

Et bien, tu fais juste la somme de toute ta colonne. S'il n'y a aucun chiffre dans tes 12 premières lignes, aucun souci. Le texte compte comme une cellule vide.

Et si ça pose pb, tu définis une formule qui recalcule automatiquement la plage. Je pars du principe que, comme tu as des prix, tu n'as donc pas de valeurs négatives.
Donc, ci-dessous une formule qui calcule la somme de tous tes prix sur une plage variable, qui est la colonne B, à partir de la ligne 13

=SOMME(INDIRECT(ADRESSE(13;2) & ":" & ADRESSE(EQUIV(0;B:B;-1);2)))

EQUIV détermine le n° de la dernière ligne de ton tableau (à condition que le prix soit >= à 0.
Avec ADRESSE, tu constitue la référence de ta plage (1ère et dernière cellule).
INDIRECT remonte dans la formule la plage correspondante
Et donc SOMME fait la somme de chaque cellule de la plage.

Molenn
0
chris09300 Messages postés 140 Date d'inscription lundi 9 juin 2008 Statut Membre Dernière intervention 18 avril 2012 1
5 mai 2010 à 13:02
bonjour et merci pr ta reponse
j'ai mis la formule en B7 et les valeur sont en B13 et a suivre.
le resultat est o, est ce que tu comprend pourquoi.

0





1000
150
1205
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
5 mai 2010 à 15:32
Effectivement, ça donne 0. Mais tu as aussi une erreur avec qu'il faudrait signaler
Tu as une erreur : "référence circulaire". Parce que ta formule se situe dans la plage de la fonction EQUIV.
De plus, la fonction EQUIV suppose l'existence d'une simili "matrice". Il ne doit pas y avoir de ligne vide après une cellule remplie. Ta formule étant dans la colonne, EQUIV remontera toujours la ligne 7.

1ère solution : Mettre ta formule dans n'importe quelle autre colonne de ton fichier.

2ème solution : Tu modifies la plage de ta fonction EQUIV, par ex.

=SOMME(INDIRECT(ADRESSE(13;2) & ":" & ADRESSE(EQUIV(0;B13:B65536;-1)+12;2)))

J'ai mis 65536 parce que c'est la limite d'EXCEL avant XL2007. A toi de voir combien de ligne tu penses que ton fichier pourrait contenir pour paramétrer si besoin.

Molenn
0
chris09300 Messages postés 140 Date d'inscription lundi 9 juin 2008 Statut Membre Dernière intervention 18 avril 2012 1
5 mai 2010 à 19:42
Je n'arrive pas a comprendre ce que fait la formule.
sur une feuille ca marche et j'ai fait un autre essai sur une feuille ou ja met la formule en B12 et las valeur en D16. Cela me donne un resultat farfelu. Peux tu m'expliquez pas a pas la formule, excuse moi d'user de ta patience. Une fois resolu le prob, j'en aurais un autre du meme type. Mais cela je verrais apres si cela ne t'ennui pas. merci
0
chris09300 Messages postés 140 Date d'inscription lundi 9 juin 2008 Statut Membre Dernière intervention 18 avril 2012 1
6 mai 2010 à 14:14
bonjour et merci pour tes explications. Ca me parait tres clair. bonne journee a toi et encore merci
0
Rejoignez-nous