Déclenchement d'une macro à partir d'une macro évènementielle

Le
JP
Bonsoir,

J'ai dans une feuille une macro évènementielle du genre:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("H6:D33")) Is Nothing Then
Set Feuille = ActiveSheet
classement
Feuille.Activate
End If
End Sub

je souhaite déclencher la macro nommée classement qui est dans un modul=
e avec option private module.

J'ai un message d'erreur au déclenchement de la macro Private Sub au n=
iveau de la ligne classement.

Pourquoi et que faut-il modifier selon vous?

Merci pour votre aide.

JP
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
GL
Le #25482002
Le 14/06/2013 19:04, JP a écrit :
Bonsoir,

J'ai dans une feuille une macro évènementielle du genre:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("H6:D33")) Is Nothing Then
Set Feuille = ActiveSheet
classement
Feuille.Activate
End If
End Sub

je souhaite déclencher la macro nommée classement qui est dans un module avec option private module.



l'option Private Module sert à éviter d'insérer les routines
(Sub / Function) dans le /proposeur/ de fonctions (désolé du mot ;-) )

J'ai un message d'erreur au déclenchement de la macro Private Sub... au niveau de la ligne classement.



L'option Private Sub / Private Function rend la routine inaccessible
depuis tout autre module.

Pourquoi et que faut-il modifier selon vous?



Donc à priori, ce qu'il faut modifier c'est Private Sub en Public Sub.

Par contre Private Module restera.

Merci pour votre aide.



Sauf erreur de ma part... ;-)

Bonne journée.
JP
Le #25482062
Bonsoir GL,

Merci pour les explications.
Je viens de changer Private en Public mais la macro bloque au meme endroit.
Voici en dessous, la modification faite selon ta proposition.

Attendons d'autres voix!!

Cordialement

JP

Public Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("H6:U33")) Is Nothing Then
Set Feuille = ActiveSheet
classement
Feuille.Activate
End If
End Sub
GL
Le #25482122
Le 14/06/2013 20:38, JP a écrit :
Bonsoir GL,

Merci pour les explications.
Je viens de changer Private en Public mais la macro bloque au meme endroit.
Voici en dessous, la modification faite selon ta proposition.

Attendons d'autres voix!!



Non : c'est la procédure Classement qui doit être publique !

Une procédure événementielle est liée à la feuille, donc elle
est toujours privée (il n'y a pas de raison de la déclencher
depuis un autre point que l'événement lié à la feuille elle-même).

Sinon c'est quoi le message d'erreur ?

Public Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("H6:U33")) Is Nothing Then
Set Feuille = ActiveSheet
classement
Feuille.Activate
End If
End Sub

JP
Le #25482192
Je dois mettre Public Sub classement()au lieu Sub classement()?

Le message d'erreur est:
Erreur de compilation. Variable ou procédure attendue, et non un module.

Je viens d'essayer avec Public Sub classement(). Le message d'erreur est le même.

Cordialement

JP
GL
Le #25482212
Le 14/06/2013 21:40, JP a écrit :
Je dois mettre Public Sub classement()au lieu Sub classement()?

Le message d'erreur est:
Erreur de compilation. Variable ou procédure attendue, et non un module.



Alors cela doit signifier que vous avez un module nommé "classement".

Dans ce cas, s'il y a aussi une routine nommée classement, il faut
appeler : classement.classement

soit:
Si la routine classement est déclarée Private vous aurez l'erreur :
Membre de méthode ou de données introuvable.

Ce qui paraît cohérent.

Quoiqu'il en soit, l'Option Private Module est sans effet.


Je viens d'essayer avec Public Sub classement(). Le message d'erreur est le même.

Cordialement

JP

JP
Le #25482292
Merci GL!
En plus c'est logique.

Bonne soirée et merci encore.

Cordialement

JP
isabelle
Le #25484382
bonjour JP

Application.Run "classement"
ou
Application.Run "Classeur1!classement"

isabelle

Le 2013-06-14 16:44, JP a écrit :
Merci GL!
En plus c'est logique.

Bonne soirée et merci encore.

Cordialement

JP

isabelle
Le #25484392
pour une Function avec arguments

Application.Run "ThisWorkbook.classement", Variable1, Variable2

isabelle

Le 2013-06-15 22:56, isabelle a écrit :
bonjour JP

Application.Run "classement"
ou
Application.Run "Classeur1!classement"

isabelle

Le 2013-06-14 16:44, JP a écrit :
Merci GL!
En plus c'est logique.

Bonne soirée et merci encore.

Cordialement

JP

Publicité
Poster une réponse
Anonyme