[Résolu] Fonction PRODUIT puis SOMME

Discussions à propos du tableur Calc.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

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.
Répondre
Guillaume85
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 24 août 2006 18:38

[Résolu] Fonction PRODUIT puis SOMME

Message par Guillaume85 »

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... :)
Open Office 2.2.1 Windows XP
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 16:15
Localisation : Paris
Contact :

Message par cris59 »

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

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
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
Dernière modification par cris59 le 25 août 2006 11:14, modifié 1 fois.
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
Guillaume85
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 24 août 2006 18:38

Messages d'erreur

Message par Guillaume85 »

Voilà ce que j'ai rentré :

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
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.
Open Office 2.2.1 Windows XP
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Message par Dude »

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
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 16:15
Localisation : Paris
Contact :

Message par cris59 »

Correctif pour ta fonction

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 
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
Dernière modification par cris59 le 25 août 2006 11:17, modifié 1 fois.
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 16:15
Localisation : Paris
Contact :

Message par cris59 »

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 :

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
que tu appelles par

=LASOMPROD(2;4;C2:FQ4)


cris59
Dernière modification par cris59 le 26 août 2006 06:01, modifié 1 fois.
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
Guillaume85
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 24 août 2006 18:38

Voici le fichier

Message par Guillaume85 »

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.
Open Office 2.2.1 Windows XP
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Message par Pierre-Yves Samyn »

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 ?
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 16:15
Localisation : Paris
Contact :

Message par cris59 »

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

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
=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
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
Guillaume85
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 24 août 2006 18:38

REMERCIEMENTS

Message par Guillaume85 »

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 :D



Guillaume
Open Office 2.2.1 Windows XP
Guillaume85
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 24 août 2006 18:38

RESOLU

Message par Guillaume85 »

A+
Open Office 2.2.1 Windows XP
Répondre