XL 2010 Connaître le nombre de Case dans un Select Case

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Supposons que dans une fonction j'utilise Select Case, comme ceci, par exemple :
VB:
    Select Case x
        Case 1: blablabla
        Case 2: blobloblo
        Case 3: bliblibli
        Case 4: blublublu
    End Select
Il y aurait-il un moyen de connaître le nombre de Select Case possibles de la fonction (ici 4) ?
 

eriiic

XLDnaute Barbatruc
Bonjour,

bizarre ta question, ou alors je l'ai mal comprise...
C'est plus simple de compter les lignes lorsque tu les saisis que d'analyser le vba par une macro après coup.
Tu peux expliquer le but pour éclaircir ?
Sinon tu comptes quoi pour :
VB:
Case 1 To 5
Case 6, "b"
?
eric
 

Magic_Doctor

XLDnaute Barbatruc
Re,

Effectivement, ça peut sembler bizarre.
Dans la fonction il y a un certain nombre de Case, mais il se peut qu'on en rajoute.
Toujours dans la fonction, on dresse un tableau qui recueille la valeur correspondant à chaque Case. Pour ce faire, il faut rédiger une boucle commençant par le 1er case et finissant au dernier. Peut-on, sans avoir à stipuler manuellement le numéro du dernier Case, connaître automatiquement celui-ci ?
C'est essentiellement par curiositçe que je pose la question.
 

eriiic

XLDnaute Barbatruc
C'est le choix que j'aurais fait aussi, autant aller au plus simple.

Si je peux me permettre :
- je n'aime pas le On Error Resume Next ;-)
- tu n'as pas mis de valeur par défaut à Optional ChxLangue As Byte et tu ne traites pas le cas où il est omis.
Et ça tu ne peux pas vu que tu l'as typé.
A mon sens, tu as 2 choix 'raisonnables' pour les paramètres optionnels :
- Variant : tu peux utiliser IsMissing()
- typé autre que Variant : lui mettre une valeur par défaut pour ne pas avoir d'erreur en cas d'omission
Si non typé, tu peux autoriser de passer aussi bien le n° que la langue :
VB:
Case 1, "Afrikaans": langue = Array(..)
Et tu utilises IsMissing() soit pour retourner une valeur d'erreur, soit pour lui fixer une valeur par défaut. A ton choix.

Je pense que tu le sais mais au cas où...
Si ta fonction peut retourner plusieurs paramètres différents, plutôt que de multiplier les booléens tu peux lui passer une chaine avec le nom du paramètre voulu (variant).
Si IsMissing() => jour (par défaut donc)
Si "langue" ou "items" ou ... => le paramètre demandé
Là tu n'en as que 2, si plus ça devient de plus en plus scabreux.
Avec pour moi l'avantage d'auto-documenter l'appel.
(sauf si elle est destinée à être appelée des milliers de fois et où la vitesse prime)
eric
 

Magic_Doctor

XLDnaute Barbatruc
Re,

Tu as tout à fait raison pour le « On Error Resume Next ». J’en avais eu besoin à un moment donné, et j’ai oublié de le lourder (ce que je viens de faire).

À quoi peut donc bien servir cette fonction ? Ou, mieux, comment l’utiliser ? Elle est destinée à être utilisée avec un ComboBox et un SpinButton.
Le ComboBox emmagasine les noms de langues (d’où la nécessité de créer une liste des langues présentes dans la fonction). À partir de celui-ci, on choisit une langue : dans une cellule, le jour de la semaine prend le nom de celui de la langue choisie.
Le SpinButton, lui, permet, lors de ses incréments et décréments, de modifier la date et, par voie de conséquence, les noms des jours de la semaine (qui défilent) dans la langue auparavant choisie.

On pourrait, peut-être, rendre la fonction plus versatile avec des « IsMissing() », mais franchement, je ne vois pas réellement dans quel but. Normalement, il ne devrait y avoir aucune plantade, vu qu’en permanence la fonction est gérée, sans aucune fantaisie, par le ComboBox et le SpinButton.

Mais, pour le fun (après tout, c’est l’objet de ce forum), poste ce qui te semblerait plus à ta convenance. Une fonction doit progresser, elle ne doit jamais rester figée ! Et moi, ça m'intéresse.

¡Feliz día!
 

Discussions similaires

Statistiques des forums

Discussions
312 963
Messages
2 093 998
Membres
105 906
dernier inscrit
aifa