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

VBA Access Discussion :

Comprendre les paramètres Optional dans une procédure ou une fonction [AC-2016]


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 855
    Points : 581
    Points
    581
    Par défaut Comprendre les paramètres Optional dans une procédure ou une fonction
    Bonjour,

    Dans les paramètres d'une fonction, j'ai mis un paramètre optionnel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Optional Hors_Budget As Boolean
    Je pensai ainsi traiter 3 cas : Vrai, Faux ou null

    Je ne comprends pas : Si le paramètre optionnel n'est renseigné, la fonction considère que Hors_Budget=Faux

    Il faux donc un autre format que Boolean pour avoir ce que je voudrais ?

    Merci pour votre aide

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour,
    Si tu veux passer NULL alors il faut déclarer : Hors_Budget as Variant

    Cdlt
    "Always look at the bright side of life." Monty Python.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 855
    Points : 581
    Points
    581
    Par défaut
    Merci

    Cela marche

    mais du coup le test qui suit n'est plus IsNull mais IsError et dans le code qui suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select Case Hors_Budget
       Case "Vrai"
       Case "Faux"
       Case Else
    End Select
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select Case Hors_Budget
       Case True
       Case False
       Case Else
    End Select

    L'essentiel est que cela marche.

    Merci

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Pour éviter isError, on peut écrire ta procedure ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
       sub  fonctionTest(Optional Hors_Budget As variant)
     
       if isnull(Hors_Budget) then
        ....
      else
          if Hors_Budget = -1 then
          ' VRAI
             ....
          elseif Hors_Budget = 0 then
           ' FAUX
           else
            ' PAS POSSIBLE
            end if
     
       end if 
     
    end sub
    cdlt
    "Always look at the bright side of life." Monty Python.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function MyFonction(Optional Hors_Budget As integer = -1)
    Select case Hors_Budget
              case -1 'null
              case 0 'false
              case 1 'true
    End select

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 855
    Points : 581
    Points
    581
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonsoir ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function MyFonction(Optional Hors_Budget As integer = -1)
    Select case Hors_Budget
              case -1 'null
              case 0 'false
              case 1 'true
    End select
    merci mais je n'arrive pas au même résultat pour le 3ème cas

    MyFonction(true) donne -1 pour Hors_Budget et pas +1

    J'ai bien -1 avec MyFonction() et 0 avec MyFonction(false)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Ok
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function MyFonction(Optional Hors_Budget As integer = 2)
    Select case Hors_Budget
              case -1 'true
              case 0 'false
              case else 'null
    End select

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 855
    Points : 581
    Points
    581
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonsoir,
    Ok
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function MyFonction(Optional Hors_Budget As integer = 2)
    Select case Hors_Budget
              case -1 'true
              case 0 'false
              case else 'null
    End select
    Merci, cela marche parfaitement !

  9. #9
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour

    Un paramètre optionnel doit en théorie être toujours de type Variant si l'on sait qu'il peut être omis : de ce fait tu utilises la fonction IsMissing.

    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function NzStrEx(ByVal Valeur As String, Optional ByVal ValeurSinon As Variant) As String
        If Len(Nz(Valeur, "")) = 0 Then
            If Not IsMissing(ValeurSinon) Then
                NzStrEx = ValeurSinon
            Else
                NzStrEx = ""
            End If
        Else
            NzStrEx = Valeur
        End If
    End Function
    Ici, c'est une copie en string de la fonction Nz qui te retourne la valeur passée (de type String ) si elle est de longueur<> 0 d'une part que ValeurSinon soit renseignée ou non.., dans ce dernier cas, tu aura un ""...

    Sinon, si tu veux que ton paramètre optionnel soit Boolean et Faux par défaut tu peux procéder ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function CalculerPrix(ByVal PUHT As Double, ByVal Qte As Single, Optional ByVal TauxTVA As Single = 0.2, Optional ValeurEnTTC As Boolean = False) As Double
        CalculerPrix = (PUHT * Qte) * IIf(ValeurEnTTC, 1 + TauxTVA, 1)
    End Function
    Par défaut ici, tu auras un total HT et si ValeurEnTTC est à True, tu auras un TTC ; ici, on exploite pas le IsMissing car il est pas défaut à False et du coup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CalculerPrix(10,10,,True) donne 120,00000476837
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CalculerPrix(10,10) donne 100
    en // à cela, le taux de TVA fixé ici à 20% est omis puisqu'il ne change pas sa valeur.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 855
    Points : 581
    Points
    581
    Par défaut
    Citation Envoyé par argyronet Voir le message
    Bonjour
    .....
    Argy
    Merci pour ces utiles exemples

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JVM][OPTIONS][OPTIMISATION]pc dédié à Java
    Par narmataru dans le forum Général Java
    Réponses: 7
    Dernier message: 16/04/2003, 17h12
  2. [Kylix] kylix3 : pb sur options de projet
    Par Arsene dans le forum EDI
    Réponses: 3
    Dernier message: 09/04/2003, 10h41
  3. [propriétés]Option Checked
    Par psl dans le forum Composants VCL
    Réponses: 6
    Dernier message: 22/08/2002, 08h07
  4. Parametrage des options de projet
    Par ares7 dans le forum EDI
    Réponses: 7
    Dernier message: 22/07/2002, 15h33
  5. Vous gerez comment les options d'un programme?
    Par n0n0 dans le forum C++Builder
    Réponses: 5
    Dernier message: 17/05/2002, 13h21

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