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

VBA PowerPoint Discussion :

Liste déroulante “dynamique”


Sujet :

VBA PowerPoint

  1. #1
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2008
    Messages : 225
    Points : 155
    Points
    155
    Par défaut Liste déroulante “dynamique”
    Bonjour le forum,
    Je voudrais créer un Quizz sous PowerPoint. La liste déroulante est qualifiée de dynamique car il n’y a qu’une seule dia dont le contenu change en cliquant sur un bouton.
    La dia contient e.a. (voir image « Quizz VDF.png »:
    • une liste déroulante (cbx_choix) pour les réponses possibles,
    • un bouton « Question suivante »
    Les questions, les 3 réponses possibles, commentaire et indice de la bonne réponse (soit 6 champs) sont stockées sous forme de table (array) : question0(5) à question9(5).
    En cliquant sur le bouton « Question suivante », le nombre de clics est stocké dans un compteur « nr_question ».
    Pour alimenter la liste déroulante, j’ai écrit la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For x = 1 To 3
    cbx_choix.AddItem “question” & nr_question & “(“ &  x & “)Next
    Mais la liste ne reprend que la valeur des constantes composées (voir image ‘liste quizz.png »)
    Une expert VBA du forum pourrait-il me conseiller pour corriger l’erreur ?
    D’avance merci

    Harry

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Points : 730
    Points
    730
    Par défaut
    Un expert peut-il répondre ? ;+))

    Pourquoi n'utilises tu pas un tableau à double indice ?
    Ou encore tu pourrais mettre ces données dans une feuille Excel et la lire au fur et à mesure des questions.

    Nota: peux mettre le code à disposition ?

    A+
    PPz
    La qualité et la précision de la réponse sont proportionnelles à celles de la question.

  3. #3
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2008
    Messages : 225
    Points : 155
    Points
    155
    Par défaut
    Bonsoir PPz78,
    Merci pour la réponse.

    J'avais essayé un tableau à 2 dimensions mais je rencontre le même problème pour le charger.
    Voici l'essentiel du code:
    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
    Private Sub CmdBtn_Next_Click()
    'questions, les 3 réponses possibles, commentaire et indice de la bonne réponse
    question0 = Array(" Quel est le cépage qui fut traité de plant déloyal et banni de Bourgogne par le duc Philippe le Hardi en 1395 ? ", _
    "La syrah ", "Le gamay ", "Le pinot noir ", _
    "Chassé de la Côte d'Or, c'est en Beaujolais que le gamay trouva son terroir de prédilection. ", _
    "2")
    question1 = Array("On compte en France plus de cinq cents Appellations Contrôlées. Quelle est - en superficie - la plus petite ?", _
    "La Romanée ", "Le Montrachet ", "Château Grillet ", _
    "La Romanée ne fait que 85 ares contre 2 1/2 hectares pour le Château-Grillet et 8 hectares pour le Montrachet. ", _
    "1 ")
    question2 = Array("Dans quel département se trouve le célèbre Château-Grillet - perle des Côtes du Rhône septentrionales ?", _
    "Le Rhône", "La Loire", "L'Ardèche", _
    "Le vignoble de Condrieu - son voisin immédiat - s'étend sur les trois départements. ", _
    "2")
    'donne le rang de la question; mis à -1 lors de l'initialisation.
    nr_question = nr_question + 1
    'alimente la textbox de la question
    tbx_question.Value = "question" & nr_question & "(0)" 'si nr_question = 2 [INDENT][INDENT]devrait être "question2(0)
    'alimente la combobox
    For x = 1 To 3
    cbx_choix.AddItem "question" & nr_question & "(" & x & ")" 'attendu question2(x)
    Next
    End Sub
    Comme il y aura une cinquantaine de question, j'aimerais automatiser le plus possible par des boucles. De plus, après l'affichage des questions, vient le traitement des réponses.
    Une question sous-jacente se pose également: comment récupérer les valeurs d'une variable "Array" dans une autre procédure? VBA n'accepte pas la déclaration "Public" pour les "Array". Le cas échéant, je créerai un autre post dans le forum.

    Bonne soirée

    Harry

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Points : 730
    Points
    730
    Par défaut
    Tu es vraiment opposé à mettre les questions et les réponses dans un tableau Excel ?
    C'est la façon la plus simple pour les gérer.

    PPz
    La qualité et la précision de la réponse sont proportionnelles à celles de la question.

  5. #5
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2008
    Messages : 225
    Points : 155
    Points
    155
    Par défaut
    Re,
    La remarque est pleine de bon sens.
    Le but final, mais j’en suis encore très très loin, est d’envoyer la présentation en pps aux amis et autres connaissances pour les vœux de fin d’année. C’est pourquoi je veux me limiter à un seul fichier.
    Le scénario est très simple (pas sa réalisation, je crains) : A chaque bonne réponse au quizz, une lettre s’affiche à l’écran ; l’ensemble formera « Je vous souhaite une bonne et heureuse année » ou quelque chose de similaire. A chaque mauvaise réponse, un élément du « bonhommependu » s’affichera. A la neuvième mauvaise réponse, le dessin se décompose mais un message de « Bonne Année » s’affichera quand même ». Cela paraît complexe mais réalisable vu qu’un problème complexe n’est qu’une somme de problèmes simples.
    Les traitements sont nombreux, d’où mon souci d’utiliser des boucles et des Arrays indicées (voir la question de base). Cela dit, si le problème de passage d’array entre procédures n’a pas de solution, je dois revoir la technique.

    Excellente journée
    Harry

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Points : 730
    Points
    730
    Par défaut
    Suite,

    Ton appli m'intéresse, si nous continuons de coopérer j'aimerai en avoir un verre ;+)

    Une autre proposition pour saisir les textes est la suivante

    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
    27
    28
    29
    30
    31
    32
     
    i = i + 1
    Question(i) = " Quel est le cépage qui fut traité de plant déloyal et banni de Bourgogne par le duc Philippe le Hardi en 1395 ? "
    Prop1(i) = "La syrah"
    Prop2(i) = "Le gamay "
    Prop3(i) = "Le pinot noir "
    Indice(i) = "Chassé de la Côte d'Or, c'est en Beaujolais que le gamay trouva son terroir de prédilection. "
    Solution(i) = 2
     
    i = i + 1
    Question(i) = " On compte en France plus de cinq cents Appellations Contrôlées. Quelle est - en superficie - la plus petite ?"
    Prop1(i) = "La Romanée "
    Prop2(i) = "Le Montrachet "
    Prop3(i) = "Château Grillet  "
    Indice(i) = "La Romanée ne fait que 85 ares contre 2 1/2 hectares pour le Château-Grillet et 8 hectares pour le Montrachet. "
    Solution(i) = 1
     
    i = i + 1
    Question(i) = " Dans quel département se trouve le célèbre Château-Grillet - perle des Côtes du Rhône septentrionales ?"
    Prop1(i) = "Le Rhône "
    Prop2(i) = "La Loire "
    Prop3(i) = "L'Ardèche "
    Indice(i) = "Le vignoble de Condrieu - son voisin immédiat - s'étend sur les trois départements.  "
    Solution(i) = 2
     
    i = i + 1
    Question(i) = " "
    Prop1(i) = " "
    Prop2(i) = " "
    Prop3(i) = " "
    Indice(i) = " "
    Solution(i) = 0
    Avec cette version le code devrait être plus facile à écrire.
    A+
    La qualité et la précision de la réponse sont proportionnelles à celles de la question.

  7. #7
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2008
    Messages : 225
    Points : 155
    Points
    155
    Par défaut
    Bonjour PPz78,

    C'est toujours avec plaisir que je partage une bouteille. Même les vins de la Meuse s'améliorent.
    La solution suggérée facilite le code d'un module mais ne résout pas le problème de passage de paramètres entre procédures événementielles.
    J'ai créé une discussion à ce sujet dans le forum "Général VBA"

    Si la question reçoit une réponse, je continue la développement dans ce sens sinon je devrai réfléchir à une autre approche.

    Bonne journée

    Harry

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Points : 730
    Points
    730
    Par défaut
    Bonjour,
    La solution que je te propose ne contient pas d'Array, les tableaux à une dimension déclarés Public passent entre les modules et les procédures.
    A+
    La qualité et la précision de la réponse sont proportionnelles à celles de la question.

  9. #9
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2008
    Messages : 225
    Points : 155
    Points
    155
    Par défaut
    Bonjour PPz78,

    Comme je suis pour la concision et que je fais une consommation immodérée des boucles, je me suis inspiré de la solution proposée en créant une variable Public intermédiaire.

    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
    27
    28
    29
    30
    Option Base 1
    Public nr_question As Integer
    Public recap 'la variable intermédiaire
    Sub CmdBtn_start_Click()
    Dim question1(), question2()
    Dim question(2, 6)
    
    question1 = Array("Quel est le cépage qui fut traité de plant déloyal et banni de Bourgogne par le duc Philippe le Hardi en 1395 ?", _
                "La syrah", "Le gamay", "Le pinot noir", _
                "Chassé de la Côte d'Or - c'est en Beaujolais que le gamay trouva son terroir de prédilection.", _
                "3")
    question2 = Array("On compte en France plus de cinq cents Appellations Contrôlées. Quelle est - en superficie - la plus petite ?", _
                "La Romanée", "Le Montrachet", "Château Grillet", _
                "La Romanée ne fait que 85 ares contre 2 1/2 hectares pour le Château-Grillet et 8 hectares pour le Montrachet.", _
                "2")
    For i = 1 To 6
        question(1, i) = question1(i)
    Next
    For i = 1 To 6
        question(2, i) = question2(i)
    Next
    tbx_question.Value = question(nr_question, 1)
    
    For x = 2 To 4
    cbx_choix.AddItem question(nr_question, x)
    Next
    recap = question(nr_question, 1) & "," & question(nr_question, 2) & "," & _
            question(nr_question, 3) & "," & question(nr_question, 4) & "," & _
            question(nr_question, 5) & "," & question(nr_question, 6)
    End Sub
    La variable "recap" est utilisée dans la procédure combobox_change
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    base(x) = Mid(recap, anc_pos + 1, Len(recap) - (anc_pos + (Len(recap) - virgule(x))) - 1)
    Il ne me reste plus qu'à m'occuper du show.
    Quand j'aurai terminé, je ferai parvenir les raisonnements par MP

    Encore merci pour les pistes

    Harry

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

Discussions similaires

  1. récupérer la valeur d'une liste déroulante dynamique
    Par grinder59 dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 23/01/2006, 17h51
  2. Liste déroulante dynamique
    Par Screw16 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/10/2005, 20h37
  3. [HTML] liste déroulante dynamique
    Par lacousinee dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 04/08/2005, 20h51
  4. Liste déroulante dynamique ?
    Par Regis.C dans le forum Composants
    Réponses: 5
    Dernier message: 29/06/2005, 12h09
  5. [FORMULAIRE] Liste déroulante dynamique
    Par bchristo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/01/2005, 10h07

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