Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Dans une macro, faire entrer une réponse par l'utilisateur

7 réponses
Avatar
Pierre F.
Bonjour =E0 toutes et tous;

Dans un projet que je commence, je souhaite afficher un mot pendant un=20
laps de temps (cellule B11); lorsque le mot dispara=EEt, je souhaiterais =
que=20
l'utilisateur le r=E9=E9crive (en b14) et qu'un test indique s'il a =E9cr=
it le=20
mot juste, auquel cas le mot suivant s'affichera ou que le mot soit=20
remontr=E9 s'il y a une erreur.

Comme tout ceci se passe dans une macro, et que mes connaissances en VBA =

sont tr=E8s lacunaires, je ne sais pas comment arr=EAter la macro jusqu'=E0=
ce=20
que l'utilisateur ait entr=E9 son mot.
Dans le projet final, il y aura =E9videmment une boucle pour afficher=20
successivement plusieurs mots)

J'ai essay=E9 "Inputbox" mais elle est affich=E9e au centre de l'=E9cran =
et son=20
look me g=EAne.

Merci de me donner une piste.

Cordialement,
Pierre F.

WindowsXP, Excel 2003

Le d=E9but du projet est l=E0:
http://cjoint.com/?0mrxqyGARod

7 réponses

Avatar
Gloops
Pierre F. a écrit, le 17/12/2010 23:18 :
Bonjour à toutes et tous;

Dans un projet que je commence, je souhaite afficher un mot pendant un
laps de temps (cellule B11); lorsque le mot disparaît, je souhaiterai s
que l'utilisateur le réécrive (en b14) et qu'un test indique s'il a
écrit le mot juste, auquel cas le mot suivant s'affichera ou que le m ot
soit remontré s'il y a une erreur.

Comme tout ceci se passe dans une macro, et que mes connaissances en VB A
sont très lacunaires, je ne sais pas comment arrêter la macro jusqu 'à ce
que l'utilisateur ait entré son mot.
Dans le projet final, il y aura évidemment une boucle pour afficher
successivement plusieurs mots)

J'ai essayé "Inputbox" mais elle est affichée au centre de l'écra n et
son look me gêne.

Merci de me donner une piste.

Cordialement,
Pierre F.

WindowsXP, Excel 2003

Le début du projet est là:
http://cjoint.com/?0mrxqyGARod





Bonjour,

Pour Access on peut créer un formulaire à afficher un temps
http://www.mvps.org/accessfr/forms/frm0046.htm

alors pour Excel on doit pouvoir adapter avec une boîte de dialogue
(UserForm).

Attention quand même que pour un "captcha" il faut afficher en mode
graphique pour rendre plus difficile la lecture par un programme.
Avatar
Pierre F.
Le 18.12.2010 10:14, Gloops a écrit :

Pour Access on peut créer un formulaire à afficher un temps
http://www.mvps.org/accessfr/forms/frm0046.htm

alors pour Excel on doit pouvoir adapter avec une boîte de dialogue
(UserForm).

Attention quand même que pour un "captcha" il faut afficher en mode
graphique pour rendre plus difficile la lecture par un programme.




Merci pour la piste.

Cela ne me convient pas car ce n'est pas "un certain temps" que je
souhaite interrompre la macro, mais "jusqu'à ce que l'utilisateur ait
répondu", ce qui peut être très variable selon les gens.

de plus, je suis totalement incompétent avec les userforms

Cordialement,
Pierre F.
Avatar
michdenis
Bonjour,

Voici un fichier exemple : http://cjoint.com/?0msnx9qY8rh


MichD
--------------------------------------------
"Pierre F." a écrit dans le message de groupe de discussion : 32660$4d0be1b7$55da2775$

Bonjour à toutes et tous;

Dans un projet que je commence, je souhaite afficher un mot pendant un
laps de temps (cellule B11); lorsque le mot disparaît, je souhaiterais que
l'utilisateur le réécrive (en b14) et qu'un test indique s'il a écrit le
mot juste, auquel cas le mot suivant s'affichera ou que le mot soit
remontré s'il y a une erreur.

Comme tout ceci se passe dans une macro, et que mes connaissances en VBA
sont très lacunaires, je ne sais pas comment arrêter la macro jusqu'à ce
que l'utilisateur ait entré son mot.
Dans le projet final, il y aura évidemment une boucle pour afficher
successivement plusieurs mots)

J'ai essayé "Inputbox" mais elle est affichée au centre de l'écran et son
look me gêne.

Merci de me donner une piste.

Cordialement,
Pierre F.

WindowsXP, Excel 2003

Le début du projet est là:
http://cjoint.com/?0mrxqyGARod
Avatar
Pierre F.
Le 18.12.2010 13:25, michdenis a écrit :
Bonjour,

Voici un fichier exemple : http://cjoint.com/?0msnx9qY8rh



Mille mercis michdenis!

Ça correspond déjà fort bien à mes attentes. J'ai remplacé le 6 0 par 20,
ce qui devrait être suffisant.

Toutefois je souhaite une orientation différente dans les cas de
dépassement du temps et j'ai de la peine à entrer dans les toutes les
imbrications des do, exit do, else, end if... :-(

Pour le cas où le temps est dépassé, je souhaiterais simplement que le
message "Temps dépassé, le mot va à nouveau être affiché." s'af fiche, avec
un simple OK dans la msgbox qui validera par défaut le réaffichage du mot
en cours.

Merci
------------------------
Attente_Pour_Usager 20
If Pause = False Then
If MsgBox("Désirez-vous avoir plus de temps ?", _
vbCritical + vbYesNo, "Attention") = vbNo Then
If Worksheets("Feuil1").Range("B14") = "" Then
MsgBox "Prodédure arrêtée, la cellule B14 " & _
"n'a pas été renseignée.", vbCritical + vbOKOn ly,
"Attention"
Exit Sub
Else
Exit Do
End If
Else
Exit Do
End If
Else
Pause = False: Exit Do
End If
Loop Until Pause = True
Pause = False
MsgBox "Bonjour" 'Pour les besoins du test seulement
-----------------------

Cordialement,
Pierre F.
Avatar
michdenis
Essaie comme ceci :

Ne pas oublier de regarder dans la feuille module de la feuille
du fichier transmis, il y a aussi un bout de code !

En remplacement de la procédure précédente...
'-----------------------------------
Sub Test()
'Ton Code

'appel de la pause
Do
'20 durée accordée à l'usager pour la saisie
'à toi de décider le temps limite avant de mettre
'fin à l'exécution de la procédure
Attente_Pour_Usager 20
If Pause = False Then
MsgBox "Temps dépassé, le mot va à nouveau être affiché.", _
vbCritical + vbOKOnly, "Attention"
Worksheets("Feuil1").Range("B14") = "Ce que tu veux!"
Exit Do
Else
Pause = False: Exit Do
End If
Loop Until Pause = True
Pause = False
MsgBox "Bonjour" 'Pour les besoins du test seulement

'Le reste de ton code
End Sub
'-----------------------------------



MichD
--------------------------------------------
"Pierre F." a écrit dans le message de groupe de discussion : 7c452$4d0cdaa8$55da2775$

Le 18.12.2010 13:25, michdenis a écrit :
Bonjour,

Voici un fichier exemple : http://cjoint.com/?0msnx9qY8rh



Mille mercis michdenis!

Ça correspond déjà fort bien à mes attentes. J'ai remplacé le 60 par 20,
ce qui devrait être suffisant.

Toutefois je souhaite une orientation différente dans les cas de
dépassement du temps et j'ai de la peine à entrer dans les toutes les
imbrications des do, exit do, else, end if... :-(

Pour le cas où le temps est dépassé, je souhaiterais simplement que le
message "Temps dépassé, le mot va à nouveau être affiché." s'affiche, avec
un simple OK dans la msgbox qui validera par défaut le réaffichage du mot
en cours.

Merci
------------------------
Attente_Pour_Usager 20
If Pause = False Then
If MsgBox("Désirez-vous avoir plus de temps ?", _
vbCritical + vbYesNo, "Attention") = vbNo Then
If Worksheets("Feuil1").Range("B14") = "" Then
MsgBox "Prodédure arrêtée, la cellule B14 " & _
"n'a pas été renseignée.", vbCritical + vbOKOnly,
"Attention"
Exit Sub
Else
Exit Do
End If
Else
Exit Do
End If
Else
Pause = False: Exit Do
End If
Loop Until Pause = True
Pause = False
MsgBox "Bonjour" 'Pour les besoins du test seulement
-----------------------

Cordialement,
Pierre F.
Avatar
Pierre F.
Le 18.12.2010 17:20, michdenis a écrit :
Essaie comme ceci :

Ne pas oublier de regarder dans la feuille module de la feuille
du fichier transmis, il y a aussi un bout de code !



Oui, je l'avais repérée :-)

Merci. Je teste tout ça entre ce soir et demain.
Je reviendrai avec une autre question dans un nouveau fil: Peut-on dans
excel limiter le clavier à quelques touches (celles du mot à écrire )?

Cordialement,
Pierre F.
Avatar
Pierre F.
Le 18.12.2010 17:20, michdenis a écrit :
Essaie comme ceci :

En remplacement de la procédure précédente...
'-----------------------------------
Sub Test()
'Ton Code

'appel de la pause
Do
'20 durée accordée à l'usager pour la saisie
'à toi de décider le temps limite avant de mettre
'fin à l'exécution de la procédure
Attente_Pour_Usager 20
If Pause = False Then
MsgBox "Temps dépassé, le mot va à nouveau être affich é.", _
vbCritical + vbOKOnly, "Attention"
Worksheets("Feuil1").Range("B14") = "Ce que tu veux!"
Exit Do
Else
Pause = False: Exit Do
End If
Loop Until Pause = True
Pause = False
MsgBox "Bonjour" 'Pour les besoins du test seulement

'Le reste de ton code
End Sub
'-----------------------------------




Merci Michdenis
Ça fonctionne comme je le veux. Super.
Je lance un autre fil pour la suite :-)

Cordialement,
Pierre F.