Texte LettreAleatoire

Bonjour le forum

Avec l'autorisation de David, voici, en son hommage, une fonction personnalisée de Ti_ (Thierry Pourtier) permettant de renvoyer une lettre choisie aléatoirement dans un panel prédéfini.
Utilisable par VBA ou formule

Cordialement, @+
VB:
Function LettreAleatoire$()
'renvoyer une lettre aléatoire choisie parmi un panel prédéfini
'by Ti_ (Thierry Pourtier)
Const Lettres$ = "abcdefghijklmnopqrstuvwxyzéèêëàâôûù"
Randomize
LettreAleatoire = Mid$(Lettres, Int(Rnd * Len(Lettres) + 1), 1)
End Function

et sur les suggestions de Magic_Doctor et de Patrick , voici une version 1.1 un peu plus polyvalente gérant les caractères exotiques et laissant la possibilté de passer une chaine de caractères exotiques ou non en argument. Celui ci, étant optionnel, laisse le choix de la lettre parmi les valeurs par défaut si il est omis, voir fichier exemple.
Utilisable par VBA ou formule (avec la restriction pour VBA que l'objet supporte les caractères internationaux non latins si ceux ci sont utilisés, pas de problème pour une textbox, tous les caractères ne sont pas gérés avec une msgbox)
passage en v1.2 pour intégrer un paramétrage optionnel de la volatilité, volatile par défaut
VB:
Function LettreAleatoire$(Optional App_Vol As Boolean = 1, Optional Chn_Txt$ = "")
'renvoyer une lettre aléatoire choisie parmi un panel pré défini ou passé en argument Chn_Txt
'App_Vol=0 -> non volatile, App_Vol=1 ou omis -> volatile
'V1.0 by Ti_ (Thierry Pourtier)
'V1.1 by Bernard_XLD
'V1.2 by Bernard_XLD
If App_Vol Then Application.Volatile
If Chn_Txt = "" Then Chn_Txt = "abcdefghijklmnopqrstuvwxyzàáâãäåçéêëèìíîïðòóôõöñùúûüýÿ": Chn_Txt = Chn_Txt & UCase(Chn_Txt)
'pour des caractères exotiques par défaut, déclarer les codes car
'If Chn_Txt = "" Then Chn_Txt = ChrW(&H1228) & ChrW(&H561) & ChrW(1096) & ChrW(&H4E94) & ChrW(4312) & ChrW(964) & ChrW(1514) & ChrW(&H146D) & ChrW(&HC77C) & ChrW(&H65E5)
Randomize
LettreAleatoire = Mid$(Chn_Txt, Int(Rnd * Len(Chn_Txt) + 1), 1)
End Function
 

Pièces jointes

  • Exemple_Lettre_Aléatoire.xlsm
    24.5 KB · Affichages: 2
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Évidemment, la fonction marche bien. J'ai voulu m'amuser pour voir ce que ça donnerait avec des caractères exotiques. Malheureusement, ça n'a pas marché...
J'avais essayé ceci :
VB:
Function LettreAleatoire$()
'Renvoie une lettre aléatoire choisie parmi un panel prédéfini
'Ti (Thierry Pourtier) le 03-06-2007

Dim cadena$

'    cadena = ChrW(&H1228) & ChrW(&H561) & ChrW(1096) & ChrW(&H4E94) & ChrW(4312) & ChrW(964) & ChrW(1514) & ChrW(&H146D) & ChrW(&HC77C) & ChrW(&H65E5)

    Application.Volatile  'pour jouer avec la touche F9
   
    Const Lettres$ = "abcdefghijklmnopqrstuvwxyzéèêëàâôûù"
'    Const Lettres$ = cadena
   
    Randomize
    LettreAleatoire = Mid$(Lettres, Int(Rnd * Len(Lettres) + 1), 1)
   
End Function
Pourrait-on résoudre ce problème, afin de rendre la fonction plus polyvalente ?
 

patricktoulon

XLDnaute Barbatruc
Bonjour
@Magic_Doctor
VB:
   cadena = ChrW(&H1228) & ChrW(&H561) & ChrW(1096) & ChrW(&H4E94) & ChrW(4312) & ChrW(964) & ChrW(1514) & ChrW(&H146D) & ChrW(&HC77C) & ChrW(&H65E5)
Const Lettres$ = cadena
je crois que tu oublie les regles de bases en vb
ou tu a vu que l'on mettais une variable dans une constantes
une constante est instanciée avec une valeur en dur et non une variable
d'autant plus que ta chaine renvoie "?????t????"
 

Magic_Doctor

XLDnaute Barbatruc
Re,

Enfin, c'est bien pour ça que je pose la question. Tu ne m'apportes aucune réponse concrète.
Je reprends. Comment s'y prendre alors ?
J'avais tenté, à la hussarde :
VB:
Const Lettres$ = "ChrW(&H1228) & ChrW(&H561) & ChrW(1096) & ChrW(&H4E94) & ChrW(4312) & ChrW(964) & ChrW(1514) & ChrW(&H146D) & ChrW(&HC77C) & ChrW(&H65E5)"
Évidemment, le résultat est bizarre.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
vba ne gere pas les chrw(au dela de 255)
seul quelque controls les supportent et encore pas tous
notamment on constatera une différence entre un textbox et un label
essaie de voir avec le code asc plutôt et encore je sais pas si ça va le prendre
tu ne peut que travailler sur les cellules avec qui l'acceptent
mais là on est vraiment dans une fonction perso qui sera difficile a rendre générique
 

Magic_Doctor

XLDnaute Barbatruc
C'est curieux, parce que tous les Chrw que j'ai mis dans la fonction, sont très bien retranscris dans une autre fonction personnalisée. Il n'y a jamais eu de limitation.
 

patricktoulon

XLDnaute Barbatruc
re
oui la transmission se fait mais c'est l'affichage dans un msgbox qui n'est pas compatible
et dans certains controls comme je te l'ai dis tu aura des différences

mais ouvre un post a toi sur le forum sinon on va polluer la proposition de @Yeahou
 
En fait la constante n'est pas nécessaire et c'est elle qui bloque, c'est obligatoirement une valeur en dur qu'on ne peut définir par du code et comme l'a dit très justement Patrick, Vbe ne gère pas les caractères au delà de 255 ce qui fait qu'on ne peut passer en valeur les caractères au delà de la table. Il faut passer par une variable texte, en reprenant ton code, ça fait :
[édition : code supprimé, fonctionnalité intégrée en v1.1 Post#1]
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
En fait la constante n'est pas nécessaire et c'est elle qui bloque, c'est obligatoirement une valeur en dur qu'on ne peut définir par du code et comme l'a dit très justement Patrick, Vba ne gère pas les caractères au delà de 255 ce qui fait qu'on ne peut passer en valeur les caractères au dela de la table. Il faut passer par une variable texte, en reprenant ton code, ça fait :
Bonjour Yeahou,

Ta dernière version marche très bien.
Bonne journée.
 
Dernière édition:

Statistiques des forums

Discussions
300 795
Messages
1 987 250
Membres
209 755
dernier inscrit
bla89