Passage de tableau optionnel en paramètre, erreur

Fermé
jeremayb Messages postés 18 Date d'inscription lundi 13 avril 2020 Statut Membre Dernière intervention 26 juin 2020 - 26 juin 2020 à 11:16
 jeremayb - 29 juin 2020 à 12:03
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

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié le 26 juin 2020 à 11:44
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
Merci beaucoup pour tes explications claires et pour ton exemple !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
26 juin 2020 à 11:28
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
jeremayb Messages postés 18 Date d'inscription lundi 13 avril 2020 Statut Membre Dernière intervention 26 juin 2020
26 juin 2020 à 11:31
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