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 Discussion :

VBA stocker les réponses d'une boucle test dans une variable


Sujet :

VBA

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut VBA stocker les réponses d'une boucle test dans une variable
    Bonjour,

    Voilà je code actuellement un petit programme pour faire un Quizz sous Powerpoint et intégrer une fonction de réception des erreurs du quizz par mail.
    Ma requête est plutôt simple je souhaite avoir dans mon mail toutes les questions pour lesquels la personne ayant réalisé le quizz s'est trompée.
    En langage général informatique pouvoir avoir une boucle qui vérifie si la réponse de l'utilisateur est bonne si ce n'est pas le cas elle stocke : La question, la réponse de l'élève et la réponse correcte. Ainsi de suite en imaginant que si j'ai 3 erreurs j'aurais les 3 questions ou je me suis trompée.

    Voici le bout de 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub envoiMail()
     
        Dim ScoreCard As Integer
        Dim Ctr As Integer
        Dim X As Integer
        Dim MaMessagerie As Object
        Dim MonMessage As Object
        Dim AnsNo As String
        Dim AnsList As String
        Set MaMessagerie = CreateObject("Outlook.Application")
        Set MonMessage = MaMessagerie.CreateItem(0)
     
        For Ctr = 0 To NOOFQS - 1
        If Ans(Ctr) = UserAns(Ctr) Then ScoreCard = ScoreCard + 1      #scorecard variable permettant de compter le nombre d'erreurs au quizz
        Next Ctr
        AnsNo = "Vous avez : " & ScoreCard & " réponses correctes sur " & NOOFQS & vbCrLf & vbCrLf & "Les erreures faites au quizz sont les suivantes :" & vbCrLf
     
        For X = 0 To NOOFQS - 1                         # NOOFQS nombre de question dans le quizz
        If choices(X, UserAns(X)) <> choices(X, Ans(X)) Then
        AnsList = Qs(X) & vbCrLf & vbCrLf & "Votre réponse :" & choices(X, UserAns(X)) & vbCrLf & vbCrLf & "La réponse correcte :" & choices(X, Ans(X)) & vbCrLf
        AnsList = AnsList + Qs(X) & vbCrLf & vbCrLf & "Votre réponse :" & choices(X, UserAns(X)) & vbCrLf & vbCrLf & "La réponse correcte :" & choices(X, Ans(X)) & vbCrLf
        End If
        Next X
     
     
        MonMessage.To = "monadresse@mail.com"
        MonMessage.CC = ""
        MonMessage.Subject = "Réponses au questionnaire"
        contenu = "Bonjour,"
        contenu = contenu & Chr(10) & Chr(13)
        contenu = contenu & AnsNo
        contenu = contenu & AnsList
        MonMessage.Body = contenu
        MonMessage.Send
        Set MaMessagerie = Nothing
     
     
    End Sub
    Par conséquent je reçois un mail avec uniquement la dernière réponse à ma question, alors que j'aimerais avoir toutes les questions ou l'élève à répondu faux.

    Je sais qu'il y a une erreur dans la compréhension du stockage de variable mais j'ai essayé diverse solution et rien de ne fonctionne.

    Merci beaucoup d'avance pour votre aide !
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 271
    Points
    34 271
    Par défaut
    Salut,

    du coup si je comprends bien ,tu cherches à alimenter tes listes de reponses correctes vs celle de ton utilisateur, nommees dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Ans(Ctr)
    'et
    UserAns(Ctr)
    est-ce bien le cas ?

    Tu cherches donc a recuperer les informations depuis PPT ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je ne suis pas sure que ce soit exactement ce que vous me décrivez... ce que je veux c'est plutôt ça :

    J'ai un Quizz :

    1) blablala
    a)
    b)
    c)


    avec une trentaine de questions et je souhaite faire parvenir un mail a la fin du PPt qui envoie :

    Bonjour ,

    Vous avez 5 erreurs sur 30

    Vous avez fait des erreurs aux questions 3,4,9

    Voici les questions

    3) blabla
    reponse correcte :
    votre reponse :


    4) blablabalbal
    reponse correcte :
    votre reponse :

    et ainsi de suite...

    Je ne sais pas trop si c'est bien ce que vous aviez compris... J'ai repris en partie un code vba et approprié ducoup le Ctr javoue ne pas savoir pourquoi la personne l'a nommé comme cela...
    Tous ce qui concerne le mail fonctionne c'est juste que dans mon mail au lieu de recevoir toutes mes questions fausses je ne recois que la dernière ou j'ai répondu faux car ma boucle ne stocke pas les infos....
    Le fait de récuperer les questions reponses et etre en interaction avec le Diapo cela fonctionne déjà.
    Merci beaucoup

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour! Ton erreur se trouve dans ta boucle pour mémoriser les questions "ratées".
    Regarde ton code: tu appelles une boucle qui regarde toutes les réponses, le il regarde si la réponse est fausse. Quand c'est le cas, tu sauves la question+bonne réponse + mauvaise réponse dans Anslist SANS conserver les valeurs précédentes, puis tu sauvegarde une seconde fois la même chose.

    Si je devais deviner le résultat de ton mail, tu n'aurais pas seulement la drrnière question dedans, mais la dernière question deux fois, non?

    Pour régler ton problème, supprime une des deux lignes dans lesquelles tu définies Anslist (je te laisse voir laquelle )

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Stockage des données
    Bonjour! C'est exactement ce que vous m'avez decris. En reflechissant, je suis arrivée a la meme conclusion. Mon problème est de savoir comment coder une liste ou un tableau fictif dans lequel je peux stocker mes valeurs.
    Pouvez vous m'aidez sur la partie de code pour apprendre à stocker mes valeurs ?
    Car cest justement ce quil me manque et en cherchant en vba jai du mal a trouver car il faut identifier des cellules ou va etre stocké les données...
    Merci beaucoup pour votre aide.




    Citation Envoyé par Simplelook Voir le message
    Bonjour! Ton erreur se trouve dans ta boucle pour mémoriser les questions "ratées".
    Regarde ton code: tu appelles une boucle qui regarde toutes les réponses, le il regarde si la réponse est fausse. Quand c'est le cas, tu sauves la question+bonne réponse + mauvaise réponse dans Anslist SANS conserver les valeurs précédentes, puis tu sauvegarde une seconde fois la même chose.

    Si je devais deviner le résultat de ton mail, tu n'aurais pas seulement la drrnière question dedans, mais la dernière question deux fois, non?

    Pour régler ton problème, supprime une des deux lignes dans lesquelles tu définies Anslist (je te laisse voir laquelle )

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    dans ton cas, tu n'auras pas de problème, il suffit de prendre cette partie de ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AnsList = Qs(X) & vbCrLf & vbCrLf & "Votre réponse :" & choices(X, UserAns(X)) & vbCrLf & vbCrLf & "La réponse correcte :" & choices(X, Ans(X)) & vbCrLf
        AnsList = AnsList + Qs(X) & vbCrLf & vbCrLf & "Votre réponse :" & choices(X, UserAns(X)) & vbCrLf & vbCrLf & "La réponse correcte :" & choices(X, Ans(X)) & vbCrLf
    et de supprimer la première ligne.

    Pourquoi? La variable que tu utilise pour stocker le texte est une variable string: Anslist (définie l.9 de ton code). Une variable string, c'est comme une phrase: c'est une variable texte. Tout ce que tu vas mettre est du texte, un seul et long texte (du moins, pour ton code, je te conseille d'aller chercher des infos sur comment utiliser les arrays, les collections et les dictionnaires, il y a énormément de tutos écrits sur developpez.net, tout comme partout ailleurs sur internet, et il y a même de très bons tutos vidéos sur youtube (si tu parle anglais, mais c'est pas si compliqué avec les sous-titres) - je te conseille notamment WiseOwl, qui fait des tutos introductifs pas-à-pas très biens faits.)

    Pour en revenir à ton code, on a donc ta variable string définit en ligne 9. On n'y touche pas avant la ligne 18, c'est à dire jusqu'à la boucle, qui la remplit.
    Dans cette boucle, à chaque fois que la paire question+réponse donnée par l'utilisateur, ne correspond par à la paire question+réponse attendue, tu fais deux choses à Anslist:
    En premier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AnsList = Qs(X) & vbCrLf & vbCrLf & "Votre réponse :" & choices(X, UserAns(X)) & vbCrLf & vbCrLf & "La réponse correcte :" & choices(X, Ans(X)) & vbCrLf
    Du coup, on peut représenter ta variable comme ceci:
    "Question 1

    Votre Réponse : choix B

    La réponse correcte : choix D"

    Dans seconde opération:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        AnsList = AnsList + Qs(X) & vbCrLf & vbCrLf & "Votre réponse :" & choices(X, UserAns(X)) & vbCrLf & vbCrLf & "La réponse correcte :" & choices(X, Ans(X)) & vbCrLf
    Anslist est égale à la valeur d'éjà rentrée dans Anslist, + une nouvelle fois tout le texte.

    Tu vois l'erreur? A chaque tour dans la loop, tu écrase les données de ta question précédente pour tout réécrire. Alors que si tu gardes seulement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        AnsList = AnsList + Qs(X) & vbCrLf & vbCrLf & "Votre réponse :" & choices(X, UserAns(X)) & vbCrLf & vbCrLf & "La réponse correcte :" & choices(X, Ans(X)) & vbCrLf
    A chaque tour dans la loop, tu ajoute dans Anslist les informations liées aux questions.

    J'espère avoir pu être clair

Discussions similaires

  1. [PDO] Une boucle while dans une boucle while
    Par subran dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/02/2015, 19h32
  2. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  3. Réponses: 4
    Dernier message: 05/06/2008, 21h55
  4. [VBA-E] erreur 1004 et depassement de capacité dans une boucle
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 11/02/2007, 13h37
  5. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07

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