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 AgrandirRéduire
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/ci-joint/fichier/2006/08/26-085302.ods
cris59