[Résolu] Fonction PRODUIT puis SOMME
Modérateur : Vilains modOOs
Règles du forum
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
-
- NOOuvel adepte
- Messages : 11
- Inscription : 24 août 2006 16:38
[Résolu] Fonction PRODUIT puis SOMME
Bonjour,
Voilà mon problème :
J'ai un tableau avec 133 colonnes et presques autant de lignes.
Je veux calculer la somme des produits :
=C4*C2+D4*D2+E4*E2+F4*F2.... et comme ça jusqu'à la colonne FQ
Et non pas SOMMPROD (C4:FQ4;C2:FQ2)
Connaissez-vous une formule qui puisse me simplifier la vie ?
Je vous remercie d'avance et espère vivement que quelqu'un va me donner une solution parce qu'autre il y a du temps à passer...
Voilà mon problème :
J'ai un tableau avec 133 colonnes et presques autant de lignes.
Je veux calculer la somme des produits :
=C4*C2+D4*D2+E4*E2+F4*F2.... et comme ça jusqu'à la colonne FQ
Et non pas SOMMPROD (C4:FQ4;C2:FQ2)
Connaissez-vous une formule qui puisse me simplifier la vie ?
Je vous remercie d'avance et espère vivement que quelqu'un va me donner une solution parce qu'autre il y a du temps à passer...
Open Office 2.2.1 Windows XP
-
- Membre enthOOusiaste
- Messages : 482
- Inscription : 20 mars 2006 15:15
- Localisation : Paris
Tu peux définir une fonction ...
Dans la bibliothèque "Standard" de "Mes Macros et boites de dialogues", tu écris ta fonction et tu l'appelles comme une fonction classique
tu appelles ta fonction par =LASOMPROD(3;1) qui correspond à ton exemple =C4*C2+D4*D2+E4*E2+F4*F2....
J'ai été jusqu'à L, toi tu mets l'index correpondant à FQ
Fais attention le séparateur est une virgule dans la fonction, mais il faut un point-virgule à l'appel de la fonction dans la cellule
cris59
Dans la bibliothèque "Standard" de "Mes Macros et boites de dialogues", tu écris ta fonction et tu l'appelles comme une fonction classique
Code : Tout sélectionner
Function LASOMPROD(a,b)
maFeuille = thisComponent.Sheets.getByIndex(0)
laSomme = 0
For i = 2 to 11 'colonne C à L, l'index des colonnes commence à 0
leProd = maFeuille.getCellByPosition(i, a).getValue() * maFeuille.getCellByPosition(i, b).getValue()
laSomme = laSomme + leProd
next i
LASOMPROD = laSomme
End Function
J'ai été jusqu'à L, toi tu mets l'index correpondant à FQ
Fais attention le séparateur est une virgule dans la fonction, mais il faut un point-virgule à l'appel de la fonction dans la cellule
cris59
Dernière modification par cris59 le 25 août 2006 09:14, modifié 1 fois.
-
- NOOuvel adepte
- Messages : 11
- Inscription : 24 août 2006 16:38
Messages d'erreur
Voilà ce que j'ai rentré :
Les messages d'erreur suivants apparaissent :
- lorsque je lis le programme dans Oobasic, blocage à la ligne commençant par maFeuille
"Runtime error BASIC"
"Propriété ou méthode introuvable"
- lorsque j'éxécute la Macro, blocage à la ligne commençant par leProd
"Runtime error BASIC"
"L'argument n'est pas facultatif"
PS : Je ne connais pratiquement rien en programmation. J'ai vu ça à l'école mais mes connaissances sont faibles.
Merci d'avance pour votre aide.
Code : Tout sélectionner
Function LASOMPROD(a,b)
maFeuille = thisComponent.Sheets.getByIndex(0)
laSomme = 0
For i = 3 to 135 'colonne C à FQ, l'index des colonnes commence à 0
leProd = maFeuille.getCellByPosition(i, a).getValue() * maFeuille.getCellByPosition(i, b).getValue()
laSomme = laSomme + leProd
next i
LASOMPROD = laSomme
End Function
- lorsque je lis le programme dans Oobasic, blocage à la ligne commençant par maFeuille
"Runtime error BASIC"
"Propriété ou méthode introuvable"
- lorsque j'éxécute la Macro, blocage à la ligne commençant par leProd
"Runtime error BASIC"
"L'argument n'est pas facultatif"
PS : Je ne connais pratiquement rien en programmation. J'ai vu ça à l'école mais mes connaissances sont faibles.
Merci d'avance pour votre aide.
Open Office 2.2.1 Windows XP
-
- IdOOle de la suite
- Messages : 25171
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Le mieux est encore que tu joignes un fichier contenant ta macro que l'on voit ce qui ne va pas.
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Améliorez AOO et votez pour les issues
-
- Membre enthOOusiaste
- Messages : 482
- Inscription : 20 mars 2006 15:15
- Localisation : Paris
Correctif pour ta fonction
les index commencent à 0, pour avoir la colonne C il faut mettre 2 par exemple, c'est pour cela que j'ai rajouté - 1 sur les index
Il ne faut pas lancer la macro
1. tu copies / colles la fonction dans la bibliothèque "Standard" de "Mes Macros et boites de dialogues"
2. tu fermes l'éditeur Basic
3. dans une cellule tu écris
=LASOMPROD(4;2) tu fais Entrée et tu auras le résultat
Tu utilises LASOMPROD(a;b) de la même manière que les autres fonctions de Calc
cris59
Code : Tout sélectionner
Function LASOMPROD(a,b)
maFeuille = thisComponent.Sheets.getByIndex(0)
laSomme = 0
For i = 3 to 135 'colonne C à FQ, l'index des colonnes commence à 0
leProd = maFeuille.getCellByPosition([i - 1, a - 1).getValue() * maFeuille.getCellByPosition(i - 1, b - 1).getValue()
laSomme = laSomme + leProd
next i
LASOMPROD = laSomme
End Function
Il ne faut pas lancer la macro
1. tu copies / colles la fonction dans la bibliothèque "Standard" de "Mes Macros et boites de dialogues"
2. tu fermes l'éditeur Basic
3. dans une cellule tu écris
=LASOMPROD(4;2) tu fais Entrée et tu auras le résultat
Tu utilises LASOMPROD(a;b) de la même manière que les autres fonctions de Calc
cris59
Dernière modification par cris59 le 25 août 2006 09:17, modifié 1 fois.
-
- Membre enthOOusiaste
- Messages : 482
- Inscription : 20 mars 2006 15:15
- Localisation : Paris
La fonction marche bien mais n'étant ratachée à aucune cellule elle ne se met pas à jour automatiquement si tu modifies une des valeurs concernées
Une solution :
que tu appelles par
=LASOMPROD(2;4;C2:FQ4)
cris59
Une solution :
Code : Tout sélectionner
Function LASOMPROD(a,b,c)
maFeuille = thisComponent.Sheets.getByIndex(0)
laSomme = 0
laZone = c
For i = 3 to 135 'colonne C à FQ
leProd = maFeuille.getCellByPosition(i - 1, a - 1).getValue() * maFeuille.getCellByPosition(i - 1, b - 1).getValue()
laSomme = laSomme + leProd
next i
LASOMPROD = laSomme
End Function
=LASOMPROD(2;4;C2:FQ4)
cris59
Dernière modification par cris59 le 26 août 2006 04:01, modifié 1 fois.
-
- NOOuvel adepte
- Messages : 11
- Inscription : 24 août 2006 16:38
Voici le fichier
Désolé ça ne fonctionne pas.
Peut être (sûrement) que je m'y prends mal.
Voici le fichier :
http://user.services.openoffice.org/fr/ ... 050941.ods
Merci beaucoup pour votre aide.
Peut être (sûrement) que je m'y prends mal.
Voici le fichier :
http://user.services.openoffice.org/fr/ ... 050941.ods
Merci beaucoup pour votre aide.
Open Office 2.2.1 Windows XP
-
- Grand Maître de l'OOffice
- Messages : 11276
- Inscription : 02 mai 2006 08:42
Bonjour
Ton classeur ne contenant pas la macro (je pense que tu as suivi l'excellent conseil de cris59 te proposant de coller cette macro dans la bibliothèque standard d'OpenOffice afin d'en disposer quel que soit le classeur), il est difficile de voir ce qui ne va pas...
Alors, j'ai simplement inclus la macro dans le classeur lui-même, en appelant la fonction comme le préconise cris59 et cela fonctionne parfaitement chez moi, cf. fichier joint
http://user.services.openoffice.org/fr/ ... 055247.ods
Qu'en est-il pour toi ?
Ton classeur ne contenant pas la macro (je pense que tu as suivi l'excellent conseil de cris59 te proposant de coller cette macro dans la bibliothèque standard d'OpenOffice afin d'en disposer quel que soit le classeur), il est difficile de voir ce qui ne va pas...
Alors, j'ai simplement inclus la macro dans le classeur lui-même, en appelant la fonction comme le préconise cris59 et cela fonctionne parfaitement chez moi, cf. fichier joint
http://user.services.openoffice.org/fr/ ... 055247.ods
Qu'en est-il pour toi ?
-
- Membre enthOOusiaste
- Messages : 482
- Inscription : 20 mars 2006 15:15
- Localisation : Paris
Plusieurs choses
1. OpenOffice recalcule si possible les fonctions dès que celles-ci lui sont visibles et il charge ses bibliothèques avant de charger le classeur.
Problème : lorsque la fonction est placée dans la bibliothèque "Standard" de "Mes Macros et boites de dialogues" elle fait appel aux feuilles du classeur (Sheets), il y a une erreur à l'ouverture du fichier ... le fichier n'étant pas chargé complétement, il ne peut voir les feuilles ...
Solution : placer la fonction dans un module sur le classeur lui-même
2. Vu ton fichier et ce que tu veux obtenir, je te propose la solution suivante
=LASOMPROD(2;4;C2:FQ2;C4:FQ4),
ce qui est en index 2 ne change pas (cela correspond à la ligne des coefficients), les autres doivent être le n° de ligne approprié.
=LASOMPROD(2;6;C2:FQ2;C6:FQ6) pour le total à la ligne 6
ton fichier modifié
http://user.services.openoffice.org/fr/ ... 085302.ods
cris59
1. OpenOffice recalcule si possible les fonctions dès que celles-ci lui sont visibles et il charge ses bibliothèques avant de charger le classeur.
Problème : lorsque la fonction est placée dans la bibliothèque "Standard" de "Mes Macros et boites de dialogues" elle fait appel aux feuilles du classeur (Sheets), il y a une erreur à l'ouverture du fichier ... le fichier n'étant pas chargé complétement, il ne peut voir les feuilles ...
Solution : placer la fonction dans un module sur le classeur lui-même
2. Vu ton fichier et ce que tu veux obtenir, je te propose la solution suivante
Code : Tout sélectionner
Function LASOMPROD(a,b,c,d)
REM appel dans la cellule par =LASOMPROD(2;4;C2:FQ2;C4:FQ4)
laSomme = 0
leCoef = c
laZone = d
maFeuille = thisComponent.Sheets.getByIndex(0)
For i = 3 to 174 'colonne C à FQ
leProd = maFeuille.getCellByPosition(i - 1 , a - 1).getValue() * maFeuille.getCellByPosition(i - 1, b - 1).getValue()
laSomme = laSomme + leProd
next i
LASOMPROD = laSomme
End Function
ce qui est en index 2 ne change pas (cela correspond à la ligne des coefficients), les autres doivent être le n° de ligne approprié.
=LASOMPROD(2;6;C2:FQ2;C6:FQ6) pour le total à la ligne 6
ton fichier modifié
http://user.services.openoffice.org/fr/ ... 085302.ods
cris59
-
- NOOuvel adepte
- Messages : 11
- Inscription : 24 août 2006 16:38
REMERCIEMENTS
Grand merci à tous pour votre aide.
Vous m'enlever une belle épine du pied.
Christine, je ne manquerais pas de te faire de la pub auprès de mes supérieurs dès que l'occasion se présentera.
A la prochaine
Guillaume
Vous m'enlever une belle épine du pied.
Christine, je ne manquerais pas de te faire de la pub auprès de mes supérieurs dès que l'occasion se présentera.
A la prochaine
Guillaume
Open Office 2.2.1 Windows XP