Passage de tableau optionnel en paramètre, erreur

jeremayb Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
 jeremayb -
Bonjour,

Ne trouvant pas de réponse à mon problème sur différent forum je m'adresse ici :

Voila mon problème parait simple et c'est une incompréhension de ma part du fonctionnement des tableaux qui me bloque je pense.

J'essaie de passer un tableau de string en paramètre optionnel d'une fonction. L'erreur se produit avant que je lance le code et elle se nomme ainsi : " Un argument optionnel doit être de type variant ou intrinsèque avec une valeur pas défaut"

Dans ma fonction je veux juste utiliser ce tableau sans le modifier.
Sub chercher_ac_codestation(phase As String, Optional debut As Integer, Optional fin As Integer, Optional codestation As String, Optional MonTab() As string)


Merci beaucoup,

Jeremy

Configuration: Windows / Chrome 83.0.4103.116

2 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Oui.
    2 choses :
    1- Tester si l'argument passé en Optional Variant est un tableau, grâce à la fonction IsArray()
    Exemple :
    Option Explicit
    
    Sub Appel()
    Dim monTab As Variant, autreTab As Variant
        monTab = Array("pomme", "poire", "scoubidou")
        MsgBox QuelIndex("scoubidou")                   'Appel sans variable tableau
        MsgBox QuelIndex("scoubidou", monTab)           'Appel avec tableau "Variant" remplit
        MsgBox QuelIndex("scoubidou", autreTab)         'Appel avec tableau "Variant" vide
    End Sub
    
    Private Function QuelIndex(Quoi As String, Optional tabl As Variant) As Integer
    Dim i As Integer
        If IsMissing(tabl) Then                   'teste si le paramètre Optionnel tabl est manquant
            MsgBox "paramètre manquant"
            QuelIndex = -1
        Else
            If IsArray(tabl) Then                          'teste si tabl est une variable tableau
                For i = LBound(tabl) To UBound(tabl)
                    If tabl(i) = Quoi Then QuelIndex = i: Exit Function
                Next i
            Else
                QuelIndex = -1                       'si tabl n'est pas un tableau retourne -1
            End If
        End If
    End Function


    2- Lance le code ci-dessus en pas à pas, et regarde dans la fenêtre des variables locales (menu affichage de l'éditeur VBA).
    La variable tabl est de type Variant/Variant(0 To 2)
    Mais, ces éléments (tabl(0), tabl(1) et tabl(2)) sont de type Variant/String.
    VBA l'a automatiquement reconnu...

    1
    1. jeremayb
       
      Merci beaucoup pour tes explications claires et pour ton exemple !
      0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    La réponse est dans le message d'erreur.
    Tu ne peux pas passer un tableau de String en Optionnel.

    Deux choix :
    > Soit tu le rends obligatoire (quitte à ce qu'il soit vide),
    > Soit tu demandes un Variant :
    Sub chercher_ac_codestation(phase As String, Optional debut As Integer, Optional fin As Integer, Optional codestation As String, Optional MonTab)

    0
    1. jeremayb Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci pour ta réponse, en indiquant MonTab sans mettre de () après le logiciel va quand même "comprendre" qu'il a affaire a un tableau ?
      0