Ecran non mis à jour après N iterations

Je lance un très simple jeu "Snake" sur mon excel, ce qui signifie que j'ai besoin de l'écran pour être mis à jour en continu, dans ma boucle principale. Le "serpent" (une cellule colorée essentiellement) se déplace de façon random dans une table 20×20.

Cela fonctionne bien pendant plusieurs secondes, cependant, si un écran de point cesse de mettre à jour; ans excel cesse de répondre, tout en exécutant le code. Cela entraîne un accident.

J'ai remplacé en boucle avec une boucle For, qui évite de s'écraser, mais l'écran cesse de mettre à jour jusqu'à ce que la boucle soit terminée. Lorsque les loops s'arrêtent, l'écran est mis à jour une dernière fois. J'ai également inclus les déclarations "Sleep" après chaque fonction, mais cela ne les aide pas. Voici le code principal:

Sub main() Dim table(20, 20) As Integer Dim index_move As Integer 'Position class contains only X and Y parameters Dim index_actual_head_pos As Position Set index_actual_head_pos = New Position Dim i As Long index_actual_head_pos.x = 5 index_actual_head_pos.y = 15 Application.ScreenUpdating = True For i = 1 To 50 'this remplaces the initial while loop 'next line generates a random movement, bounded by a 20x20 masortingx index_move = generer_movement(index_actual_head_pos) 'next line updates the "snake" position params Call update_position(index_actual_head_pos, index_move) 'next line deletes previous snake and draws a new one Call draw(index_actual_head_pos) Sleep (200) Next i End Sub 

Veuillez noter que le problème est vraiment la mise à jour de l'écran. Comme indiqué précédemment, je ne sais pas comment forcer excel pour l'écran de mise à jour en continu

Merci beaucoup,

Denis

Vous devriez probablement abandonner ce Sleep(200) et laisser l'object d'application Excel faire un peu de traitement pour les 200 milli-secondes à la place.

 dim dTill as double 'should be at the top with the other var declarations dtill = Timer + 0.200 do while timer < dTill and timer > 0.200: DoEvents: loop 

La timer > 0.200 est importante parce que la timer se réinitialise à minuit et que vous ne voudriez pas la bloquer pendant 24 heures si vous avez franchi minuit pendant cette ¹/5 seconde.