Création de constantes pour les arguments d'une fonction

Résolu
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 - 9 févr. 2007 à 13:20
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 - 12 févr. 2007 à 11:30
Bonjour,

Ca fait un petit moment que je fouille le net à la recherche d'un tutorial ou au moins d'une explication, et je n'ai rien trouvé de très probant, alors, je tente ma chance :

Je sais créer mes propres fonctions en VB/VBA, avec des arguments, etc ... Pas de soucis.
Ce que je voudrais maintenant faire, c'est définir des constantes pour cette fonction.
Un exemple sera sûrement plus parlant. Prenons la fonction InStr.
Elle s'écrit donc comme suit :
InStr([start], [string1],[ string2], [compare as vbCompareMethod = vbBinaryCompare])

Ce que je voudrais savoir faire dans ma fonction, c'est l'équivalent de l'argument compare.
Comme dois-je écrire mon code, par exemple dans une fonction qui nécessiterait d'indiquer un sens, pour avoir :
CalculSens (Longueur, sens as vbSens = vbGauche)
avec une liste de choix pour vbSens qui soit vbGauche, vbDroite, vbHaut, vbBas ?

J'espère avoir été assez clair dans ce que je souhaite obtenir.
D'avance merci.

Molenn

13 réponses

MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
9 févr. 2007 à 13:24
Assez clair ;)

Tu as besoin d'un Enum :

Public Enum eSens
    Gauche = 1
    Droite = 2
End Enum

Public Function CalculSens(Sens as eSens = Gauche)

End Function

Ciaò
- MadMatt -
Vb System Library
3
Utilisateur anonyme
9 févr. 2007 à 13:25
Salut,

C'est des Enums :

Private Enum vbSens
  vbGauche
  vbDroite
  vbHaut
  vbBas
End Enum






__________
Kenji
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
9 févr. 2007 à 13:28
Il te faut créer une énumération à laquelle tu donne un nom.

Dans cette énumération tu met tes constantes avec leur valeur, bref comme une énumération.

Ensuite pour l'argument de ta fonction, au lieu de le typé classique (integer, string, ...) tu le type du nom de ton énumération.

Private Enum MyList
    MyItem1 = 10
    MyItem2 = 25
    MyItem3 = 60
End Enum

Private Function MyFunction(param As MyList)
    MsgBox param
End Function

Private Sub Form_Load()
    Call MyFunction(MyItem2)
End Sub

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
9 févr. 2007 à 13:45
Tu ne peux affecter des valeurs par défaut qu'aux paramètres optionnels pas aux paramètres obligatoires

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
9 févr. 2007 à 13:46
Oui effectivement dsl j'ai oublié un truc : il faut rajouter Optional devant la déclaration de l'argument.

Ciaò
- MadMatt -
Vb System Library
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 févr. 2007 à 13:48
Private Enum eSens
    gauche = 1
    droite = 2
End Enum


Private Function CalculSens(Sens As eSens)
  MsgBox Sens
End Function


Private Sub Command1_Click()
  CalculSens droite
End Sub
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
9 févr. 2007 à 14:04
tu peux pas, les énumérations c'est uniquement des entiers, des nombres

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
9 févr. 2007 à 13:31
ahaha PREMS

mdr, jme doutais que les réponses allaient fuser
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
9 févr. 2007 à 13:43
Han, ça va trop vite, j'ai à peine eu le temps de voir la première et d'aller tester tout de suite que déjà, ça fuse

Donc, effectivement, ça marche bien, je ne connaissais pas les Enumérations.
Mais j'ai encore un petit souci, lorsque j'essaye d'affecter une valeur par défaut.
J'ai mon enumération comme suit :

Public Enum eSens
    Gauche = 1
    Droite = 2
End Enum

et mon appel de fonction :
Public Function CalculSens(Sens as eSens = Gauche)
Quand je valide, ça me fait une erreur de compilation sur le signe "=", avec  "Attendu : séparateur de liste ou )"

Enfin, le plus important est déjà présent, cool.
Et je vais voir dans les posts suivant si je ne trouve pas ce qui pourrait répondre à ce dernier petit souci.

Mais déjà, merci :

Molenn
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
9 févr. 2007 à 14:01
Ah ok ok, et comme elle est obligatoire, c'est donc normal ^^
Il me reste une dernière question, puisque vous avez l'air de maitriser les énumérations comme personnes :

Ca, c'est bon :
Public Enum eSens
    Gauche = 1
    Droite = 2
End Enum

Je voudrais y coller du texte qui me servirait après dans ma fonction. A priori, ça ne fonctionne pas :
Public Enum eSens
    Gauche = "Left"
    Droite = "Right"
End Enum

Et quand je fais
Public Enum eSens
    Gauche
    Droite
End Enum
lorsque je tente d'appeler la valeur, ça me remonte 0 au lieu du nom.

Je peux bien entendu traiter ce cas avec un select case directement dans la fonction que je crée, mais je me demandais si je pouvais faire plus court.

Molenn
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
9 févr. 2007 à 14:12
Bon, et bien, avec toutes mes questions, je pense avoir fait le tour des énumérations.
Merci à vous tous,
et à la prochaine question

Molenn
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
10 févr. 2007 à 08:13
Tu peux toujours également transposer, bien sur, les valeurs de l'énumération en chaînes de caractères.

Je n'en vois pas vraiment l'utilité, mais, si c'est ce que tu cherches, voilà une manière simple :

Private Enum eSens
    gauche = 1
    droite = 2
    haut = 3
    bas = 4
End Enum


Private Function CalculSens(Sens As eSens)
  CalculSens = Array("à gauche", "à droite", "en haut", "en bas")(Sens - 1)
End Function


Private Sub Command1_Click()
  MsgBox CalculSens(droite)
  MsgBox CalculSens(bas)
  MsgBox CalculSens(haut)
  MsgBox CalculSens(gauche)
End Sub
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
12 févr. 2007 à 11:30
Oh, je n'y avais pas pensé du tout (c'est vrai que Array, c'est une fonction qui m'est complètement inconnue aussi  )

L'utilité de la chose, c'est en fait par ex, qu'en fonction de l'option choisie, ça ne va pas m'ouvrir un même fichier Excel. Et je me disais que si je pouvais affecter du texte, il me suffisait de faire Workbooks.open("C:\Temp" & Option choisie) pour ouvrir le bon fichier Excel.
Mais c'est pas grave, j'ai collé un Select Case et ça marche tout pareil. C'était juste pour économiser quelques lignes de code.

Merci tout de même, j'essayerai de penser à Array une prochaine fois.

Molenn
0
Rejoignez-nous