De programmation sur feuille Calc

Bonjour. Nouveau ici. Je voudrai savoir comment on fait pour faire des tests dans une cellule de feuille Calc afin d’aller vers différentes autres cellules suivant le résultats des tests ? Merci de votre aide. Je débute…alors beaucoup de détails SVP (j’ai 76 ans !) Merci. COMMENT ON FAIT et non commenter le fait !

Bonjour @Lannee

Il faudrait peut-être préciser ta question car un tableur ne fonctionne pas tel que tu le demandes (ou comme je comprends ta question).

Ce qui est possible c’est de générer un lien hypertexte (un texte cliquable) en fonction du résultat d’un calcul, d’un test. On utilise pour cela la fonction LIEN.HYPERTEXTE() décrite dans cette page d’aide.

Autrement dit, on peut créer un lien qui ira vers telle ou telle destination quand on cliquera sur le lien, la destination étant “calculée” d’après le résultat du test.

Dans l’exemple joint en Feuille1.A1 la formule :

=LIEN.HYPERTEXTE("#Feuille"&B1;"Feuille"&B1)

Le premier paramètre est l’url, la destination voulue. Elle est le résultat du “calcul” consistant à ajouter derrière le mot “Feuille” le contenu de la cellule B1. Autrement dit, si on saisit 2 en B1 le mot devient Feuille2 qui est le nom d’une des feuilles du classeur.
Pour que Calc “comprenne” qu’il s’agisse d’une url on doit ajouter devant le signe #.

Le deuxième paramètre fait le même “calcul”, simplement pour afficher le texte de la destination. Ce pourrait être tout à fait autre chose…

lien.ods (8,1 Ko)

Cordialement

bonjour,

“beaucoup de détails” … oui … mais, seulement, si vous donnez tous vos détails ! :slight_smile: … (je n’ai “que” 68 ans et je vous comprends ! :slight_smile: )

une solution (y en a t-il d’autres?) passerait par la programmation de “macro”. Vous connaissez ? Ce serait possible dans le cadre de votre projet ?

avec une “macro” vous pouvez détecter les changements dans les cellules en actionnant la macro avec l’évènement enregistré à partir de la ligne des noms de feuilles (bouton de droite), évènement “changement de contenu” (le dernier, je ne sais pas comment c’est en français, mon L.O. parle portugais!) … mais auparavant il faut avoir créé la macro qui va tester quelle cellule est active, retrouver son contenu puis déterminer la cellule à sélectionner.

si cette solution est envisageable, si besoin je peux (comme d’autres) vous aider pour l’écriture de la macro.

bon courage !
Philippe

Bonjour PYS. Je viens de tester différentes formules en Hypertexte (que je ne connaissais pas !) et je vous les envoie en pièces jointes avec la feuille de mon calcul (sur Calc de Apache Open Office 4.1.11). Comme vous pourrez le voire, je n’arrive pas à trouver le moyen de faire un test et suivant le résultat de ce test aller dans une (ou plusieurs) autre cellule pour continuer différents autres calculs suivant ce test. Avez-vous une idée à me passer ? Ou bien c’est moi qui n’écrit pas les formules dans le bon language. Merci de votre aide.

Désolé j’ai oublié les pièces jointes !!! Les voici !!

Programme JJ MEEUS 5.ods (27.9 KB)

Lien de yclik 1.odt (56.4 KB)

J’ai déjà indiqué que cela ne fonctionne pas comme cela. On n’est amené sur une autre cellule que si on clique sur un lien hypertexte. Ce dernier pouvant être calculé comme indiqué précédemment.

Bonjour Phillipplévi. Hô comme ce serait super si vous pouviez m’aider à l’écrire cette fichue macro !!: Je n’en ai encore jamais fait ! Avec déjà un exemple, je pense que je m’en sortirai mais avec beaucoup de détails (j’adoooore les détails !!!). Pour tout dire j’ai déjà fait un programme sur une calculette Casio Graph 100 programmable mais je voulais transposer ça sur mon ordi sur Calc de Apache Open Office. Ce programme calcule quel Jour Julien correspond à telle date X. Vous pouvez perdre quelques temps pour cela ? Merciiiiiiii !!! Je vous joints deux fichiers.

Programme JJ MEEUS 5.ods (27.9 KB)

Lien de yclik 1.odt (56.4 KB)

pas de problème … je regarde et vous retourne un peu plus tard (j’ai un décalage horaire de 6 heures avec la France métropolitaine!) …

là j’ai besoin de vos éclairages !

j’ai vu les 2 documents … mais je ne comprends pas vraiment ce que vous voulez faire !!

pouvez-vous essayer d’être plus “précis” ? par exemple quand vous écrivez “Or, ce que je veux c’est que les résultats m’amènent dans d’autres cellules” … cela ne veut rien dire! Vous allez, de toutes façons, rester sur votre chaise ! :slight_smile: … vous me comprenez !

pouvez-vous passer un exemple (ou plusieurs) de déroulement des opérations en ne parlant pas de vous mais de cellules, de curseur et, si, éventuellement de vos interventions (je clique sur la cellule Xn ou j’écris dans telle autre cellule) ?

Ne serait-ce pas suffisant de mettre des formules différentes dans les différentes cellules!
par exemple dans une cellule =SI(C7<=1582,1014;SOMME(…);"")
et dans une autre cellule =SI(C7>1582,1014;"";SOMME(…))
si vous changez C7 les deux cellules seront mises à jour, l’une avec un valeur et l’autre en blanc (par exemple)

Mais n’utilisez pas des “m’amène” dans vos explications ! :wink:

Attention !
=SE(C7>1582,1014;HIPERLINK("#Feuille.E"&“7”);HIPERLINK(SOMA(C4;C6)))
ceci n’a pas vraiment de sens ! …
cette fonction va soit écrire un lien dans la cellule ou ??? … créer un lien avec une somme de cellule ne va pas fonctionner !
le résultat de la fonction sera de toutes falons écrit dans la cellule où est la fonction. (c’est pour cela que je vous ai passé l’idée d’écrire des formules “complémentaires” dans des cellules différentes).
utiliser HIPERLINK va écrire le lien dans la cellule de la formule. ce que vous pourrez en faire c’est de Ctrl-cliquer dessus, ce qui déplacera le curseur vers le contenu du lien.

si vous avez des doutes … n’hésitez pas ! Vous voulez des détails … envoyez des informations les plus précises possibles ! :wink:

Philippe

Bonsoir Phillipe. Bon, bah c’est moi qui m’exprime mal, alors. Je vais donc vous expliquez pas à pas : j’ai une date (le 14 Mai 1985). Je prends donc le nombre 1985 dans la cellule C7 . Je veux tester ce nombre dans la cellule D4 (par exemple). J’écrit donc la formule “=SI(C7<=1582,1014;” (représentant l"année 1582 le 14 Octobre). Donc, si C7 est plus petit ou égal à cette date, je veux aller à la cellule F8 (automatiquement ! sans rien toucher !) pour y faire des calculs se rapportant à cette date. Si C7 est plus grand que cette date (1582,1014) je veux aller à la cellule E8 (automatiquement ! sans toucher au curseur, à la souri) pour y faire d’autres calculs différents. Dans ces deux autres cellules (F8 et E8) il y aura d’autres tests sur d’autres nombres (comme les mois ou les jours) qui, (ces autres tests là) renverront encore à d’autres cellules pour y faire encore d’autres calculs.

Tout ça pour calculer le nombre du Jour Julien de cette date (le 14 Mai 1985). Capito ? Je sais, c’est un peu compliqué, mais j’ai bien réussi à faire ce programme dans ma calculette Casio Graph 100 programmable quand j’avais encore (seulement) 57 ans en 2003. Et maintenant je voudrai faire ce même programme sur Calc de Apache Open Office 4.1.11 ou sur le tableur de Libre Office 7.3. Merci de me dépanner, si vous pouvez, moi, j’ai presque tout essayé et je n’y arrive pas. Très amicalement .

  1. pas de souci … si vous l’avez fait avec la Casio, on va y arriver avec Calc, avec ou sans macro ! (et de préférence sans !)
  2. je regarde cela tout à l’heure … réponse demain (jeudi) matin !

Philippe

en annexe une solution ! avec un détail à régler encore ! il y a d’autre façon de faire ! Par exemple j’ai trouvé une formule “mathématique” qui résout le calcul et que l’on pourrait implémenter plus tard !
j’ai trouvé la formule du calcul de la date julienne et je m’en suis servi.
j’ai mis des notes dans la feuille
dans la feuille, tout commence à la date et heure en C3

je crois que vous n’avez pas saisi la “logique” des feuilles de calcul ! Vous avez décrit ce qui pourrait être un algorithme classique de programmation. cela ne s’applique pas aux feuilles de calcul.

regardez ce que j’ai fait. essayer de comprendre cette “logique” ! si vous avez des doutes, n’hésitez pas !

date_julien.ods (17.6 KB)

Bonjour Phillipe. Je vois que vous avez trouver ce que j’ai mis dans ma Casio (a très peu de choses près). Je vais essayer de mettre tout votre modèle dans une feuille Calc (ou Libre Office) pour voire si j’arrive à le faire fonctionner mais j’ai un doute sur la continuité du “pas à pas” sur une feuille Calc ? Comment ça fonctionne ? Moi, dans mes feuilles de calcul, je rentre des nombres dans des cellules, je rentre des formules de SOMME, de PRODUIT, de QUOTIENT, pour une plage donnée, etc…etc…mais ça ne va pas de cellule en cellule comme des instructions qui se suivent ! La formule (dans une cellule) affiche le résultat et c’est tout ! Rien ne se passe après l’affichage ! Dans la Casio, quand on lance le programme, tout se passe automatiquement après avoir rentrer les données demandées. Dès que l’on appuie sur “EXE” le résultat s’affiche. Ici dans une feuille Calc, on va entrer une date dans la case voulue et…après ??? Tout va se faire comme dans la Casio ??? Enfin, je vais faire ce que j’ai dit plus haut : je vais entrer le modèle que vous m’avez joint et je vais bien voir ce qui se passe !! A + Merci beaucoup.

Bonjour Phillipe. Je suis en train de recopier le programme sur une feuille de Libre Office. Il me reste un seul souci : pourquoi y-a-t il deux fois de suite “>0” dans la formule du calcul de B . Savoir : “=SI(DATEVAL(_MA_DATE) - DATEVAL(_D1582)>0>0;…” (?) Le reste , pas de problème !!

IMPORTANT : j’ai oublié de vous le signaler (il était bien tard quand j’ai terminé!) mais votre tableur n’est pas en mode de calcul automatique! Pour le passer dans ce mode, les formules sont recalculées quand vous faites une modification, vous devez aller dans le menu

Données / Calculer / Calcul automatique

(ou quelque chose dans le genre, car mon L.O. est en portugais! voir image)

sur la formule que vous indiquez, même chose … l’heure tardive ! aucune raison d’avoir ce >0>0 !!! c’est un mauvais copier/coller qui est coupable !
vous pouvez changer la formule comme ceci

=SI(DATEVAL(_MA_DATE) - DATEVAL(_D1582)>0 ; …
par
=SI(DATEVAL(_MA_DATE) > DATEVAL(_D1582) ; …

si vous ne souhaitez pas faire de calcul pour des dates antérieurs à 15/10/1582 vous pouvez simplifier le tout !

que pouvez-vous me dire sur cette ligne en rouge que j’ai trouvée bien étrange ?

bien à vous, bonne continuation
Philippe

Bon, alors, ça à l’air de fonctionner comme il faut. Il y a encore quelques problèmes. Je m’efforce de les résoudre et je vous recontact une fois résolu. Mais d’ores et déjà mille fois merci. Je progresse énormément grâce à vous ! A + amicalement.

je veux bien quand même savoir ce que vous avez fait du cas “Si MM >2 alors ignorer calculs de A et B” ! En fait j’aimerais le calcul complet ! :slight_smile:

N’hésitez pas en cas de besoin !

Bonne continuation,
Philippe

Oui, oui, Phillipe, je m’en occupe ! Quand j’aurai remis tout ça au clair je vous enverrai en pièce jointe ma feuille Libre Office. Vous verrez, il y aura quelques changements ! (hihihiiii) Non, sans rigoler je sue à calculer !!

Oui, je pense que c’est ça. Si la date est inférieure au 15 Octobre 1582, il est certainement inutile de calculer A et B. Mais comment tester cette date (inférieure ou égale au 10 Octobre 1582) puisqu’on ne peut pas écrire ces dates à la française ou en décimale (Ni 15/10/1582 ni 1582,1015).

Par exemple " =SI(1582…)<…;…; " C’est à dire : Si 1582 10 15 est plus petit que…alors on fait … etc…

j’ai vérifié que l’on peut écrire dans une cellule =“1234-01-01” et la manipuler correctement avec les formules de date. je ne comprends pas bien où vous voyez un problème! :slight_smile:

mais si vous ne pensez pas travailler avec des dates inférieures à 1582-10-15 alors simplifier les formules !

à plus,
Philippe