Fiche de révision sous forme de questionnaire
Bonsoir a tous,
Je m'excuse je débute car je viens de découvrir excel Vba, à travers mes cours, j'aime beaucoup et je trouve cela très intéressant au point que j'aimerais me créer un programme afin de mieux réviser mon japonais! Le seul problème c'est que je ne sais pas comment m'y prendre et après avoir farfouillé pendant des heures je me décide à demander de l'aide.
Mon idée, dans l'idéale, est la suivante:
- Mettre dans la colonne A les mots en japonais.
- Mettre dans le colonne B les mots en francais.
colonneA: colonne B:
aa xx
bb yy
cc zz
*Cliquer sur un bouton pour lancer une Userform composer de deux zones de texte
Celle ci au déclenchement lance un programme de tirage aléatoire entre la colonne A ET B.
->Si le tirage a choisit un mots de la colonne A,
Alors la zone de texte de gauche est remplit par le mot japonais tirer au sort.
et celle de droite est vide. Afin de la remplir.
Sinon c'est la zone de gauche qui est vide et celle de droite avec le mot francais.
*Ensuite je remplit la zone de texte avec la traduction et je valide (bouton à cliquer ou appuyer sur entrer)
Si ma réponse correspond à la vraie traduction (situé dans la colonne B si le mot tiré au sort est dans le colonne A et vice-versa)
alors un tableau est crée avec:
- >Colonne C le mot tirer aléatoirement
- >Colonne D ma traduction en vert
- Colonne E "vide"
- >Colonne C le mot tirer aléatoirement
- >Colonne D ma traduction en rouge
- >Colonne E la bonne traduction.
Puis l'application se relance. Possiblité de m'être un compte-tour tout simple pour connaître la plus grande suite juste ou autres mais c'est autre chose
Donc voilà l'idée, j'espère que vous pourrez m'aider!
N'ayant point de réponse, je m'inquiète. Aurais-je mal exprimé mon idée?
C'est mon 1er post sur un forum technique, et dans une matière que je ne maitrise pas pour le moment, il se peut qu'il manque quelque chose à mon premier post?
Je me permet de préciser, c'était un post explicatif, dans l'idéal ce que j'aimerais obtenir à la fin, je ne demande pas à ce que l'on me fasse tout le programme, vous n'êtes pas la pour ca.
Ce qu'il me faudrait, c'est ce qui me bloque, c'est-a-dire le code pour un tirage aléatoire de deux colonnes et la comparaison de deux mots (la bonne et ma traduction).
Tout le reste, que ce soit userform,label, codage des if/else, etc.. je m'en débrouillerais (j'espère
Le tableau de la même manière est subalterne, je ne me suis même pas encore renseigné sur le sujet actuellement, dans l'ordre des choses j'ai d'abord besoin du début du code avant de penser à la fin
Voilà, je vous joint ce que j'ai réussi à faire pour le moment. C'est assez basique désolé.
Mais j'ai un problème:
* Si on me demande la lettre "a" (cell 1,1) et que je répond "nord" (cell 1,2)
La recherche de mot fonctionnera, il trouvera bien la ligne et colonne et pourra comparer ma réponse à celle de la traduction juste.
Cependant, si on me demande une autre lettre, qu'importe laquelle, mettons "b" (cell 2,1), et que je répond "sud" (cell 2,1)
il ne trouvera pas le mot. Idem pour tous les mots, si ils ne sont pas situé dans la cell en 1,X
Savez vous pourquoi et comment régler le problème?
De plus, le tirage au sort est uniquement pour une colonne, donc la recherche de réponse et comparaison ne marche également dans un sens (on demande un mot de la cellule A et non de A ou B).
PS: pour lancer l'application:
*bouton 1 : charge l'userform
*start: lane le tirage
*emplir la textbox 1 et cliquer sur check pour vérifier.
*Quitter pour arreter l'userform
Merci beaucoup, rien à redire c'est ce que je désirais!
Le seul souci c'est que je ne déchiffre pas le code
Comment faire pour décaler la colonne du japonais? les mots écrits en francais sont parfois trop grands, et j'aimerais décalé le japonais de la colonne 2 à la colonne 3 dans le code. Que dois je modifier et ou?
Mais sinon merci encore!
Bonsoir
Pas évident car justement la macro est pensée dans le cas ou les 2 colonnes sont côte à côte
Mais tu peux élargir les colonnes
Wouah
Je ne savais meme pas que c'était possible de faire une macro par rapport au fait que des colonnes soient accolées ou non ^^
A moins que tu n'es crée un tableau tout simplement? Je vais demander a mon professeur de me déchiffrer le code demain si il a le temps :p
Wouah
J'étais tellement dans le code VBA que je n'ai même pas pensé à agrandir les colonnes...
Et bien merci alors! ! Je vais essayer de me faire un tableau avec un récapitulatif des questions posées maintenant, je repasserai sans doute sur ce fil ^^
En attendant merci encore et bonne soirée
EDIT: Ah si alors, si je créais une troisième colonne que je souhaite insérer dans le tirage aléatoire? comme par ex. la traduction en italien. Il y a un moyen de l'insérer facilement en accolant la 3ème colonne?
Bonsoir
Tu as du voir lors de l'initialisation de la listbox, je fais For I = 0 to 1
En fonction de I je trouve la bonne colonne à mettre dans la ListBox en colonne 1 et la bonne colonne à mettre dans la ListBox en colonne 2
With Me.ListBox1
.AddItem Ws.Cells(Tablo(J), I + 1) ' Facile I + 1 pour avoir la bonne colonne
.List(.ListCount - 1, 1) = Ws.Cells(Tablo(J), 2 + (I = 1)) ' En fonction de I on obtient la colonne 1 ou la 2Le code précédent permet de remplacer ce code
With Me.ListBox1
If I = 0 Then
.AddItem Ws.Cells(Tablo(J), 1)
.List(.ListCount - 1, 1) = Ws.Cells(Tablo(J), 2)
Else
.AddItem Ws.Cells(Tablo(J), 2)
.List(.ListCount - 1, 1) = Ws.Cells(Tablo(J), 1)
End IfTout ça pour te dire que de rajouter une 3ème colonne, il faut repenser au code
Et ce n'est que la partie initialisation il reste la partie tirage des questions et vérification qui utilise ce principe
Entendu!
Etant donné que je ne suis pas à l'aise avec les tableaux, ne les ayant pas encore vu en cours ni par moi même, j'ai continué mon pogramme avec un code de mon niveau
En m'inspirant au passage du tien, j'espère que cela ne te pose pas problème?
Cependant, j'ai justement un problème ^^
Tout marche à merveille, j'ai réussi à créer mon tableau récapitulatif à la fin (en étant sioux, vu que je ne sais pas faire de tableau
Il tire au sort dans une liste qui contient toutes les données, à chaque fois qu'il tire au sort un mot, je récupère son numéro de ligne (+1 vu qu'une liste commence à 0 et non 1) afin de chercher sa traduction sur la même ligne mais en décalant la colonne de 1.
Le problème c'est que je le supprime également de la liste afin qu'il ne puisse pas me le tirer une seconde fois. Et ce faisant je décale tout les indices de la liste! Donc quand je continue à tirer au sort un mot, il n'arrivera pas à me trouver la bonne traduction car l'indice des lignes ne sera plus bon!
Sauriez vous comment remédier à cela? (sans refaire le code de A à Z si possible, car de la même manière, je ne saisirais plus grand chose)
Merci!
PS question bonus non vitale: Les couleurs dont j'ai accès pour colorier mon tableau sont limitées par des chiffres (1 ou 2 ou 3 etc...), ou peut on trouver plus de couleurs et comment les insérées? car j'imagine que si je remplace juste mes "3" ca ne marchera pas ce serait trop facile ^^
Bonsoir
Tu as raison c'est le meilleur moyen d'apprendre
Ce que tu pourrais faire
Déclaration d"une variable globale
Dim LigneReponse As LongDans l’initialisation de chaque ListBox, tu sauves le numéro de ligne (exemple avec la ListBox1)
ListBox1.List(ListBox1.ListCount - 1, 1) = i + 1Dans le code Question tu récupères cette valeur avant d'effacer le choix
Exemple
LigneReponse = ListBox1.List(ALEATOIRE, 1)
ListBox1.RemoveItem (ALEATOIRE)
ElseEnsuite pour la vérification tu récupères la cellule de cette ligne
trad = Sheets("Feuil1").Cells(LigneReponse, 2).Text
ElsePour les couleurs des cellules, comme tu es avec XL 2010 tu as une foultitude de couleurs, je crois qu'il faut passer par interior.Color = .......
Réponse simple et efficace, merci beaucoup! Mon programme fonctionne donc maintenant de A à Z =D
Pour les couleurs oui et non, en passant par interior.color ca marche, mais je suis limité au 56 couleurs de la palette comme le code que j'utilise actuellement:
"Cells(i, 7).Interior.ColorIndex = 4"
Et les couleurs ne sont pas très chaleureuse car basique.
J'ai créer une autre couleur et récupérer son code couleur, mais que je l'utilise en RGB, long, ou hexadécimale cela ne fonctionne pas:
"Cells(i, 7).Interior.ColorIndex = RGB(127, 255, 0)"
"Cells(i, 7).Interior.ColorIndex =65439"
"Cells(i, 7).Interior.ColorIndex =&HFF9F"
Mon instant disait vrai, juste remplacer la valeur 4 par une autre, c'était trop simple ^^
Bonjour
Passe par la propriété Color
Sub test()
i = 2
Cells(i, 7).Interior.Color = RGB(127, 255, 0)
i = 4
Cells(i, 7).Interior.Color = 65439
i = 6
Cells(i, 7).Interior.Color = &HFF9F
End SubBonjour!
Merci à nouveau pour ta réponse,
en effet en enlevant le . index cela marche pour les trois. Dans quel cas doit t-on l'utiliser alors?
Bonjour
Colorindex fonctionne de 0 à 56
Aussi avec XlNone
Hum, l'index est donc par rapport à la palette de base de excel. Compris!
XlNone. Je l'ai vu de nombreuses fois lors de mes recherches, que ce soit pour des cellules, tableaux et des choses que je ne comprenais pas.
Sais tu où je pourrais trouver des informations sur cette "fonction"? L'aide de microsoft office ne l'indique pas.
EDIT: Quand je dis Xlnone, j'entend égalment Xlup, Xlprevious etc...
Bonjour
Comme ces mots je ne les ai pas inventé, j'ai du les trouver dans l'aide
Il faut regarder aussi le code quand tu enregistres une macro, par exemple lorsque tu colorises une cellule avec "Aucun remplissage"
Il y a beaucoup de paramètres trouvés dans l'aide d'une fonction
Je ne sais pas s'il existe une base de données (quoique le contraire ne m'étonnerait pas) recensant tous les paramètres
Etrange, j'ai regardé une nouvelle fois et rien. L'aide sur les macros est ridicule.
Et sur google je ne trouve qu'en anglais les sites parlant de Xl ^^ je vais remettre cette découverte à plus tard alors.
Je me permet de joindre une nouvelle fois mon fichier, il y a, pas un problème cette fois, mais deux interrogations qui me tracassent:
La première: J'ai créer un Label 2 et 3 dans mon userform il y a plusieurs jour, ils ne me servent pas. J'aimerais les supprimer sauf que je ne les voient nulles part dans mon userform, uniquement dans la liste de commande en haut du programme, comment faire pour les retrouver? ou les supprimer directement?
Deuxièmement, sur la feuil1, on remarque que la cellule F13 et F14 écrivent différamment! Il n'y a aucune raison à cela à ma connaissance, aurais-je raté quelque chose?
EDIT: Et au passage! quand j'arrive en bout de listbox, j'ai un message d'erreur qui s'affiche si je clique a nouveau sur "question". Logique bien entendu! mais comment faire pour l'empêcher cela? en créant par ex un message, en réinitialisant ou quittant l'userform plûtôt que d'avoir ce message d'erreur.
Je pensais faire un if listbox est vide then etc... mais comment marquer en macro "listbox vide"?
Bonjour
Laffitte a écrit :Deuxièmement, sur la feuil1, on remarque que la cellule F13 et F14 écrivent différamment!
Tu es en bleu, en gras et un jeu de caractère différent changes le style et la couleur des caractères
Laffitte a écrit :Je pensais faire un if listbox est vide then
essayes plutôt
If Me.ListBox1.ListCount = 0 ThenAvant de faire un tirage de question
Tester les 2 Listbox
ensuite après le tirage tester la ListBox correspondante
If Me.ListBox1.ListCount = 0 And Me.ListBox2.ListCount = 0 Then
MsgBox "Plus de question"
Exit Sub
End If
Do
xx = Int((2 * Rnd) + 1)
If Me.Controls("ListBox" & xx).ListCount > 0 Then Exit Do
LoopLaffitte a écrit :La première: J'ai créer un Label 2 et 3 dans mon userform
Label2 = Français
Lable3 = Japonais
Ces labels servent
Roh
Une question:
Pourquoi/A quoi servent les "Me." que tu utilises à chaques fois dans tes programmes?
Et merci pour le code, j'avais en effet oublier de faire le cas où l'une des listes est vide mais l'autre non. Le code permet de régler ceci en plus.
Bonsoir
Laffitte a écrit :Pourquoi/A quoi servent les "Me."
Tapes juste Me. dans le module de ton Userform et tu verras
Me.Si tu ne vois pas je te ferai une capture écran
Me représente l'objet dans lequel tu écris la macro