[Résolu][Calc] Paramètre optionnel et fonction IsMissing

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Elicul15
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 09 févr. 2007 10:21

[Résolu][Calc] Paramètre optionnel et fonction IsMissing

Message par Elicul15 »

Bonjour à tous,

Je cherche à créer une procédure (Sub) avec un paramètre optionnel et j'ai un comportement bizarre de la fonction IsMissing
Si j'ai bien compris, cette fonction devrait tester l'existence du paramètre sLeNomDuBop dans l'appel à ma procédure, mais que je l'appelle avec ou sans paramètre, le résultat de IsMissing est systématiquement égal à False, et je tombe sur une erreur sur la suite du programme si j'appelle ma procédure sans paramètre.

Merci des pistes que vous pourrez m'apporter.

Code : Tout sélectionner

Sub ColorPicker(Optional sLeNomDuBOP)

	if IsMissing(sLeNomDuBOP) Then
		sLeNomDuBOP = ""
		msgbox ("sLeNomDuBOP est manquant")
	else
		msgbox ("sLeNomDuBOP n'est pas manquant")
	EndIf
	msgbox("|" & sLeNomDuBOP & "|")
End Sub

'_____ColorPicker("Une chaine") se déroule bien et m'affiche |Une chaine|
'_____ColorPicker() donne une erreur à la sortie du If
Dernière modification par Elicul15 le 31 oct. 2019 10:05, modifié 1 fois.
Win 10 - LiBo 6.0.7.2 (x64 - Obligation de version)
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12228
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: [Calc] Problème avec la fonction IsMissing

Message par Bidouille »

Inscrit depuis plus de 10 ans sur ce forum, on vous rappelle que "problème" est inutile dans un titre.
Toutes les questions sont forcément des problèmes et demandent de l'aide.
Pour la qualité de la base de connaissances, veillez à ne pas employer de terme implicite.
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Paramètre optionnel et fonction IsMissing

Message par Dude »

Salut,
Elicul15 a écrit :cette fonction devrait tester l'existence du paramètre sLeNomDuBop
Comme sLeNomDuBop n'est pas typé, comment penses-tu que le compilateur l'interprète ?
Sers-toi de XRay pour voir ce que tu reçois.

Comme d'habitude, avec 10 pauvres lignes de code, il faudrait deviner tout un contexte(*).



(*) Fournir le contexte signifie joindre un document explicatif et exhaustif permettant de comprendre la problématique.
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Calc] Paramètre optionnel et fonction IsMissing

Message par joel275 »

Bonjour,

si je teste ta procédure avec

Code : Tout sélectionner

Sub Main
dim sLeNomDuBOP
	sLeNomDuBOP = "0"
	ColorPicker(sLeNomDuBOP)
	ColorPicker()
End Sub

Sub ColorPicker(Optional sLeNomDuBOP)

   if IsMissing(sLeNomDuBOP) Then
      sLeNomDuBOP = ""
      msgbox ("sLeNomDuBOP est manquant")
   else
      msgbox ("sLeNomDuBOP n'est pas manquant")
   EndIf
   msgbox("|" & sLeNomDuBOP & "|")
End Sub
tout fonctionne comme attendu....

A plus.
A jour de LibreOffice et de Ubuntu
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Calc] Paramètre optionnel et fonction IsMissing

Message par OOotremer971 »

Bonjour,
joel275 a écrit :tout fonctionne comme attendu....
Je confirme en testant de la sorte :

Code : Tout sélectionner

Sub Main
ColorPicker("Une chaine")
ColorPicker()
End Sub

Sub ColorPicker(Optional sLeNomDuBOP)
if IsMissing(sLeNomDuBOP) Then
	sLeNomDuBOP = ""
	msgbox ("sLeNomDuBOP est manquant")
else
	msgbox ("sLeNomDuBOP n'est pas manquant")
End If
	msgbox("|" & sLeNomDuBOP & "|")
End Sub
Tout fonctionne correctement. Regarde si tu n'as pas des doublons dans le nom de tes macros, dans mes macros ou dans un autre module du fichier par hasard.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Elicul15
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 09 févr. 2007 10:21

Re: [Calc] Paramètre optionnel et fonction IsMissing

Message par Elicul15 »

Bonjour,

Merci de vos réponses et remarques.
Après les réponses de OOotremer971 et Joel275, j'ai effectué d'autres tests.

Effectivement, l'appel depuis une autre procédure fonctionne.

L'erreur se produit lorsque j'appelle ma procédure directement depuis un bouton sur la feuille Depuis Bouton (les copies d'écrans sont également sur la feuille).
Dude a écrit :Comme sLeNomDuBop n'est pas typé, comment penses-tu que le compilateur l'interprète ?
Sers-toi de XRay pour voir ce que tu reçois.
Lorsque je teste la variable avec XRay, voici ce que j'obtiens
XRay_sLeNomDuBop.png
Comment puis-je transformer cette variable en chaine vide ?

D'avance merci encore pour vos éclairages.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Win 10 - LiBo 6.0.7.2 (x64 - Obligation de version)
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Calc] Paramètre optionnel et fonction IsMissing

Message par joel275 »

Bonjour,

quand tu déclenches une macro par un bouton (ou autre chose), le système transmet un "évènement" qui est tout autre que la variable que tu as nommé ailleurs dans ton code. D'ailleurs XRay te l'écrit en toutes lettres dans son compte rendu.
Je ne pense pas que tu puisses transmettre en basic une variable personnelle à une macro déclenchée par un bouton.

A plus.
A jour de LibreOffice et de Ubuntu
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Calc] Paramètre optionnel et fonction IsMissing

Message par OOotremer971 »

Bonjour,

Il faudrait que tu expliques exactement ce qu'est sensé faire ce bouton. S'il faut s'assurer qu'un non est bien renseigné quelque part dans le fichier, il faut d'abord lancer (à partir du bouton) une procédure qui va à la cellule souhaitée pour récupérer son contenu, en l'occurrence sLeNomDuBOP, puis le passer en argument à la sub ColorPicker

Code : Tout sélectionner

Sub Main
sLeNomDuBOP = Thiscomponent.Sheets(0).GetCellRangeByName("A1").String
ColorPicker(sLeNomDuBOP)
End Sub
Tu appelles ta sub Main avec le bouton. Si la cellule A1 de la feuille1 contient un nom il sera passé en argument à ta sub ColorPicker sinon tu recevras le message disant que le nom est manquant.

A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Elicul15
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 09 févr. 2007 10:21

Re: [Calc] Paramètre optionnel et fonction IsMissing

Message par Elicul15 »

OOotremer971 a écrit :Il faudrait que tu expliques exactement ce qu'est sensé faire ce bouton. S'il faut s'assurer qu'un non est bien renseigné quelque part dans le fichier, il faut d'abord lancer (à partir du bouton) une procédure qui va à la cellule souhaitée pour récupérer son contenu, en l'occurrence sLeNomDuBOP, puis le passer en argument à la sub ColorPicker

Tu appelles ta sub Main avec le bouton. Si la cellule A1 de la feuille1 contient un nom il sera passé en argument à ta sub ColorPicker sinon tu recevras le message disant que le nom est manquant.
En fait, la procédure ColorPicker(Optional sLeNomDuBop) me sert à coloriser des feuilles (par le biais d'une modification de styles)
La plage de couleur autorisée est saisie sur la feuille param qui sera masquée

Si je l'appelle sans paramètre, ma procédure colorise les feuilles existantes
Si je l'appelle avec un paramètre, ma procédure inscrit le nom du bop dans la première cellule libre
joel275 a écrit :Bonjour,
quand tu déclenches une macro par un bouton (ou autre chose), le système transmet un "évènement" qui est tout autre que la variable que tu as nommé ailleurs dans ton code. D'ailleurs XRay te l'écrit en toutes lettres dans son compte rendu.
Je ne pense pas que tu puisses transmettre en basic une variable personnelle à une macro déclenchée par un bouton.
Je vais donc passer par une procédure qui appelle ColorPicker()

Code : Tout sélectionner

Sub ColorExist()
    ColorPicker()
End Sub
et affecter cette nouvelle procédure à mon bouton.

Merci à vous pour ces informations, pour moi ce post est résolu.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Win 10 - LiBo 6.0.7.2 (x64 - Obligation de version)