Conditionnement d'un type de données d'un paramètre de fonction
Victor Porée
Messages postés
79
Statut
Membre
-
Victor Porée Messages postés 79 Statut Membre -
Victor Porée Messages postés 79 Statut Membre -
Bonjour à tous ! :)
Comment faire pour que — dans une procédure de fonction — un paramètre puisse définir le type de données d'un autre paramètre ?
Par exemple, si le premier argument de la fonction est 1, alors le deuxième argument est une cellule ; si 2, alors la valeur de la cellule, etc.
Comment faire pour que — dans une procédure de fonction — un paramètre puisse définir le type de données d'un autre paramètre ?
Par exemple, si le premier argument de la fonction est 1, alors le deuxième argument est une cellule ; si 2, alors la valeur de la cellule, etc.
A voir également:
- Conditionnement d'un type de données d'un paramètre de fonction
- Fuite données maif - Guide
- Fonction si et - Guide
- Remettre parametre usine pc - Guide
- Parametre dns - Guide
- Supprimer les données de navigation - Guide
3 réponses
Bonjour,
Tu peux utiliser le type Variant ainsi que le mot clé [ Optional ].
Exemple :
En utilisant le type [ Variant ], chaque variable peut contenir
n'importe quel [ Type ]. Et en utilisant le mot clé [ Optional ],
l'argument peut ne pas être présent.
Avec une combinaison des deux, tu devrais pouvoir obtenir
le comportement souhaité.
K
Tu peux utiliser le type Variant ainsi que le mot clé [ Optional ].
Exemple :
Public Sub EssaiParamatres(ByVal pArg1 As Variant, Optional ByVal pArg2 As Variant, Optional ByVal pArg3 As Variant)
Select Case pArg1
Case "1"
' Traiter le cas 1
Case "2"
' Traiter le cas 2
' etc...
End Select
End Sub
En utilisant le type [ Variant ], chaque variable peut contenir
n'importe quel [ Type ]. Et en utilisant le mot clé [ Optional ],
l'argument peut ne pas être présent.
Avec une combinaison des deux, tu devrais pouvoir obtenir
le comportement souhaité.
K
Bonjour,
Autre possibilité qui est moins utilisé et pourtant très efficace
est de créer des structures [ Type ].
Ainsi, tu peux n'avoir qu'un seule variable qui contiendra, tous les
types dont tu as besoin.
Ainsi, tu pourras avoir tous les types nécessaires
au déroulement des opérations à l'intérieur d'une seule
structure (d'une seule variable).
J'utilise beaucoup cette façon de faire avec des structures imbriquées.
K
Autre possibilité qui est moins utilisé et pourtant très efficace
est de créer des structures [ Type ].
Ainsi, tu peux n'avoir qu'un seule variable qui contiendra, tous les
types dont tu as besoin.
Option Explicit
Type TypBloc
Cible As Range
Valeur As String
Limite As Double
Compteur As Long
Identifiant As Integer
Val1 As Integer
Val2 As Long
Val3 As Double
Val4 As Variant
End Type
Type TypBoite
Bte1 As TypBloc
Bte2 As TypBloc
Bte3 As TypBloc
End Type
Sub Essai(ByRef LaVariable1 As TypBloc, ByRef LaVariable2 As TypBloc)
Select Case LaVariable1.Val1
Case 1
Set LaVariable2.Cible = LaVariable1.Cible
Case 2
LaVariable2.Valeur = LaVariable1.Valeur
Case 3
' etc...
End Select
End Sub
Ainsi, tu pourras avoir tous les types nécessaires
au déroulement des opérations à l'intérieur d'une seule
structure (d'une seule variable).
J'utilise beaucoup cette façon de faire avec des structures imbriquées.
K
Merci pour ta réponse ! :)
Je l'avais déjà testé, et ça fonctionne, effectivement. Mais l'inconvénient, c'est qu'il faut jouer avec les virgules (ou points-virgules) pour obtenir le bon type de données. Ce qui n'est finalement pas très pratique. L'intérêt serait d'avoir à la même position de paramètre, par exemple, tantôt un , tantôt un . Et puis j'ai pas mal de types à déclarer, alors les paramètres n'en finiraient pas.
Sinon, est-il possible de modifier le type de données d'une variable au cours de la procédure ?
Tout ceci n'est pas très clair !
« Sinon, est-il possible de modifier le type de données d'une variable au cours de la procédure ? » Non, en VBA, il n'est pas possible de modifier le type d'une variable.
Par contre il est possible de déterminer le type de variable contenue dans une variable déclarée en Variant à l'aide des fonctions VarType ou TypeName :
Sub test(maVariable As Variant) Select Case TypeName(maVariable) Case "String" 'Traitement des String MsgBox maVariable Case "Range" 'Traitement des Range MsgBox maVariable.Address End Select End SubSi nécessaire, tu peux réaffecter ensuite cette variable à une autre variable de type correspondant (par exemple pour bénéficier de l'intellisense) :
Sub test(maVariable As Variant) Dim rng As Range Select Case TypeName(maVariable) Case "String" 'Traitement des String MsgBox maVariable Case "Range" 'Traitement des Range Set rng = maVariable MsgBox rng.Address End Select End Sub