Lancer des userforms aléatoirement

Fermé
pierreLH Messages postés 11 Date d'inscription dimanche 21 décembre 2014 Statut Membre Dernière intervention 18 janvier 2016 - Modifié par jordane45 le 22/12/2014 à 12:18
pierreLH Messages postés 11 Date d'inscription dimanche 21 décembre 2014 Statut Membre Dernière intervention 18 janvier 2016 - 19 janv. 2015 à 18:19
Bonjour,

je voudrais lancer des userforms aléatoirement, le code ressemble à ça:
Sub kies()
menu.Show
question1.Show
question2.Show
question3.Show
question4.Show
question5.Show
question6.Show
question7.Show
End Sub

Mon objectif est de faire apparaitre les questions dans le désordre. L'idée que j'ai serai d'insérer une variable i dans le nom de la userform:

Sub kies()
menu.Show
randomize(i)
question(i).Show
End Sub


Mais je ne sais pas utiliser l'outil randomize avec VBA et ej ne veux pas qu'une question apparaisse deux fois. Pourriez vous m'aider s'il vous plait?

Merci et bonnes fêtes!


EDIT : Ajout des balises de code


3 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
22 déc. 2014 à 09:21
Bonjour,

une facon de faire:

Sub kies()
Dim TAleat() As Long, UF

Menu.Show

ReDim TAleat(1 To 6)
'appel fonction remplissage
TAleat() = Aleat_TQuestion()
For Question = 1 To 6
'choix UF en fonction table TAleat()
UF = Choose(TAleat(Question), "Question1", "Question2", "Question3", "Question4", "Question5", "Question6")
'Affichage UF
VBA.UserForms.Add(UF).Show
Next
End Sub

'remplissage tableau aleatoire sans doublon
Function Aleat_TQuestion()
Dim i As Long, n As Long
Dim numQuestion(1 To 6) As Long
Dim numCollection As New Collection
'Creation et utilisation d'une collection pour obtenir
'une table de numeros sans doublon
With numCollection
For i = 1 To 6
.Add i
Next
For i = 1 To 6
'nombre aleatoire de 1 a 6 avec -1 par tour: 5,4.......
n = Rnd * (.Count - 1) + 1
'ecriture table des numero de questions
numQuestion(i) = numCollection(n)
'suppression de l'Item(ici un nombre) de la collection
'pour ne pas l'avoir une deuxieme fois
.Remove n
Next
End With
Aleat_TQuestion = numQuestion()
Set numCollection = Nothing
End Function
1
pierreLH Messages postés 11 Date d'inscription dimanche 21 décembre 2014 Statut Membre Dernière intervention 18 janvier 2016
Modifié par jordane45 le 22/12/2014 à 12:16
C'est génial! Je n'avais pas pensé à utiliser une fonction. Ca marche du tonnerre merci beaucoup.

Dernier service, je voudrais ajouter une condition d'arrêt.Il faudrait que les questions n'apparaissent plus lorsqu'une variable atteint une valeur donnée, en l'occurence:

loop until c=1
c = Application.Sum(Range("B1").EntireColumn)

Comment rajouter cette condition dans le code? J'ai essayé plusieurs choses, notamment ceci mais ça ne marche pas:

Sub kies()
    Dim TAleat() As Long, UF
    Dim c As Integer    

        Menu.Show
    
    ReDim TAleat(1 To 6)
    TAleat() = Aleat_TQuestion()
    Do until c = 1
    c = Application.Sum(Range("B1").EntireColumn)
        UF = Choose(TAleat(Question), "Question1", "Question2", "Question3", "Question4", "Question5", "Question6")
        VBA.UserForms.Add(UF).Show
    Loop

End Sub


EDIT : Ajout des balises de code
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > pierreLH Messages postés 11 Date d'inscription dimanche 21 décembre 2014 Statut Membre Dernière intervention 18 janvier 2016
Modifié par f894009 le 22/12/2014 à 16:55
Re,

je voudrais ajouter une condition d'arrêt Oui, mais ce que vous avez ecrit ne peut pas marcher.

Que comptez vous faire avec ceci:
c = Application.Sum(Range("B1").EntireColumn) 
vu qu'il n'y a pas de decompte des cellules colonne B ?????????????????
0
pierreLH Messages postés 11 Date d'inscription dimanche 21 décembre 2014 Statut Membre Dernière intervention 18 janvier 2016 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
22 déc. 2014 à 18:35
La colonne B est remplie initialement de 1. Selon les réponses aux questions, certaines cellules de cette colonne changent de valeur, elle deviennent 0. Je veux que les questions s'arretent lorsqu'il n'y a plus qu'une cellule avec un 1. Pour ça j'ai eu l'idée de sommer chaque cellule de la colonne et d'arreter la boucle lorsque cette somme vaut 1.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
23 déc. 2014 à 11:12
Bonjour,

La, il me faut votre fichier, puisque la programmation depend de celui-ci. Detaillez le fonctionnement, parce qu'il faudrait (je suppose) que seules les questions non valide doivent etre reposees ou ..... expliquez votre demarche

Pour transmettre un fichier,
il faut passer par un site de pièce jointe tel que cijoint.com

Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cijoint",
Copier le lien,
Revenir ici le coller dans une réponse...
0
pierreLH Messages postés 11 Date d'inscription dimanche 21 décembre 2014 Statut Membre Dernière intervention 18 janvier 2016
23 déc. 2014 à 15:05
https://www.cjoint.com/?0LxpivSWla3

Il s'agit d'un Qui est-ce?
Le programme est très simple:
Un tableau comporte toutes les caractéristiques des personnes, 1 pour vrai et 0 pour faux.
A chaque question il faut cliquer sur oui ou non, le userform va chercher dans la colonne correspondante les 0 ou les 1, selon la réponse. Si la caractéristique ne correspond pas avec la réponse, alors la valeur dans la colonne B assignée à chaque personne devient 0. (Initialement elles sont toutes 1). La dernière personne qui a un 1 est donc la personne que l'on cherche.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
21 déc. 2014 à 17:54
Bonjour,

A quoi sert menu.show et comment lancez-vous Sub kies() ?????
0
pierreLH Messages postés 11 Date d'inscription dimanche 21 décembre 2014 Statut Membre Dernière intervention 18 janvier 2016
21 déc. 2014 à 19:31
menu.show est une un userform qui lance le jeu.

sub.keys est la macro que je lance manuellement, pour l'instant
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
26 déc. 2014 à 12:37
Bonjour,

Pour revenir à la question initiale vu que tous les UF sont identiques (oui/non) pourquoi ne pas en mettre qu'un seul et changer son texte et son image de fond ?
eric
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 27/12/2014 à 13:45
Bonjour eriiic,

C'est ce que je veux arriver a faire entendre a pierreLH, mais pour le moment son code pour les questions/reponses est un peu portnawak et y pas les infos par UF pour lui faire un exemple
0
pierreLH Messages postés 11 Date d'inscription dimanche 21 décembre 2014 Statut Membre Dernière intervention 18 janvier 2016
19 janv. 2015 à 18:19
Bonsoir,

désolé pour lé délai
en effet, changer le texte et l'image serait une bonne idée.
mon objectif est de lancer les questions jusqu'à ce que le programme trouve la bonne personne
0