IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Renvoi aléatoire de noms d'une chaine de caractères [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 27
    Par défaut Renvoi aléatoire de noms d'une chaine de caractères
    Bonjour à tous,

    je sollicite votre aide car je souhaite créer une fonction VBA qui, étant donnée une chaîne de caractères représentant une centaine de noms d'élèves séparés par des points-virgule ( "nom1;nom2;....,nomN;FIN" ), renvoie aléatoirement un des noms de la chaîne.

    J'ai ma fonction alea qui renvoie un entier compris entre 2 bornes.
    Je sens qu'il faut compter le nombre de noms dans la chaîne (ou le nombre de points-virgule?), puis passer la chaîne en argument, mais je sèche pour la réalisation.

    Je vous suis reconnaissant pour toute l'aide que vous voudrez bien m'accorder.

    Cordialement.

  2. #2
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Bonjour,

    Voici une petite fonction qui prend en paramètre la liste de noms séparés par des points-virgules, et qui renvoie un des noms au hasard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public Function EleveAleatoire(strInputI As String) As String
    Dim tabNoms() As String
    Dim lngNombre As Long
    Dim lngPos As Long
     
        'Séparation des noms dans un tableau
        tabNoms = Split(strInputI, ";")
     
        'Calcul position du dernier élément (commence à la position 0)
        lngNombre = UBound(tabNoms)
     
        'Choix aléatoire d'un élément du tableau
        lngPos = Int(Rnd * (lngNombre + 1))
        EleveAleatoire = tabNoms(lngPos)
     
    End Function

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 27
    Par défaut
    Je vous remercie de votre réponse et vous prie de me pardonner car j'ai été contraint de délaisser le sujet quelque temps.

    En fait, je cherche à bâtir une fonction qui compte dans ma liste de noms séparées par des ; le nombre de ; et qui me rend le nom précédent le rang du ; tiré aléatoirement. Je ne comprends pas bien à ce propos le fonctionnement de Left, Right, Mid et InStr.

    Je vous remercie par avance des éclaircissements que vous pourrez m'apporter.

    Cordialement.

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Avant de chercher une autre solution, as-tu essayé la proposition de tedo01?

    Sinon, pour comprendre les fonctions dont tu parles, un petit coup de F1 sur chacun des mots devrait répondre à tes questions.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 27
    Par défaut
    Bonjour à tous.

    J'ai compris la fonction de Tedo et l'en remercie.

    En revanche, elle fonctionne que si je mets ma liste dans une cellule de ma feuille.

    Ce que j'ai besoin de faire, c'est de la déclarer au sein du code lui-même puis de l'appeler dans une cellule de ma feuille, son argument étant dans le code.

    Cela est-il possible avec une fonction ou faut-il faire une macro?
    Cela vient-il du fait de la présence d'accents dans les prénoms?
    Cela vient-il de la mauvaise saisie de ma liste, avec les " et les passages à la ligne?

    Je vous mets ma fonction en copie et vous remercie à nouveau pour votre aide.
    Cordialement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Function tosEleves(ByVal liste As String) As String
    '
    Dim sepNoms() As String
    Dim NbreNoms As Long
    Dim PosNom As Long
     
    Dim eleves As String
     
    eleves = "Jean;Jacques;Michel;Robert;Albert;Conrad;Moussa;Capucine;" & _
    "Florence;Christophe;Eric;Théophile;Mitia;Anne;Mercedes;Emmanuel;Alain;" & _
    "Bernard;Françoise;Didier;Caroline;Aline;Marc;Sylvie;Sylvestre;Norbert;" & _
    "Fulgence;Mahault;Marie;Joseph;Luc;Lucas;Gérard;Maurice;Martin;Antoine;" & _
    "Guy;Sam;Loic;Philippe;Gaelle;Noel;Isabelle;Christine;Olga;Jérôme;Grégoire;" & _
    "Fedor;Thomas;Laurent;Claude;Marie;"
     
     
    'Séparation des noms dans un tableau
        sepNoms = Split(etudiants, ";")
     
    'Calcul position du dernier élément (commence à la position 0)
        NbreNoms = UBound(sepNoms)
     
    'Choix aléatoire d'un élément du tableau
        PosNom = Int(Rnd * (NbreNoms + 1))
        tosEleves = sepNoms(PosNom)
    End Function

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour

    visiblement tu a compris comment scinder une chaîne de caractère

    maintenant il me viens une idée qui couterait moins cher en ressource

    aurais tu comme on te la conseiller taper sur F1 par hasard

    si c'est le cas regarde un peu du coté de "array"

    sa pourrais être une bonne chose

    si tu ne trouve pas ou comprend pas je te ferais un exemple


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir

    Citation Envoyé par Debinfo75 Voir le message
    J'ai compris la fonction de Tedo et l'en remercie.

    En revanche, elle fonctionne que si je mets ma liste dans une cellule de ma feuille.
    Non, je ne crois pas

    La fonction de Tedo01, à mon avis, fonctionne à chaque fois que tu l'appelles. La liste des noms est en paramètre, ce qui est le plus souple, mais tu peux aussi en faire une constante si la liste ne change jamais.

    Par contre, si tu veux l'appeler d'une cellule, il faudra voir s'il faut, ou pas, lui ajouter Cordialement,

    PGZ

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/02/2008, 13h18
  2. Réponses: 1
    Dernier message: 24/01/2008, 17h30
  3. Réponses: 1
    Dernier message: 25/11/2007, 12h28
  4. Réponses: 6
    Dernier message: 14/06/2006, 15h27
  5. Extraire un nom d'une chaine de caractere
    Par iamspacy dans le forum Linux
    Réponses: 4
    Dernier message: 03/05/2004, 21h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo