Longueur de formule - Simplification.

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.
chtom
Fraîchement OOthentifié
Messages : 3
Inscription : 28 juin 2006 08:24

Longueur de formule - Simplification.

Message par chtom »

Bonjour,

J'ai des formules à rallonges.
J'ai l'impression que l'on est limité à 450 caractères.

En fait j'ai X fois la même formule. Comment faire pour m'en sortir ?
On peux pas créer ses propres formules ?

La formule utilisée est la suivante :
SI(NBCAR(CELLULE1)>0;SI(NBCAR(CELLULE2>0;SI(CELLULE1>CELLULE2;1;0);0);0)+
..... +
SI(NBCAR(CELLULEX)>0;SI(NBCAR(CELLULEX+1>0;SI(CELLULEX>CELLULEX+1;1;0);0);0)

Si je pouvais faire ca je serais sauvé... (c de l'algo car le basic c'est l'inconnu pour moi)

Code : Tout sélectionner

Fonction Resultat(Cellule1, Cellule2)
debut
   sous_resultat = 0
   si cellule1 n'est pas vide et que cellule2 n'est pas vide alors
    si cellule1 > cellule2 alors
      sous_resultat = 1
   Resultat = sous_resultat
fin
Ainsi, j'affecte maintenant à la celulle resultat :
=Resultat(A1,A2)+Resultat(B2,B3) + Resultat(C3,C4) + .... Resultat(XX,YY)

Peut-on faire ce genre de chose avec Calc ?

Merci
Windows
OpenOffice 1.0.6
OpenOffice 2.0
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Message par bm92 »

Je suppose que tu compares les valeurs de ligne 1 et 2, colonne à colonne jusqu'à la colonne Z.

Crée une ligne, disons ligne 20, avec dans la cellule A20
=SI(NBCAR(A1)>0;SI(NBCAR(A2)>0;SI(A1>A2;1;0);0);0)

Copie la cellule A20 dans la zone B20:Z20 (les références s'ajustent)
Ton résultat est la somme des valeurs de la zone A20:Z20
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

En complément à la solution donnée par bm92

Bonjour

Oui on peut faire cela avec Calc. La syntaxe pourrait être celle-ci :

Code : Tout sélectionner

Function PysResultat(Cellule1, Cellule2)

PysResultat = 0

if Cellule1 <> 0 then 'cellule1 n'est pas vide
	if Cellule2 <> 0 then 'cellule2 n'est pas vide
    	if Cellule1 > Cellule2 then
	      PysResultat = 1
	     end if
   end if
end if

end function
Cela ressemble furieusement à ton algo. Puisqu'on y est, ceci peut être simplifié de la manière suivante :

Code : Tout sélectionner

Function PysResultat2(Cellule1, Cellule2)

PysResultat2 = 0

if Cellule1 <> 0 and Cellule2 <> 0 and Cellule1 > Cellule2 then
	PysResultat2 = 1
end if

end function
En effet, si j'ai bien compris, la fonction ne doit retourner 1 que quand les 3 conditions sont vérifiées...

Pour mettre en oeuvre ces fonctions :
  • Ouvrir le classeur concerné
    Lancer Outils Macros Gérer les macros OpenOffice.org Basic
    S'affiche un dialogue avec à gauche une arborescence commençant par «mes macros», puis «macros OpenOffice.org», puis le nom du document. Cliquer devant ce dernier sur le «+» pour faire apparaître «Standard».
    Cliquer sur le bouton «Nouveau», OOo propose «module1», valider ou donner un nom plus personnalisé.
On se retrouve alors dans une nouvelle fenêtre nommée EDI (environnement de développement intégré) avec par défaut une procédure « Main ». Il est possible de supprimer ces lignes.
Coller le texte des fonctions données ci-dessus : elles sont désormais disponibles dans le classeur en les appelant exactement comme tu le suggères sauf que le séparateur entre les arguments est ";" comme pour les autres fonctions Calc.

Si on veut que ces fonctions soient disponibles dans tous les documents, il suffit de faire la même manipulation en collant cette fois les fonctions dans la bibliothèque Standard du premier item de l'arborescence évoquée ci-dessus : « mes macros ».