OVH Cloud OVH Cloud

Faire une pose dans l'execution d'une macro

4 réponses
Avatar
Céline
Bonjour à tous et à toutes,

J'ai besoin de vos lumières pour resoudre un petit problème. J'ai cette
macro qui me permet de proteger des cellules en empechant d'y ecrire quelque
chose:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ict1 As Range
Dim ict2 As Range
Set ict1 = Intersect(Target, Range("A1:A10"))
Set ict2 = Intersect(Target, Range("B1:B10"))
If ict1 Is Nothing And ict2 Is Nothing Then Exit Sub
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End Sub

Le problème c'est que j'aimerais suspendre son action dans certains cas
particuliers. Le mieux se serait que lorsque je maintiens une touche enfoncée
(echap par exemple), l'action de la macro soit annulé et que lorsque je
relache Echap, les cellules soient de nouveau protégées.
Pouvez vous m'aider?

Merci d'avance

céline

4 réponses

Avatar
MichDenis
Bonjour Céline,

Essaie ceci :

'Dans le haut de ton module Feuille : Déclaration de l'API
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Const VK_SHIFT = 16
Dim V As Long
Dim ict1 As Range
Dim ict2 As Range
V = GetKeyState(VK_SHIFT)
If V >= 0 Then
Set ict1 = Intersect(Target, Range("A1:A10"))
Set ict2 = Intersect(Target, Range("B1:B10"))
If ict1 Is Nothing And ict2 Is Nothing Then Exit Sub
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If

End Sub


Salutations!




"Céline" <Cé a écrit dans le message de news:
Bonjour à tous et à toutes,

J'ai besoin de vos lumières pour resoudre un petit problème. J'ai cette
macro qui me permet de proteger des cellules en empechant d'y ecrire quelque
chose:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ict1 As Range
Dim ict2 As Range
Set ict1 = Intersect(Target, Range("A1:A10"))
Set ict2 = Intersect(Target, Range("B1:B10"))
If ict1 Is Nothing And ict2 Is Nothing Then Exit Sub
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End Sub

Le problème c'est que j'aimerais suspendre son action dans certains cas
particuliers. Le mieux se serait que lorsque je maintiens une touche enfoncée
(echap par exemple), l'action de la macro soit annulé et que lorsque je
relache Echap, les cellules soient de nouveau protégées.
Pouvez vous m'aider?

Merci d'avance

céline
Avatar
Céline
Merci beaucoup mais (malheureusement j'ai un "mais" :-) ) il y a un petit
problème. Lorque je clic sur le feuille à n'importe quel endroit dans la
plage selectionnée dans le code, c'est toujours la même cellule qui s'active.
De plus si je remplace la données inscrite dans cette cellule (par exemple
si je mets "toto" au lieu de "titi") et que je clic dans ma plage, "toto"
prend la place de "titi" puis revient et repars. En fait, je voudrais pouvoir
"déproteger" ma cellule remplacer "toto" par "titi" puis la proteger de
nouveau et que tout cela reste en place.

Tu vois ce que je veux dire?
Merci en tout cas.

Bonjour Céline,

Essaie ceci :

'Dans le haut de ton module Feuille : Déclaration de l'API
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Const VK_SHIFT = 16
Dim V As Long
Dim ict1 As Range
Dim ict2 As Range
V = GetKeyState(VK_SHIFT)
If V >= 0 Then
Set ict1 = Intersect(Target, Range("A1:A10"))
Set ict2 = Intersect(Target, Range("B1:B10"))
If ict1 Is Nothing And ict2 Is Nothing Then Exit Sub
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If

End Sub


Salutations!




"Céline" <Cé a écrit dans le message de news:
Bonjour à tous et à toutes,

J'ai besoin de vos lumières pour resoudre un petit problème. J'ai cette
macro qui me permet de proteger des cellules en empechant d'y ecrire quelque
chose:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ict1 As Range
Dim ict2 As Range
Set ict1 = Intersect(Target, Range("A1:A10"))
Set ict2 = Intersect(Target, Range("B1:B10"))
If ict1 Is Nothing And ict2 Is Nothing Then Exit Sub
With Application
..EnableEvents = False
..Undo
..EnableEvents = True
End With
End Sub

Le problème c'est que j'aimerais suspendre son action dans certains cas
particuliers. Le mieux se serait que lorsque je maintiens une touche enfoncée
(echap par exemple), l'action de la macro soit annulé et que lorsque je
relache Echap, les cellules soient de nouveau protégées.
Pouvez vous m'aider?

Merci d'avance

céline





Avatar
MichDenis
Bonjour Céline,

La section que j'ai ajouté fonctionne très bien . Remplace la commande Undo par Msgbox "Ok" ... et tu verras !

Si cela ne fonctionne pas ... c'est que la macro que tu as créé ne répond pas à tes besoins .

Ce que j'ai ajouté à la macro, empêche à la macro de s'exécuter lorsque tu enfonces et maintien la touche "MAJ"
Donc, si tu cliques sur une cellule de la plage A1:B10 tu auras le messag "Ok" sauf si la touche "MAJ" est enfoncée.

Pour ce qui est de ta macro originelle, aucune idée à quoi elle sert ! Difficile de la modifier !!!


Salutations!


"Céline" <Cé a écrit dans le message de news:
Merci beaucoup mais (malheureusement j'ai un "mais" :-) ) il y a un petit
problème. Lorque je clic sur le feuille à n'importe quel endroit dans la
plage selectionnée dans le code, c'est toujours la même cellule qui s'active.
De plus si je remplace la données inscrite dans cette cellule (par exemple
si je mets "toto" au lieu de "titi") et que je clic dans ma plage, "toto"
prend la place de "titi" puis revient et repars. En fait, je voudrais pouvoir
"déproteger" ma cellule remplacer "toto" par "titi" puis la proteger de
nouveau et que tout cela reste en place.

Tu vois ce que je veux dire?
Merci en tout cas.

Bonjour Céline,

Essaie ceci :

'Dans le haut de ton module Feuille : Déclaration de l'API
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Const VK_SHIFT = 16
Dim V As Long
Dim ict1 As Range
Dim ict2 As Range
V = GetKeyState(VK_SHIFT)
If V >= 0 Then
Set ict1 = Intersect(Target, Range("A1:A10"))
Set ict2 = Intersect(Target, Range("B1:B10"))
If ict1 Is Nothing And ict2 Is Nothing Then Exit Sub
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If

End Sub


Salutations!




"Céline" <Cé a écrit dans le message de news:
Bonjour à tous et à toutes,

J'ai besoin de vos lumières pour resoudre un petit problème. J'ai cette
macro qui me permet de proteger des cellules en empechant d'y ecrire quelque
chose:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ict1 As Range
Dim ict2 As Range
Set ict1 = Intersect(Target, Range("A1:A10"))
Set ict2 = Intersect(Target, Range("B1:B10"))
If ict1 Is Nothing And ict2 Is Nothing Then Exit Sub
With Application
..EnableEvents = False
..Undo
..EnableEvents = True
End With
End Sub

Le problème c'est que j'aimerais suspendre son action dans certains cas
particuliers. Le mieux se serait que lorsque je maintiens une touche enfoncée
(echap par exemple), l'action de la macro soit annulé et que lorsque je
relache Echap, les cellules soient de nouveau protégées.
Pouvez vous m'aider?

Merci d'avance

céline





Avatar
Céline
Je vais essayer de comprendre ou est le problème alors.

Merci beaucoup pour ton aide et bravo à tous pour tous les conseils que vous
apportés.


Bonjour Céline,

La section que j'ai ajouté fonctionne très bien . Remplace la commande Undo par Msgbox "Ok" ... et tu verras !

Si cela ne fonctionne pas ... c'est que la macro que tu as créé ne répond pas à tes besoins .

Ce que j'ai ajouté à la macro, empêche à la macro de s'exécuter lorsque tu enfonces et maintien la touche "MAJ"
Donc, si tu cliques sur une cellule de la plage A1:B10 tu auras le messag "Ok" sauf si la touche "MAJ" est enfoncée.

Pour ce qui est de ta macro originelle, aucune idée à quoi elle sert ! Difficile de la modifier !!!


Salutations!


"Céline" <Cé a écrit dans le message de news:
Merci beaucoup mais (malheureusement j'ai un "mais" :-) ) il y a un petit
problème. Lorque je clic sur le feuille à n'importe quel endroit dans la
plage selectionnée dans le code, c'est toujours la même cellule qui s'active.
De plus si je remplace la données inscrite dans cette cellule (par exemple
si je mets "toto" au lieu de "titi") et que je clic dans ma plage, "toto"
prend la place de "titi" puis revient et repars. En fait, je voudrais pouvoir
"déproteger" ma cellule remplacer "toto" par "titi" puis la proteger de
nouveau et que tout cela reste en place.

Tu vois ce que je veux dire?
Merci en tout cas.

Bonjour Céline,

Essaie ceci :

'Dans le haut de ton module Feuille : Déclaration de l'API
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Const VK_SHIFT = 16
Dim V As Long
Dim ict1 As Range
Dim ict2 As Range
V = GetKeyState(VK_SHIFT)
If V >= 0 Then
Set ict1 = Intersect(Target, Range("A1:A10"))
Set ict2 = Intersect(Target, Range("B1:B10"))
If ict1 Is Nothing And ict2 Is Nothing Then Exit Sub
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If

End Sub


Salutations!




"Céline" <Cé a écrit dans le message de news:
Bonjour à tous et à toutes,

J'ai besoin de vos lumières pour resoudre un petit problème. J'ai cette
macro qui me permet de proteger des cellules en empechant d'y ecrire quelque
chose:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ict1 As Range
Dim ict2 As Range
Set ict1 = Intersect(Target, Range("A1:A10"))
Set ict2 = Intersect(Target, Range("B1:B10"))
If ict1 Is Nothing And ict2 Is Nothing Then Exit Sub
With Application
..EnableEvents = False
..Undo
..EnableEvents = True
End With
End Sub

Le problème c'est que j'aimerais suspendre son action dans certains cas
particuliers. Le mieux se serait que lorsque je maintiens une touche enfoncée
(echap par exemple), l'action de la macro soit annulé et que lorsque je
relache Echap, les cellules soient de nouveau protégées.
Pouvez vous m'aider?

Merci d'avance

céline