J'ai des problèmes en VBA excel 1997.
J'ai une feuille où l'utilisateur saisit des éléments.
A un instant T, des éléments de cette feuille doivent s'activer (en
l'occurence, des boutons doivent clignoter).
Et voilà mon problème :
je connait bien les procédures évenementielles concernant les éléments d'une
feuille (mouseover, keyup, etc ...), mais je ne sais pas du tout comment
faire pour déclencher une interruption quand il s'agit d'une variable qui ne
soit pas un des éléments de la feuille.
De plus, j'ai essayé de créer ces évènements dans un module, mais
l'éxécution de ce module 'bloque' la saisie de l'utilisateur, c'est à dire
que tant que l'éxécution du module existe, l'utilisateur ne peut rien
saisir, l'icone de souris se transformant en sablier.
Est ce qu'une âme charitable peut m'aiguiller sur la gestion de ce genre
d'interruptions ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
PMO
Bonjour,
Peut-être une piste: Insérez le code suivant dans le VBE Worksheet d'une feuille
'**************** Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox "Le compteur est égale à " & i& End Sub '****************
et celui-ci dans un module standard
'**************** Option Explicit Public i& Sub Compteur() For i& = 1 To 1000000000 DoEvents Next i& End Sub '****************
EXPLICATION: La procédure "Compteur" fait une boucle très longue et l'emploi de DoEvents permet de passer la main au système et de traiter les messages Windows. Lancez cette procédure et allez sur la feuille où le code évènementiel "Worksheet_SelectionChange" pourra s'exécuter chaque fois que vous cliquerez une cellule différente. Puis une fois le MsgBox confirmé la main sera reprise par la routine "Compteur".
Est-ce que cela répond à votre question ?
Cordialement.
PMO Patrick Morange
Bonjour,
J'ai des problèmes en VBA excel 1997. J'ai une feuille où l'utilisateur saisit des éléments. A un instant T, des éléments de cette feuille doivent s'activer (en l'occurence, des boutons doivent clignoter).
Et voilà mon problème : je connait bien les procédures évenementielles concernant les éléments d'une feuille (mouseover, keyup, etc ...), mais je ne sais pas du tout comment faire pour déclencher une interruption quand il s'agit d'une variable qui ne soit pas un des éléments de la feuille. De plus, j'ai essayé de créer ces évènements dans un module, mais l'éxécution de ce module 'bloque' la saisie de l'utilisateur, c'est à dire que tant que l'éxécution du module existe, l'utilisateur ne peut rien saisir, l'icone de souris se transformant en sablier.
Est ce qu'une âme charitable peut m'aiguiller sur la gestion de ce genre d'interruptions ?
Bonjour,
Peut-être une piste:
Insérez le code suivant dans le VBE Worksheet d'une feuille
'****************
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "Le compteur est égale à " & i&
End Sub
'****************
et celui-ci dans un module standard
'****************
Option Explicit
Public i&
Sub Compteur()
For i& = 1 To 1000000000
DoEvents
Next i&
End Sub
'****************
EXPLICATION:
La procédure "Compteur" fait une boucle très longue et l'emploi
de DoEvents permet de passer la main au système et de traiter
les messages Windows. Lancez cette procédure et allez sur la
feuille où le code évènementiel "Worksheet_SelectionChange"
pourra s'exécuter chaque fois que vous cliquerez une cellule
différente. Puis une fois le MsgBox confirmé la main sera reprise
par la routine "Compteur".
Est-ce que cela répond à votre question ?
Cordialement.
PMO
Patrick Morange
Bonjour,
J'ai des problèmes en VBA excel 1997.
J'ai une feuille où l'utilisateur saisit des éléments.
A un instant T, des éléments de cette feuille doivent s'activer (en
l'occurence, des boutons doivent clignoter).
Et voilà mon problème :
je connait bien les procédures évenementielles concernant les éléments d'une
feuille (mouseover, keyup, etc ...), mais je ne sais pas du tout comment
faire pour déclencher une interruption quand il s'agit d'une variable qui ne
soit pas un des éléments de la feuille.
De plus, j'ai essayé de créer ces évènements dans un module, mais
l'éxécution de ce module 'bloque' la saisie de l'utilisateur, c'est à dire
que tant que l'éxécution du module existe, l'utilisateur ne peut rien
saisir, l'icone de souris se transformant en sablier.
Est ce qu'une âme charitable peut m'aiguiller sur la gestion de ce genre
d'interruptions ?
Peut-être une piste: Insérez le code suivant dans le VBE Worksheet d'une feuille
'**************** Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox "Le compteur est égale à " & i& End Sub '****************
et celui-ci dans un module standard
'**************** Option Explicit Public i& Sub Compteur() For i& = 1 To 1000000000 DoEvents Next i& End Sub '****************
EXPLICATION: La procédure "Compteur" fait une boucle très longue et l'emploi de DoEvents permet de passer la main au système et de traiter les messages Windows. Lancez cette procédure et allez sur la feuille où le code évènementiel "Worksheet_SelectionChange" pourra s'exécuter chaque fois que vous cliquerez une cellule différente. Puis une fois le MsgBox confirmé la main sera reprise par la routine "Compteur".
Est-ce que cela répond à votre question ?
Cordialement.
PMO Patrick Morange
Bonjour,
J'ai des problèmes en VBA excel 1997. J'ai une feuille où l'utilisateur saisit des éléments. A un instant T, des éléments de cette feuille doivent s'activer (en l'occurence, des boutons doivent clignoter).
Et voilà mon problème : je connait bien les procédures évenementielles concernant les éléments d'une feuille (mouseover, keyup, etc ...), mais je ne sais pas du tout comment faire pour déclencher une interruption quand il s'agit d'une variable qui ne soit pas un des éléments de la feuille. De plus, j'ai essayé de créer ces évènements dans un module, mais l'éxécution de ce module 'bloque' la saisie de l'utilisateur, c'est à dire que tant que l'éxécution du module existe, l'utilisateur ne peut rien saisir, l'icone de souris se transformant en sablier.
Est ce qu'une âme charitable peut m'aiguiller sur la gestion de ce genre d'interruptions ?
Laurent Lassasseigne
PMO wrote:
EXPLICATION: La procédure "Compteur" fait une boucle très longue et l'emploi de DoEvents permet de passer la main au système et de traiter les messages Windows. Lancez cette procédure et allez sur la feuille où le code évènementiel "Worksheet_SelectionChange" pourra s'exécuter chaque fois que vous cliquerez une cellule différente. Puis une fois le MsgBox confirmé la main sera reprise par la routine "Compteur".
Est-ce que cela répond à votre question ?
C'est pas mal, j'ai réussi à progresser en voyant qu'on pouvait faire coexister le module avec la saisie d'un utilisiteur avec l'instruction DoEvents, et je vous en remercie. Cependant, il me reste toujours un problème : L'interruption intervient si et seulement si l'utilisateur saisit quelquechose. Si l'utilisateur ne fait que remuer la souris, ou ne fait rien, mes évènements doivent se déclencher quand même. Dans la feuille, n'y a t-il pas moyen de déclencher l'évènement sans se référer à un des éléments VBA de la feuille, et plutot sur une variable (ici en l'occurence la variable publique ie) ?
PMO wrote:
EXPLICATION:
La procédure "Compteur" fait une boucle très longue et l'emploi
de DoEvents permet de passer la main au système et de traiter
les messages Windows. Lancez cette procédure et allez sur la
feuille où le code évènementiel "Worksheet_SelectionChange"
pourra s'exécuter chaque fois que vous cliquerez une cellule
différente. Puis une fois le MsgBox confirmé la main sera reprise
par la routine "Compteur".
Est-ce que cela répond à votre question ?
C'est pas mal, j'ai réussi à progresser en voyant qu'on pouvait faire
coexister le module avec la saisie d'un utilisiteur avec l'instruction
DoEvents, et je vous en remercie.
Cependant, il me reste toujours un problème :
L'interruption intervient si et seulement si l'utilisateur saisit
quelquechose.
Si l'utilisateur ne fait que remuer la souris, ou ne fait rien, mes
évènements doivent se déclencher quand même.
Dans la feuille, n'y a t-il pas moyen de déclencher l'évènement sans se
référer à un des éléments VBA de la feuille, et plutot sur une variable (ici
en l'occurence la variable publique ie) ?
EXPLICATION: La procédure "Compteur" fait une boucle très longue et l'emploi de DoEvents permet de passer la main au système et de traiter les messages Windows. Lancez cette procédure et allez sur la feuille où le code évènementiel "Worksheet_SelectionChange" pourra s'exécuter chaque fois que vous cliquerez une cellule différente. Puis une fois le MsgBox confirmé la main sera reprise par la routine "Compteur".
Est-ce que cela répond à votre question ?
C'est pas mal, j'ai réussi à progresser en voyant qu'on pouvait faire coexister le module avec la saisie d'un utilisiteur avec l'instruction DoEvents, et je vous en remercie. Cependant, il me reste toujours un problème : L'interruption intervient si et seulement si l'utilisateur saisit quelquechose. Si l'utilisateur ne fait que remuer la souris, ou ne fait rien, mes évènements doivent se déclencher quand même. Dans la feuille, n'y a t-il pas moyen de déclencher l'évènement sans se référer à un des éléments VBA de la feuille, et plutot sur une variable (ici en l'occurence la variable publique ie) ?
PMO
Ce coup-ci bonsoir,
Testez le code ci-dessous dans un nouveau classeur:
'********************** Option Explicit Public Temps As Date '######################################### '### POUR STOPPER FAIRE Ctrl+Alt+Pause ### '######################################### Sub DetempsAautre() Temps = Now '---- TimeValue("00:00:05") passe la main toutes les 5 secondes ---- Application.OnTime Temps + TimeValue("00:00:05"), "Coucou" End Sub '_______________________________ Sub Coucou() MsgBox "Coucou " & Temps Call DetempsAautre 'Rappel de la routine OnTime End Sub '*************************
Cela vous satisfait-il ?
Cordialement.
PMO Patrick Morange
PMO wrote:
EXPLICATION: La procédure "Compteur" fait une boucle très longue et l'emploi de DoEvents permet de passer la main au système et de traiter les messages Windows. Lancez cette procédure et allez sur la feuille où le code évènementiel "Worksheet_SelectionChange" pourra s'exécuter chaque fois que vous cliquerez une cellule différente. Puis une fois le MsgBox confirmé la main sera reprise par la routine "Compteur".
Est-ce que cela répond à votre question ?
C'est pas mal, j'ai réussi à progresser en voyant qu'on pouvait faire coexister le module avec la saisie d'un utilisiteur avec l'instruction DoEvents, et je vous en remercie. Cependant, il me reste toujours un problème : L'interruption intervient si et seulement si l'utilisateur saisit quelquechose. Si l'utilisateur ne fait que remuer la souris, ou ne fait rien, mes évènements doivent se déclencher quand même. Dans la feuille, n'y a t-il pas moyen de déclencher l'évènement sans se référer à un des éléments VBA de la feuille, et plutot sur une variable (ici en l'occurence la variable publique ie) ?
Ce coup-ci bonsoir,
Testez le code ci-dessous dans un nouveau classeur:
'**********************
Option Explicit
Public Temps As Date
'#########################################
'### POUR STOPPER FAIRE Ctrl+Alt+Pause ###
'#########################################
Sub DetempsAautre()
Temps = Now
'---- TimeValue("00:00:05") passe la main toutes les 5 secondes ----
Application.OnTime Temps + TimeValue("00:00:05"), "Coucou"
End Sub
'_______________________________
Sub Coucou()
MsgBox "Coucou " & Temps
Call DetempsAautre 'Rappel de la routine OnTime
End Sub
'*************************
Cela vous satisfait-il ?
Cordialement.
PMO
Patrick Morange
PMO wrote:
EXPLICATION:
La procédure "Compteur" fait une boucle très longue et l'emploi
de DoEvents permet de passer la main au système et de traiter
les messages Windows. Lancez cette procédure et allez sur la
feuille où le code évènementiel "Worksheet_SelectionChange"
pourra s'exécuter chaque fois que vous cliquerez une cellule
différente. Puis une fois le MsgBox confirmé la main sera reprise
par la routine "Compteur".
Est-ce que cela répond à votre question ?
C'est pas mal, j'ai réussi à progresser en voyant qu'on pouvait faire
coexister le module avec la saisie d'un utilisiteur avec l'instruction
DoEvents, et je vous en remercie.
Cependant, il me reste toujours un problème :
L'interruption intervient si et seulement si l'utilisateur saisit
quelquechose.
Si l'utilisateur ne fait que remuer la souris, ou ne fait rien, mes
évènements doivent se déclencher quand même.
Dans la feuille, n'y a t-il pas moyen de déclencher l'évènement sans se
référer à un des éléments VBA de la feuille, et plutot sur une variable (ici
en l'occurence la variable publique ie) ?
Testez le code ci-dessous dans un nouveau classeur:
'********************** Option Explicit Public Temps As Date '######################################### '### POUR STOPPER FAIRE Ctrl+Alt+Pause ### '######################################### Sub DetempsAautre() Temps = Now '---- TimeValue("00:00:05") passe la main toutes les 5 secondes ---- Application.OnTime Temps + TimeValue("00:00:05"), "Coucou" End Sub '_______________________________ Sub Coucou() MsgBox "Coucou " & Temps Call DetempsAautre 'Rappel de la routine OnTime End Sub '*************************
Cela vous satisfait-il ?
Cordialement.
PMO Patrick Morange
PMO wrote:
EXPLICATION: La procédure "Compteur" fait une boucle très longue et l'emploi de DoEvents permet de passer la main au système et de traiter les messages Windows. Lancez cette procédure et allez sur la feuille où le code évènementiel "Worksheet_SelectionChange" pourra s'exécuter chaque fois que vous cliquerez une cellule différente. Puis une fois le MsgBox confirmé la main sera reprise par la routine "Compteur".
Est-ce que cela répond à votre question ?
C'est pas mal, j'ai réussi à progresser en voyant qu'on pouvait faire coexister le module avec la saisie d'un utilisiteur avec l'instruction DoEvents, et je vous en remercie. Cependant, il me reste toujours un problème : L'interruption intervient si et seulement si l'utilisateur saisit quelquechose. Si l'utilisateur ne fait que remuer la souris, ou ne fait rien, mes évènements doivent se déclencher quand même. Dans la feuille, n'y a t-il pas moyen de déclencher l'évènement sans se référer à un des éléments VBA de la feuille, et plutot sur une variable (ici en l'occurence la variable publique ie) ?
Laurent Lassasseigne
PMO wrote:
Ce coup-ci bonsoir,
Testez le code ci-dessous dans un nouveau classeur:
'********************** Option Explicit Public Temps As Date '######################################### '### POUR STOPPER FAIRE Ctrl+Alt+Pause ### '######################################### Sub DetempsAautre() Temps = Now '---- TimeValue("00:00:05") passe la main toutes les 5 secondes ---- Application.OnTime Temps + TimeValue("00:00:05"), "Coucou" End Sub '_______________________________ Sub Coucou() MsgBox "Coucou " & Temps Call DetempsAautre 'Rappel de la routine OnTime End Sub '*************************
Cela vous satisfait-il ?
Grand merci à vous Patrick ! C'est exactement ce que je voulais !
PMO wrote:
Ce coup-ci bonsoir,
Testez le code ci-dessous dans un nouveau classeur:
'**********************
Option Explicit
Public Temps As Date
'#########################################
'### POUR STOPPER FAIRE Ctrl+Alt+Pause ###
'#########################################
Sub DetempsAautre()
Temps = Now
'---- TimeValue("00:00:05") passe la main toutes les 5 secondes ----
Application.OnTime Temps + TimeValue("00:00:05"), "Coucou"
End Sub
'_______________________________
Sub Coucou()
MsgBox "Coucou " & Temps
Call DetempsAautre 'Rappel de la routine OnTime
End Sub
'*************************
Cela vous satisfait-il ?
Grand merci à vous Patrick !
C'est exactement ce que je voulais !
Testez le code ci-dessous dans un nouveau classeur:
'********************** Option Explicit Public Temps As Date '######################################### '### POUR STOPPER FAIRE Ctrl+Alt+Pause ### '######################################### Sub DetempsAautre() Temps = Now '---- TimeValue("00:00:05") passe la main toutes les 5 secondes ---- Application.OnTime Temps + TimeValue("00:00:05"), "Coucou" End Sub '_______________________________ Sub Coucou() MsgBox "Coucou " & Temps Call DetempsAautre 'Rappel de la routine OnTime End Sub '*************************
Cela vous satisfait-il ?
Grand merci à vous Patrick ! C'est exactement ce que je voulais !