OVH Cloud OVH Cloud

Comment bloquer une macro ?

4 réponses
Avatar
Bartez
Bonjour,

j'ai une macro de mise à jour qui m'incrit dans toutes les feuilles d'un
classeur, un nouveau nombre dans la cellule A1.

Quand je lance cette mise à jour toute simple, l'action paste est intercepté
par
Private Sub Worksheet_Change(ByVal Target As Range)
dans laquelle je teste si le changement à eu lieu sur telle ou telle cellule
pour effectuer une action particulaire suivant les valeurs rentrées et
suivant la localisation de cette modification. Le problème c'est que dans le
cas présent de ma mise à jour, je n'ai absolument pas besoin que
Worksheet_Change intervienne et me ralentisse l'exécution de la mise à jour
par ces tests.

Je cherche donc une façon de faire pour dévalider Worksheet_Change avec le
lancement de ma mise à jour pour ensuite la remettre en fonction à la fin de
cette mise à jour.

J'ai essayé de modifier le nom de Worksheet_change en Workseet_Change2 en
mode débogage, mais Excel veut réinitialiser mon projet quand je tente cette
action :(

Je sais pas si j'ai été bien claire dans mes explications....c'est pas sûr
:-)

Merci de votre aide
Bartez

4 réponses

Avatar
JLuc
*Bonjour Bartez*,
Dans la procedure :
Private Sub Worksheet_Change(ByVal Target As Range)
If Sheets(1).Range("A2") = 1 Then
Sheets(1).Range("A2") = ""
Else
'le reste de ton code
...
...
End If
End Sub

Dans ta macro de maj :
Sheets(1).Range("A2") = 1
...
...
...
La cellule est a adaptee en fonction de tes donnees, il vaut mieux que
ce soit une cellule libre :oÞ

Bonjour,

j'ai une macro de mise à jour qui m'incrit dans toutes les feuilles d'un
classeur, un nouveau nombre dans la cellule A1.

Quand je lance cette mise à jour toute simple, l'action paste est intercepté
par
Private Sub Worksheet_Change(ByVal Target As Range)
dans laquelle je teste si le changement à eu lieu sur telle ou telle cellule
pour effectuer une action particulaire suivant les valeurs rentrées et
suivant la localisation de cette modification. Le problème c'est que dans le
cas présent de ma mise à jour, je n'ai absolument pas besoin que
Worksheet_Change intervienne et me ralentisse l'exécution de la mise à jour
par ces tests.

Je cherche donc une façon de faire pour dévalider Worksheet_Change avec le
lancement de ma mise à jour pour ensuite la remettre en fonction à la fin de
cette mise à jour.

J'ai essayé de modifier le nom de Worksheet_change en Workseet_Change2 en
mode débogage, mais Excel veut réinitialiser mon projet quand je tente cette
action :(

Je sais pas si j'ai été bien claire dans mes explications....c'est pas sûr
:-)

Merci de votre aide
Bartez


--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O

Avatar
michdenis
Bonjour Bartez,

En début de macro, tu inscris cette ligne de code
qui a pour but d'inhiber les procédures événementielles
de l'application Excel.

Application.EnableEvents = False

Et surtout ne pas oublier de remettre la valeur de cette ligne à true
à la fin de la procédure.

Application.EnableEvents = True


Salutations!


"Bartez" a écrit dans le message de news:
Bonjour,

j'ai une macro de mise à jour qui m'incrit dans toutes les feuilles d'un
classeur, un nouveau nombre dans la cellule A1.

Quand je lance cette mise à jour toute simple, l'action paste est intercepté
par
Private Sub Worksheet_Change(ByVal Target As Range)
dans laquelle je teste si le changement à eu lieu sur telle ou telle cellule
pour effectuer une action particulaire suivant les valeurs rentrées et
suivant la localisation de cette modification. Le problème c'est que dans le
cas présent de ma mise à jour, je n'ai absolument pas besoin que
Worksheet_Change intervienne et me ralentisse l'exécution de la mise à jour
par ces tests.

Je cherche donc une façon de faire pour dévalider Worksheet_Change avec le
lancement de ma mise à jour pour ensuite la remettre en fonction à la fin de
cette mise à jour.

J'ai essayé de modifier le nom de Worksheet_change en Workseet_Change2 en
mode débogage, mais Excel veut réinitialiser mon projet quand je tente cette
action :(

Je sais pas si j'ai été bien claire dans mes explications....c'est pas sûr
:-)

Merci de votre aide
Bartez
Avatar
Bartez
Merci pour ton code...
Cette petite routine peut effectivement me dépanner ;-)
@+
Bartez

"JLuc" a écrit dans le message de news:

*Bonjour Bartez*,
Dans la procedure :
Private Sub Worksheet_Change(ByVal Target As Range)
If Sheets(1).Range("A2") = 1 Then
Sheets(1).Range("A2") = ""
Else
'le reste de ton code
...
...
End If
End Sub

Dans ta macro de maj :
Sheets(1).Range("A2") = 1
...
...
...
La cellule est a adaptee en fonction de tes donnees, il vaut mieux que ce
soit une cellule libre :oÞ

Bonjour,

j'ai une macro de mise à jour qui m'incrit dans toutes les feuilles d'un
classeur, un nouveau nombre dans la cellule A1.

Quand je lance cette mise à jour toute simple, l'action paste est
intercepté par
Private Sub Worksheet_Change(ByVal Target As Range)
dans laquelle je teste si le changement à eu lieu sur telle ou telle
cellule pour effectuer une action particulaire suivant les valeurs
rentrées et suivant la localisation de cette modification. Le problème
c'est que dans le cas présent de ma mise à jour, je n'ai absolument pas
besoin que Worksheet_Change intervienne et me ralentisse l'exécution de
la mise à jour par ces tests.

Je cherche donc une façon de faire pour dévalider Worksheet_Change avec
le lancement de ma mise à jour pour ensuite la remettre en fonction à la
fin de cette mise à jour.

J'ai essayé de modifier le nom de Worksheet_change en Workseet_Change2 en
mode débogage, mais Excel veut réinitialiser mon projet quand je tente
cette action :(

Je sais pas si j'ai été bien claire dans mes explications....c'est pas
sûr :-)

Merci de votre aide
Bartez


--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O





Avatar
Bartez
Super pour ta ligne de code !

Je viens de la tester et elle bloque effectivement les évenements. C'est
plus simple à utiliser que les tests que me proposait de faire JLuc.

Merci pour ton aide
Bonne journée
Bartez

"michdenis" a écrit dans le message de news:
%
Bonjour Bartez,

En début de macro, tu inscris cette ligne de code
qui a pour but d'inhiber les procédures événementielles
de l'application Excel.

Application.EnableEvents = False

Et surtout ne pas oublier de remettre la valeur de cette ligne à true
à la fin de la procédure.

Application.EnableEvents = True


Salutations!


"Bartez" a écrit dans le message de news:

Bonjour,

j'ai une macro de mise à jour qui m'incrit dans toutes les feuilles d'un
classeur, un nouveau nombre dans la cellule A1.

Quand je lance cette mise à jour toute simple, l'action paste est
intercepté
par
Private Sub Worksheet_Change(ByVal Target As Range)
dans laquelle je teste si le changement à eu lieu sur telle ou telle
cellule
pour effectuer une action particulaire suivant les valeurs rentrées et
suivant la localisation de cette modification. Le problème c'est que dans
le
cas présent de ma mise à jour, je n'ai absolument pas besoin que
Worksheet_Change intervienne et me ralentisse l'exécution de la mise à
jour
par ces tests.

Je cherche donc une façon de faire pour dévalider Worksheet_Change avec le
lancement de ma mise à jour pour ensuite la remettre en fonction à la fin
de
cette mise à jour.

J'ai essayé de modifier le nom de Worksheet_change en Workseet_Change2 en
mode débogage, mais Excel veut réinitialiser mon projet quand je tente
cette
action :(

Je sais pas si j'ai été bien claire dans mes explications....c'est pas sûr
:-)

Merci de votre aide
Bartez