Impossible de rentrer une valeur pendant l'execution de la macro

btrends Messages postés 9 Statut Membre -  
chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour a toutes et a tous,

je suis novice en VBA, mais je progresse tres doucement et peu surement...
J'ai confectionne ce programme, qui a pour but de s'entrainer au calcul mental avec un chrono.

Or quand je clique sur le bouton de ma macro, il m'est impossible de rentrer quelconque reponse dans la colonne correspondante. En revanche, lorsque je mets toutes les reponses avant de cliquer sur le bouton, tout marche parfaitement (avec un temps proche de zero bien évidemment!)...
Si vous avez une idée, ce serait adorable!

C'est tres probable que l'erreur tourne autour du "doevents" ou du worksheets.calculate que je ne maitrise pas du tout!

Voila mon programme:

Sub ChronoCM()

'Copier coller des valeurs aleatoires

Range("A2:B31").Select
Selection.Copy
Range("D2").Select
Selection.PasteSpecial Paste:=xlValues

'Chrono
'Copie de la date de debut

Range("K2").Select
Application.CutCopyMode = False
Selection.Copy
Range("J2").Select
Selection.PasteSpecial Paste:=xlValues

'Boucle pour chronometrer

While Cells(32, "H") <> 1
DoEvents
Worksheets("Feuil1").Rows(2).Columns("K:L").Calculate
Sheets("Feuil1").Select
Wend

'Affichage du TEMPS effectue

Range("K2").Select
Application.CutCopyMode = False
Selection.Copy
Range("J4").Select
Selection.PasteSpecial Paste:=xlValues

End Sub

MERCI ENCORE MILLE FOIS!

A voir également:

2 réponses

Heliotte Messages postés 1561 Statut Membre 92
 
Bonjour btrends,

Tu travaille avec beaucoup de cellules différentes, et je ne suis pas sûr d'avoir tout compris.
Tu peux mettre ton fichier à disposition sur le site "https://www.cjoint.com/", mais sans données confidentielles biensûr.
Ensuite, tu copies le lien dans ton prochain message.
De cette façon on a un lien pour, je l'espère, mieux comprendre ce que tu souhaite
A bientôt
0
btrends Messages postés 9 Statut Membre
 
Merci!!!
Voici le lien
https://www.cjoint.com/?0KbhEFjQb5I
0
Heliotte Messages postés 1561 Statut Membre 92
 
J'ai ouvert le classeur et, quand je clique sur le bouton "COMMENCER", il me dit qu'il ne trouve pas la macro "ALEA.ENTRE.BORNES".
En effet, cette macro ne se trouve nulle part. As-tu une idée ? Quelle macro doit servir en premier ?
0
btrends Messages postés 9 Statut Membre
 
Il n'y qu'une macro a priori...
ALEA.ENTRE.BORNES est la fonction que j utilise dans les colonnes A et B pour determiner des nombres aléatoires entre 2 et 20!
Peut-etre que ta version d'excel ne comprend pas cette fonction (qui est pourtant assez vieille...)?
0
Heliotte Messages postés 1561 Statut Membre 92
 
J'ai Excel 2003 et toi ?
Comment peut-on associer une fonction à l'exécution d'un bouton ?
0
btrends Messages postés 9 Statut Membre
 
Excel 2011 sur mac
La fonction permet seulement la determination de 30x2 valeurs pour les calculs. Elle vient pas du tout avec le bouton
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonjour,

utilises l'évènement Change de la feuille pour détecter tes saisies.
Sur cet exemple le timer est relevé à la 1ère saisie et le temps affiché à la dernière saisie :
Dim t1 As Double
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [F2:F31]) Is Nothing Then Exit Sub
    If WorksheetFunction.CountA([F2:F31]) = 1 Then t1 = Timer
    If WorksheetFunction.CountA([F2:F31]) = 30 Then MsgBox (Timer - t1 & " secondes")
End Sub 

Tu peux modifier pour mémoriser T1 dès l'affichage des exercices.

Tu peux aussi tirer un nombre aléatoire entre 2 et 20 directement dans vba avec :
Randomize
aleatoire = Int(Rnd() * 19 + 2)

eric
0
chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 312
 
Salut eriiic,

si je me souviens bien mes cours de générateurs pseudos-aléatoires, si tu veux obtenir un nombre entre 2 et 20 c'est Rnd() * 18 + 2 et non 19 ;)
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Salut chossette,

non, rnd() ne retourne jamais 1, mais 0.999999 au maximum.
et int(0.999999*18+2) = int(19.999982) = 19, pas 20 qui ne sortira jamais.

eric
0
chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 312
 
Effectivement, j'avais pas vu le int.
Mea culpa :)
0