Variable composée
Résolu
Jimmy59116
Messages postés
45
Date d'inscription
Statut
Membre
Dernière intervention
-
Jimmy59116 Messages postés 45 Date d'inscription Statut Membre Dernière intervention -
Jimmy59116 Messages postés 45 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je prépare une appli pour gérer des questions et des réponses. Voici le modèle souhaité :
Numéro de la question = Num_MS (variable définie dans le code)
Identification de la réponse : MS_x (x étant la valeur de Num_MS)
Je souhaite pouvoir incrémenter le numéro de la réponse en fonction du numéro de la question ex :
Num_MS = 3
MS_ & Num_MS = Range("A1")
qui se traduira par MS_3 = Range("A1")
Si besoin, voici le code préparé :
' Positionnement sur la feuille QCM_MS
Sub MS_AFF()
screen_non
Sheets("QCM_MS").Select
Num_MS = 1
Range("D3") = Num_MS
screen_oui
End Sub
' Gestion des réponses : au clic sur bouton, la réponse s'affiche dans la cellule C6
Sub MS_B1()
Range("C6") = 1
End Sub
Sub MS_B2()
Range("C6") = 2
End Sub
Sub MS_B3()
Range("C6") = 3
End Sub
Sub MS_B4()
Range("C6") = 4
End Sub
Sub MS_BPASS()
Range("C6") = "Je passe"
End Sub
' Mise en variable de la réponse
Sub MS_REP()
MS_ & Num_MS = Range("C6").Value => C'est cette partie là du code qui ne fonctionne pas
reset 'effacer C6 et incrémenter numéro de question
Num_MS = Num_MS + 1
End Sub
J'imagine que ce n'est qu'une question de syntaxe, j'ai essayé de poser des parenthèses mais je bug...
D'avance, je vous remercie pour votre aide.
Cdt,
Jimmy
Je prépare une appli pour gérer des questions et des réponses. Voici le modèle souhaité :
Numéro de la question = Num_MS (variable définie dans le code)
Identification de la réponse : MS_x (x étant la valeur de Num_MS)
Je souhaite pouvoir incrémenter le numéro de la réponse en fonction du numéro de la question ex :
Num_MS = 3
MS_ & Num_MS = Range("A1")
qui se traduira par MS_3 = Range("A1")
Si besoin, voici le code préparé :
' Positionnement sur la feuille QCM_MS
Sub MS_AFF()
screen_non
Sheets("QCM_MS").Select
Num_MS = 1
Range("D3") = Num_MS
screen_oui
End Sub
' Gestion des réponses : au clic sur bouton, la réponse s'affiche dans la cellule C6
Sub MS_B1()
Range("C6") = 1
End Sub
Sub MS_B2()
Range("C6") = 2
End Sub
Sub MS_B3()
Range("C6") = 3
End Sub
Sub MS_B4()
Range("C6") = 4
End Sub
Sub MS_BPASS()
Range("C6") = "Je passe"
End Sub
' Mise en variable de la réponse
Sub MS_REP()
MS_ & Num_MS = Range("C6").Value => C'est cette partie là du code qui ne fonctionne pas
reset 'effacer C6 et incrémenter numéro de question
Num_MS = Num_MS + 1
End Sub
J'imagine que ce n'est qu'une question de syntaxe, j'ai essayé de poser des parenthèses mais je bug...
D'avance, je vous remercie pour votre aide.
Cdt,
Jimmy
A voir également:
- Variable composée
- Vba range avec variable ✓ - Forum VB / VBA
- Variable d'environnement temp ✓ - Forum Microsoft Office
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Le fichier à télécharger comporte une image composée de quatre calques numérotés de 1 à 4. dans la fenêtre des calques, mettez les calques dans cet ordre : 2 (tout en haut) 3 1 4 (tout en bas) quelle suite d’animaux s’affiche de gauche à droite ? - Forum Photoshop
5 réponses
Bonjour,
J'avoue ne pas saisir la question, mais cela ressemble fortement à une variable tableau.
Exemple :
En savoir plus...
J'avoue ne pas saisir la question, mais cela ressemble fortement à une variable tableau.
Exemple :
'dimensionnement de la variable tableau, 'ici elle n'acceptera que 4 "indices", de 0 à 3 Dim monTab(3) monTab(0) = Range("C6").Value monTab(1) = Range("C7").Value monTab(2) = Range("C8").Value monTab(3) = Range("C9").Value
En savoir plus...
Salut,
si c'est juste une variable, alors ce n'est pas possible (il faut passer, comme l'a justement dit pijaku, par un tableau).
Si c'est un objet, c'est possible grâce aux collections VBA, un exemple :
Feuill1.Controls("MS_" & i).text = "toto".
A+ blux
si c'est juste une variable, alors ce n'est pas possible (il faut passer, comme l'a justement dit pijaku, par un tableau).
Si c'est un objet, c'est possible grâce aux collections VBA, un exemple :
Feuill1.Controls("MS_" & i).text = "toto".
A+ blux
"Les cons, ça ose tout. C'est même à ça qu'on les reconnait"
Bonjour,
Je vous remercie pour la promptitude de vos réponses.
Je crains effectivement ne pas avoir été clair.
Pour plus de précisions : il s'agit d'un QCM de "matières scolaires", d'ou le MS qui précède tous les noms utilisés dans le code. Les questions sont posées à l'oral, le candidat répond sur un excel en cliquant sur des boutons (1,2,3,4, je passe).
Pour savoir où il en est dans le jeu, le numéro de la question "Num_MS" est affichée sur la feuille. Le but est de rester sur cette même feuille pour les 8 questions.
La réponse du candidat s'affiche en C6 à chaque fois. C'est ce résultat que je souhaite récupérer en variable. Le nom de cette variable doit être composée de (MS_) et suivie du numéro de la question. Ainsi, j'obtiens les réponses MS_1 ; MS_2...
A la fin des 8 questions, je récupère les réponses et les enregistres dans un autre fichier (le "temp").
Voici le code d'une réponse :
' Au clic sur le bouton MS_B1, un "1" s'affiche en C6
Sub MS_B1()
Range("C6") = 1
End Sub
Ensuite, pour aller à la question suivante, je passe par ces étapes :
- Enregistrer la réponse en variable
- Tester si on est à la fin du jeu (si oui, on passe à la section "fin")
- Effacer le champ dans lequel est apparue la réponse
- Incrémenter le numéro de question
'______________________________
' Récupération des réponses
Sub MS_REP()
' Mise en variable de la réponse
MS_x = Range("C6")
' Où "x" = Num_MS => l'étape que je ne parviens pas à résoudre
' Test du numéro de question
If Num_MS = 8 Then GoTo fin
' Passage à la question suivante
Range("C6") = ""
' Incrémentation du numéro de question
Num_MS = Num_MS + 1
' Affichage du nouveau numéro de question
Range("D3") = Num_MS
Exit Sub
' Au bout de 8 questions, enregistrement des réponses dans le temp "C1"
fin:
ACTIV_C1
Range("B10") = MS_1
Range("B11") = MS_2
Range("B12") = MS_3
Range("B13") = MS_4
Range("B14") = MS_5
Range("B15") = MS_6
Range("B16") = MS_7
Range("B17") = MS_8
FERMER
' Affichage d'une page d'attente
Sheets("ATT").Select
Application.Wait Now + TimeValue("00:00:02")
' Retour à la page Menu
Sheets("menu").Select
End Sub
Il y a peut-être plus simple à faire, mais en fait, il y a plusieurs candidats simultanés et plusieurs QCM à gérer, d'où mon essai de "compactage" du code.
J'espère que ces éclaicissements vous aideront à comprendre ma question, si besoin je peux mettre le fichier excel en ligne pour d'éventuels tests.
Une fois encore, je vous remercie pour vos brillantes idées !
Cdt,
Jimmy
Je vous remercie pour la promptitude de vos réponses.
Je crains effectivement ne pas avoir été clair.
Pour plus de précisions : il s'agit d'un QCM de "matières scolaires", d'ou le MS qui précède tous les noms utilisés dans le code. Les questions sont posées à l'oral, le candidat répond sur un excel en cliquant sur des boutons (1,2,3,4, je passe).
Pour savoir où il en est dans le jeu, le numéro de la question "Num_MS" est affichée sur la feuille. Le but est de rester sur cette même feuille pour les 8 questions.
La réponse du candidat s'affiche en C6 à chaque fois. C'est ce résultat que je souhaite récupérer en variable. Le nom de cette variable doit être composée de (MS_) et suivie du numéro de la question. Ainsi, j'obtiens les réponses MS_1 ; MS_2...
A la fin des 8 questions, je récupère les réponses et les enregistres dans un autre fichier (le "temp").
Voici le code d'une réponse :
' Au clic sur le bouton MS_B1, un "1" s'affiche en C6
Sub MS_B1()
Range("C6") = 1
End Sub
Ensuite, pour aller à la question suivante, je passe par ces étapes :
- Enregistrer la réponse en variable
- Tester si on est à la fin du jeu (si oui, on passe à la section "fin")
- Effacer le champ dans lequel est apparue la réponse
- Incrémenter le numéro de question
'______________________________
' Récupération des réponses
Sub MS_REP()
' Mise en variable de la réponse
MS_x = Range("C6")
' Où "x" = Num_MS => l'étape que je ne parviens pas à résoudre
' Test du numéro de question
If Num_MS = 8 Then GoTo fin
' Passage à la question suivante
Range("C6") = ""
' Incrémentation du numéro de question
Num_MS = Num_MS + 1
' Affichage du nouveau numéro de question
Range("D3") = Num_MS
Exit Sub
' Au bout de 8 questions, enregistrement des réponses dans le temp "C1"
fin:
ACTIV_C1
Range("B10") = MS_1
Range("B11") = MS_2
Range("B12") = MS_3
Range("B13") = MS_4
Range("B14") = MS_5
Range("B15") = MS_6
Range("B16") = MS_7
Range("B17") = MS_8
FERMER
' Affichage d'une page d'attente
Sheets("ATT").Select
Application.Wait Now + TimeValue("00:00:02")
' Retour à la page Menu
Sheets("menu").Select
End Sub
Il y a peut-être plus simple à faire, mais en fait, il y a plusieurs candidats simultanés et plusieurs QCM à gérer, d'où mon essai de "compactage" du code.
J'espère que ces éclaicissements vous aideront à comprendre ma question, si besoin je peux mettre le fichier excel en ligne pour d'éventuels tests.
Une fois encore, je vous remercie pour vos brillantes idées !
Cdt,
Jimmy
Et bien en fait, c'est bien une variable tableau dont tu as besoin.
En tête de module, je mettrais :
Option Explicit
Option Base 1
Dim MS_(8)
Dim Num As Integer
Regarde ce test à copier-coller dans un module standard :
En tête de module, je mettrais :
Option Explicit
Option Base 1
Dim MS_(8)
Dim Num As Integer
Regarde ce test à copier-coller dans un module standard :
Option Explicit Option Base 1 Dim MS_(8) Dim Num As Integer Sub Incremente() Dim i As Integer Num = Num + 1 If Num = 9 Then Num = 1 'ici on empêche simplement d'aller + loin que 8 MS_(Num) = "poireau " & Num For i = 1 To 8 'For i = LBound(MS_()) To UBound(MS_()) If MS_(i) <> "" Then MsgBox MS_(i) & " attribué à MS_ n° " & i Next i End Sub
Bonjour,
Merci pour votre aide, mais je suis un peu dépassé. J'ai regardé des tutos sur l'exploitation des tableaux, mais ils m'ont juste appris à afficher les données dans des msgbox...
Je ne comprends pas bien comment remplir le tableau à chaque validation du candidat et tout restituer à la fin dans mon "temp".
Voilà un sujet qu'il me faudra creuser. Quoi qu'à force de ramer sur le sable, je suis déjà en train de creuser :)
Avant de lire vos réponses, j'ai pensé à un subterfuge en mangeant : enregistrer dans le temp au fur et à mesure et le fermer ensuite, en me servant du numéro de la question pour définir la cellule de destination dans le temp.
Voici donc un code moins propre que la solution que vous me proposez, mais qui fonctionne... même si ce n'est pas l'idéal que je recherchais !
Je serais enchanté de voir comment intégrer la notion de tableau dans la routine du jeu, mais mon cerveau semble faire obstruction. Si vous avez la patience et le temps de corriger ce code avec la mise en application d'un tableau, j'en apprendrais un peu plus et me coucherais moins bête.
Cependant, je comprendrais fort bien que vous considériez à juste titre la question comme résolue.
Quoi qu'il en soit, plus je pratique Excel, plus je me rends compte que chaque petit bout de code appris révèle l'ampleur de ce que j'ignorais !
Trêve de bavardage, voici ma solution :
'______________________________
' Gestion des réponses
Sub MS_REP()
screen_non ' application.screenupdating = false
' Récupération de la réponse
MS_R = Range("C6")
' Définition de la destination dans le temp
MS_D = MS_Num + 10
' Activation du fichier "temp" dans lequel je range les réponses (ouvert en début de routine)
ACTIV_C1
' Remplissage du temp
Cells(MS_D, 2) = MS_R
' Ménage des variables temporaires
MS_R = ""
MS_D = ""
' Retour à l'interface utilisée par les joueurs
ACTIV_Cand1
' Test du numéro de question
If MS_Num = 8 Then GoTo fin
' Passage à la question suivante
Range("C6") = ""
MS_Num = MS_Num + 1
Range("D3") = MS_Num
screen_oui ' rétablissement de l'affichage
Exit Sub
' Fin du jeu
fin:
screen_non ' masquage de l'affichage
' Fermeture du temp
ACTIV_C1
FERMER ' save and close
' Affichage d'une page d'attente
Sheets("ATT").Select
screen_oui ' rétablissement de l'affichage
Application.Wait Now + TimeValue("00:00:02")
' Retour à la page Menu
Sheets("menu").Select
End Sub
Encore merci pour le temps que vous avez consacré à ce sujet et bon clavardage !
Cdt,
Jimmy
Merci pour votre aide, mais je suis un peu dépassé. J'ai regardé des tutos sur l'exploitation des tableaux, mais ils m'ont juste appris à afficher les données dans des msgbox...
Je ne comprends pas bien comment remplir le tableau à chaque validation du candidat et tout restituer à la fin dans mon "temp".
Voilà un sujet qu'il me faudra creuser. Quoi qu'à force de ramer sur le sable, je suis déjà en train de creuser :)
Avant de lire vos réponses, j'ai pensé à un subterfuge en mangeant : enregistrer dans le temp au fur et à mesure et le fermer ensuite, en me servant du numéro de la question pour définir la cellule de destination dans le temp.
Voici donc un code moins propre que la solution que vous me proposez, mais qui fonctionne... même si ce n'est pas l'idéal que je recherchais !
Je serais enchanté de voir comment intégrer la notion de tableau dans la routine du jeu, mais mon cerveau semble faire obstruction. Si vous avez la patience et le temps de corriger ce code avec la mise en application d'un tableau, j'en apprendrais un peu plus et me coucherais moins bête.
Cependant, je comprendrais fort bien que vous considériez à juste titre la question comme résolue.
Quoi qu'il en soit, plus je pratique Excel, plus je me rends compte que chaque petit bout de code appris révèle l'ampleur de ce que j'ignorais !
Trêve de bavardage, voici ma solution :
'______________________________
' Gestion des réponses
Sub MS_REP()
screen_non ' application.screenupdating = false
' Récupération de la réponse
MS_R = Range("C6")
' Définition de la destination dans le temp
MS_D = MS_Num + 10
' Activation du fichier "temp" dans lequel je range les réponses (ouvert en début de routine)
ACTIV_C1
' Remplissage du temp
Cells(MS_D, 2) = MS_R
' Ménage des variables temporaires
MS_R = ""
MS_D = ""
' Retour à l'interface utilisée par les joueurs
ACTIV_Cand1
' Test du numéro de question
If MS_Num = 8 Then GoTo fin
' Passage à la question suivante
Range("C6") = ""
MS_Num = MS_Num + 1
Range("D3") = MS_Num
screen_oui ' rétablissement de l'affichage
Exit Sub
' Fin du jeu
fin:
screen_non ' masquage de l'affichage
' Fermeture du temp
ACTIV_C1
FERMER ' save and close
' Affichage d'une page d'attente
Sheets("ATT").Select
screen_oui ' rétablissement de l'affichage
Application.Wait Now + TimeValue("00:00:02")
' Retour à la page Menu
Sheets("menu").Select
End Sub
Encore merci pour le temps que vous avez consacré à ce sujet et bon clavardage !
Cdt,
Jimmy
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re-bonjour,
Voici le lien : https://www.cjoint.com/?0AEp5S9s0cn
L'appli (qui se résume à 3 boutons pour le moment) est en feuille "QCM_MS".
Pour retrouver un affichage normal, utiliser la macro "DEV" (affichage des onglets, de la barre de formule...)
Bouton 1 : MS_AFF => initialisation du jeu (Affichage du numéro de question = N°1)
Bouton 2 : MS_B3 => Vous répondez "3" au CQM (c'est la bonne réponse, mais il ne faut pas le dire aux candidatns :))
Bouton 3 : MS_REP => Envoyer la réponse dans le temporaire.
Le fichier temporaire n'est pas en lien sur cijoint.com, mail il suffit d'utiliser une feuille vierge excel nommée C1_temp.xlsx
Attention, le code demande l'ouverture du fichier temp lorsque l'on clique sur "MS_AFF", il faut donc avoir créé le fichier et vérifier son adresse pour pouvoir exécuter.
Je n'en suis qu'à la carcasse du jeu, une fois celle-ci posée, je ferais la mise en forme. Pour le moment, je cherche à ce que le principe fonctionne avant d'aller plus loin.
L'exploitation des résultats compilés dans le temp est réalisée par un autre développeur, ce n'est qu'un fichier de "transit" des données.
Vous souhaitant une bonne journée.
Cdt,
Jimmy
Voici le lien : https://www.cjoint.com/?0AEp5S9s0cn
L'appli (qui se résume à 3 boutons pour le moment) est en feuille "QCM_MS".
Pour retrouver un affichage normal, utiliser la macro "DEV" (affichage des onglets, de la barre de formule...)
Bouton 1 : MS_AFF => initialisation du jeu (Affichage du numéro de question = N°1)
Bouton 2 : MS_B3 => Vous répondez "3" au CQM (c'est la bonne réponse, mais il ne faut pas le dire aux candidatns :))
Bouton 3 : MS_REP => Envoyer la réponse dans le temporaire.
Le fichier temporaire n'est pas en lien sur cijoint.com, mail il suffit d'utiliser une feuille vierge excel nommée C1_temp.xlsx
Attention, le code demande l'ouverture du fichier temp lorsque l'on clique sur "MS_AFF", il faut donc avoir créé le fichier et vérifier son adresse pour pouvoir exécuter.
Je n'en suis qu'à la carcasse du jeu, une fois celle-ci posée, je ferais la mise en forme. Pour le moment, je cherche à ce que le principe fonctionne avant d'aller plus loin.
L'exploitation des résultats compilés dans le temp est réalisée par un autre développeur, ce n'est qu'un fichier de "transit" des données.
Vous souhaitant une bonne journée.
Cdt,
Jimmy