Lancer des userforms aléatoirement

pierreLH Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
pierreLH Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -
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


A voir également:

3 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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   Statut Membre Dernière intervention  
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713 > pierreLH Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   > f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention  
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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   Statut Membre Dernière intervention  
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

A quoi sert menu.show et comment lancez-vous Sub kies() ?????
0
pierreLH Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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   Statut Membre Dernière intervention  
 
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