Passage de tableau optionnel en paramètre, erreur
jeremayb
Messages postés
18
Statut
Membre
-
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
- Trier un tableau excel - Guide
- Remettre parametre usine pc - 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)