Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Appel de procedure sur évènement

3 réponses
Avatar
defluc
Bonjour à toi lecteur

J'ai une procedure avec arguments nommée

Public Sub EraseRange(Plage as Range)

Je l'appelle sur l'évènement OnKey de la manière suivante :

Application.OnKey "{Del}", "EraseRange(Range.Cells(" & Target.Row & ", "
& Target.Column & "))"

Et l'exécution génère les message : «Impossible de trouver la macro
'EraseRange(Range.Cells(19, 8)'»

Je remercie d'avance celui qui pourra me dire comment écrire l'appel de
la procédure avec ses arguments.

3 réponses

Avatar
MichDenis
Bonjour Defluc,

A ) le choix de la touche "Del" pour lui associé une autre fonction
que celle qu'elle fait déjà peut être problématique ! Comment vas-tu
supprimer un objet dans une feuille de calcul comme un rectangle par
exemple, un graphe...? Pour affecter un raccourci clavier mieux vaut
utiliser une combinaison de touche qui ne perturbera pas celle dont
on utilise couramment comme : Ctrl + m . Si tu veux conserver "Del"
c'est ton choix !

B ) Pour définir le raccourci clavier : (dans un module standard)
'------------------------------------
Sub Raccouci_Clavier()
Application.OnKey "{Del}", "EraseRange"
End Sub
'------------------------------------

C ) La procédure appelée par le raccourci clavier doit être placé dans un module standard
:
'---------------------------------
Sub EraseRange(Rg As Range)
'Efface le contenu
Rg.Clear
End Sub
'---------------------------------

D ) Comme tu utilises "Target" qui est une variable utilisée par Excel dans ses macros
événementielles, je suppose que la procédure est appelée par exemple par cet événement
dans le module feuille à titre d'exemple :
'----------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
EraseRange Cells(Target.Row, Target.Column)
End Sub
'----------------------------------

E ) Pour enlever le raccourci clavier que l'on a créée : (Module Standard)
'--------------------------------------
Sub Retour_à_la_Normale()
Application.OnKey "{Del}"
End Sub
'--------------------------------------

F ) Pour limiter l'application de ce raccourci clavier qu'à un fichier en particulier
- Dans le ThisWorkbook de ce classeur, on utilise les événements "Activate"
et Desactivate comme ceci :

Private Sub Workbook_Activate()
Raccouci_Clavier
End Sub
'-------------------------------------
Private Sub Workbook_Deactivate()
Retour_à_la_Normale
End Sub
'-------------------------------------




"defluc" a écrit dans le message de groupe de discussion :

Bonjour à toi lecteur

J'ai une procedure avec arguments nommée

Public Sub EraseRange(Plage as Range)

Je l'appelle sur l'évènement OnKey de la manière suivante :

Application.OnKey "{Del}", "EraseRange(Range.Cells(" & Target.Row & ", "
& Target.Column & "))"

Et l'exécution génère les message : «Impossible de trouver la macro
'EraseRange(Range.Cells(19, 8)'»

Je remercie d'avance celui qui pourra me dire comment écrire l'appel de
la procédure avec ses arguments.
Avatar
defluc
Cela ne répond pas à ma question qui est de savoir comment passer les
arguments nécessaire à la procédure «EraseRange» dans l'instruction
Application.OnKey "{Del}", "EraseRange"

MichDenis a écrit :
Bonjour Defluc,

A ) le choix de la touche "Del" pour lui associé une autre fonction
que celle qu'elle fait déjà peut être problématique ! Comment vas-tu
supprimer un objet dans une feuille de calcul comme un rectangle par
exemple, un graphe...? Pour affecter un raccourci clavier mieux vaut
utiliser une combinaison de touche qui ne perturbera pas celle dont
on utilise couramment comme : Ctrl + m . Si tu veux conserver "Del"
c'est ton choix !

B ) Pour définir le raccourci clavier : (dans un module standard)
'------------------------------------
Sub Raccouci_Clavier()
Application.OnKey "{Del}", "EraseRange"
End Sub
'------------------------------------

C ) La procédure appelée par le raccourci clavier doit être placé dans un module standard
:
'---------------------------------
Sub EraseRange(Rg As Range)
'Efface le contenu
Rg.Clear
End Sub
'---------------------------------

D ) Comme tu utilises "Target" qui est une variable utilisée par Excel dans ses macros
événementielles, je suppose que la procédure est appelée par exemple par cet événement
dans le module feuille à titre d'exemple :
'----------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
EraseRange Cells(Target.Row, Target.Column)
End Sub
'----------------------------------

E ) Pour enlever le raccourci clavier que l'on a créée : (Module Standard)
'--------------------------------------
Sub Retour_à_la_Normale()
Application.OnKey "{Del}"
End Sub
'--------------------------------------

F ) Pour limiter l'application de ce raccourci clavier qu'à un fichier en particulier
- Dans le ThisWorkbook de ce classeur, on utilise les événements "Activate"
et Desactivate comme ceci :

Private Sub Workbook_Activate()
Raccouci_Clavier
End Sub
'-------------------------------------
Private Sub Workbook_Deactivate()
Retour_à_la_Normale
End Sub
'-------------------------------------




"defluc" a écrit dans le message de groupe de discussion :

Bonjour à toi lecteur

J'ai une procedure avec arguments nommée

Public Sub EraseRange(Plage as Range)

Je l'appelle sur l'évènement OnKey de la manière suivante :

Application.OnKey "{Del}", "EraseRange(Range.Cells(" & Target.Row & ", "
& Target.Column & "))"

Et l'exécution génère les message : «Impossible de trouver la macro
'EraseRange(Range.Cells(19, 8)'»

Je remercie d'avance celui qui pourra me dire comment écrire l'appel de
la procédure avec ses arguments.



Avatar
MichDenis
| Cela ne répond pas à ma question qui est de savoir comment passer les
| arguments nécessaire à la procédure «EraseRange» dans l'instruction
| Application.OnKey "{Del}", "EraseRange"

Les seules arguments de la méthode "OnKey" sont :
A ) le raccourci (combinaison ou touches visées)
B ) la macro à exécuter lorsque l'usager utilise les touches

Si tu veux que Microsoft ajoute des arguments supplémentaires,
pourquoi ne pas lui adresser ta requête directement ?

L'exemple que tu as reçu est complet, tu n'as qu'à copier les petites
procédures soit dans un module standard, le ThisWorkbook ou un
module feuille comme il est suggéré dans mon message précédent.