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.
Par ex:

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"
Sinon
  • >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

Bonsoir

Pour débuter

Merci beaucoup, rien à redire c'est ce que je désirais!

Le seul souci c'est que je ne déchiffre pas le code Ce n'est pas de mon niveau, donc je me permettrais juste une question:

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 Number Two

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 2

Le 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 If

Tout ç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 , que j'arrive à comprendre et donc à modifier.

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 ), avec même des couleurs. Il n'y a que le tirage au sort qui me pose un souci.

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 Long

Dans l’initialisation de chaque ListBox, tu sauves le numéro de ligne (exemple avec la ListBox1)

ListBox1.List(ListBox1.ListCount - 1, 1) = i + 1

Dans le code Question tu récupères cette valeur avant d'effacer le choix

Exemple

LigneReponse = ListBox1.List(ALEATOIRE, 1)
ListBox1.RemoveItem (ALEATOIRE)
Else

Ensuite pour la vérification tu récupères la cellule de cette ligne

trad = Sheets("Feuil1").Cells(LigneReponse, 2).Text
Else

Pour 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 Sub

Bonjour!

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 Then

Avant 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
Loop
Laffitte 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 je m'excuse, je suis vraiment fatigué, réponse évidente pour les labels et cellules F. Merci de me recadrer !

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

Rechercher des sujets similaires à "fiche revision forme questionnaire"