IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Question optionnal dans les paramètres d'une fonction


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Points : 53
    Points
    53
    Par défaut Question optionnal dans les paramètres d'une fonction
    Bonjour,

    Je suis débutant en VBA et je souhaite savoir comment régler le problème.
    J'ai deux fonction
    function1(par1 as Worksheet,par2 as Integer)
    function2(par1 as Worksheet,par3 as Integer)
    La différence entre function1 et function2 ne réside qu'autour d'une seule instruction
    La bonne idée est de faire
    function3(par1 as Worksheet, optionnal par2 as Integer, optionnal par3 as Integer)

    Mais comment faire pour que l'on puisse uniquement faire l'appel:
    function3(par1,par2)
    ou function3(par1,par3)
    et non pas que que function3(par1)

    Merci d'avance

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Points : 53
    Points
    53
    Par défaut
    Oui mais on a le droit de faire function3(par1) et moi je n'ai pas envie qu'on est le droit...

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Et si c'est la cas Function3 retournera quoi?

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function Function3(ByVal Par1 As Integer, Optional Par2 As Variant, Optional Par3 As Variant)
    Dim S As Variant
     
    If IsMissing(Par2) And IsMissing(Par3) Then
        S = "Parameter missing"
    ElseIf IsMissing(Par2) Then
        S = Par1 * Par3
    ElseIf IsMissing(Par3) Then
        S = Par1 + Par2
    End If
    Function3 = S
    End Function
    PS: pour utiliser IsMissing, les paramètres optionnels doivent être un variant
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Points : 53
    Points
    53
    Par défaut
    Function3 retourne un variant...

    Mais n'est ce pas possible de garder par2 et par 3 en integer?

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Pour cela, il faudra donner une valeur par défaut Toujours le même exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function Function3(ByVal Par1 As Integer, Optional Par2 As Integer = -1, Optional Par3 As Integer = -1)
    Dim S As Variant
     
    If Par2 = -1 And Par3 = -1 Then
        S = "Erreur"
    ElseIf Par2 = -1 Then
        S = Par1 * Par3
    ElseIf Par3 = -1 Then
        S = Par1 + Par2
    End If
    Function3 = S
    End Function
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Points : 53
    Points
    53
    Par défaut
    En fait mon integer n'est pas static car il s'agit d'un range.value (ça dépend de la valeur de la case)

  8. #8
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    Bonjour,

    Ta question ne se résoudrait-elle pas à ceci ?

    J'ai une fonction avec 2 paramètres obligatoires, mais je dois pouvoir identifier le source de l'un deux car ça entraînera un changement d'instruction.

    Tu peux alors faire que ton 2ème argument obligatoire soit de la forme : A00000 ou B00000 donc celui qui appelle transmet un A+chiffres ou un B+chiffres et dans ta fonction tu a un select case qui selon A ou B isole la valeur voulue en retirant la lettre+ conversion numérique et valide l'instruction ad-hoc...

    ?

    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Points : 53
    Points
    53
    Par défaut
    Bonjour Ormonth,

    C'est vrai que la question est celle ci parce que si je suis dans les cases entre A01 et A20 je fais une instruction et B01 et B20 une autre instruction.

    Par contre, comment comparer entre qu'une case (range est de la forme A01 A02 ou de la forme B01 B02)?

  10. #10
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    Bonjour,

    ça c'est le contexte de ton truc qui te le dit, vu que pour attribuer une var par2 ou par3 tu avais bien une méthode.

    L'idée est que quand tu récupères la valeur de la cellule cible, tu sais d'où elle vient du coup tu lui concatène une lettre en plus et tu l'envoies en paramètre, et à la réception après le select case, tu supprimes la lettre en récupérant la valeur.

    Si tes cibles proviennent toujours de 2 colonnes fixes, ce serait sioux de te servir de la lettre de la colonne comme identifiant (cf propriété Address)

    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

Discussions similaires

  1. Struct dans les paramètres d'une fonction
    Par qdaemon_fr dans le forum C
    Réponses: 3
    Dernier message: 20/04/2011, 14h41
  2. [XL-2007] Insérer une variable dans les paramètre d'un fonction
    Par anolo40 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/01/2011, 21h08
  3. ArrayList initialisation dans les paramètres d'une fonction
    Par Mageni dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 15/02/2010, 10h54
  4. Réponses: 2
    Dernier message: 29/08/2007, 19h43
  5. [PHP 4.4.2] Récupérer les paramètres d'une fonction
    Par stailer dans le forum Langage
    Réponses: 5
    Dernier message: 07/04/2006, 21h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo