Passage de tableau optionnel en paramètre, erreur

Signaler
Messages postés
18
Date d'inscription
lundi 13 avril 2020
Statut
Membre
Dernière intervention
26 juin 2020
-
 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

Messages postés
12177
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
26 juin 2020
2 448
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...

Cordialement,
Franck
Merci beaucoup pour tes explications claires et pour ton exemple !
Messages postés
12177
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
26 juin 2020
2 448
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)

Messages postés
18
Date d'inscription
lundi 13 avril 2020
Statut
Membre
Dernière intervention
26 juin 2020

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 ?