Passage de tableau optionnel en paramètre, erreur
jeremayb
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
jeremayb -
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.
Merci beaucoup,
Jeremy
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
A voir également:
- Passage de tableau optionnel en paramètre, erreur
- Tableau word - Guide
- Tableau ascii - Guide
- Remettre parametre usine pc - Guide
- Trier un tableau excel - Guide
- Parametre dns - Guide
2 réponses
Oui.
2 choses :
1- Tester si l'argument passé en Optional Variant est un tableau, grâce à la fonction IsArray()
Exemple :
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...
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...
jeremayb
Merci beaucoup pour tes explications claires et pour ton exemple !
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 :
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)