[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 !

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

Messagepar Elicul15 » 30 Oct 2019 13:35

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   AgrandirRéduire
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 édition par Elicul15 le 31 Oct 2019 11:05, édité 1 fois.
Win 10 - LiBo 6.0.7.2 (x64 - Obligation de version)
Elicul15
Membre lOOyal
Membre lOOyal
 
Message(s) : 35
Inscrit le : 09 Fév 2007 11:21

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

Messagepar Bidouille » 30 Oct 2019 15:35

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
Bidouille
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 10216
Inscrit le : 08 Nov 2005 17:23
Localisation : Brest, France

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

Messagepar Dude » 30 Oct 2019 15:58

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.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21122
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

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

Messagepar joel275 » 30 Oct 2019 20:20

Bonjour,

si je teste ta procédure avec
Code : Tout sélectionner   AgrandirRéduire
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.
OpenOffice 4.1.2 LibreOffice 6-2-8-2 Windows 8.1
joel275
PassiOOnné
PassiOOnné
 
Message(s) : 745
Inscrit le : 10 Jan 2009 09:05

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

Messagepar OOotremer971 » 31 Oct 2019 02:25

Bonjour,
joel275 a écrit:tout fonctionne comme attendu....

Je confirme en testant de la sorte :
Code : Tout sélectionner   AgrandirRéduire
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
Ubuntu
OpenSuse Leap
Avatar de l’utilisateur
OOotremer971
HédOOniste
HédOOniste
 
Message(s) : 2145
Inscrit le : 16 Avr 2010 14:31

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

Messagepar Elicul15 » 31 Oct 2019 09:29

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
XRay depuis appel bouton


Comment puis-je transformer cette variable en chaine vide ?

D'avance merci encore pour vos éclairages.
Pièces jointes
Parametres_Optionnels_et_IsMissing.ods
Macros et résultats
(63.08 Kio) Téléchargé 3 fois
Win 10 - LiBo 6.0.7.2 (x64 - Obligation de version)
Elicul15
Membre lOOyal
Membre lOOyal
 
Message(s) : 35
Inscrit le : 09 Fév 2007 11:21

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

Messagepar joel275 » 31 Oct 2019 10:22

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.
OpenOffice 4.1.2 LibreOffice 6-2-8-2 Windows 8.1
joel275
PassiOOnné
PassiOOnné
 
Message(s) : 745
Inscrit le : 10 Jan 2009 09:05

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

Messagepar OOotremer971 » 31 Oct 2019 10:24

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   AgrandirRéduire
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
Ubuntu
OpenSuse Leap
Avatar de l’utilisateur
OOotremer971
HédOOniste
HédOOniste
 
Message(s) : 2145
Inscrit le : 16 Avr 2010 14:31

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

Messagepar Elicul15 » 31 Oct 2019 11:05

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   AgrandirRéduire
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.
Pièces jointes
Forum_OOo.ods
Après modif suite à vos indications
(29.06 Kio) Téléchargé 2 fois
Win 10 - LiBo 6.0.7.2 (x64 - Obligation de version)
Elicul15
Membre lOOyal
Membre lOOyal
 
Message(s) : 35
Inscrit le : 09 Fév 2007 11:21


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 6 invité(s)