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

Créer une procédure Worksheet_BeforeRightClick dans le module de feuille

15 réponses
Avatar
Pounet95
Bonsoir à toutes et tous,
XL2000 XP Pro et XL2000 W2000 Pro

Je créé via une procédure VBA un classeur avec une 30aine de feuilles.
Chacune de ces feuilles est nommée et doit contenir dans son module de code
:

Private Sub Worksheet_BeforeRightClick( ..... )
' le code
End Sub

Dans un module standard ( module_feuille ) du classeur 'père' ( wbMacro ),
j'ai donc écrit l'évènement dans sa totalité
En utilisant la procédure ci-dessous ( issue du site de Frédéric Sigonneau
et adaptée ), je n'obtiens rien d'autre
qu'un plantage d'Excel ;o(((((

wFeuille est le CodeName de la feuille dans laquelle je veux écrire
l'évènement
wbSaisie est le classeur contenant cette feuille
wbMacro le classeur qui génère l'ensemble et qui contient les originaux

Function CopieCodeModuleFeuille(wFeuille As String)
'd'après Frédéric Sigonneau
Dim s As String

With wbMacro.VBProject.VBComponents("Module_feuille").CodeModule
s = .Lines(1, .CountOfLines)
End With

With wbSaisie.VBProject.VBComponents(wFeuille).CodeModule
.AddFromString s
End With
End Function


Pouvez-vous me dire où je me trompe ?
Merci d'avance.

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

10 réponses

1 2
Avatar
anomymousA
bonjour,

avec le code ci-dessous pas d'erreur pour moi sur un exemple avec toto.xls
qui recoit le code dans sa feuille1 (Feuil1) et le fichier source pour lequel
le code Private Sub Worksheet_BeforeRightClick() ' le code
End Sub
est dans un module standard appelé Module_feuille.

Sub tututututu()

tamp = CopieCodeModuleFeuille("Feuil1")
End Sub

Function CopieCodeModuleFeuille(wFeuille As String)
Set wbMacro = ThisWorkbook
Set wbSaisie = Workbooks("toto.xls")
Dim s As String

With wbMacro.VBProject.VBComponents("Module_feuille").CodeModule
s = .Lines(1, .CountOfLines)
End With

With wbSaisie.VBProject.VBComponents(wFeuille).CodeModule
.AddFromString s
End With
End Function

A+


Bonsoir à toutes et tous,
XL2000 XP Pro et XL2000 W2000 Pro

Je créé via une procédure VBA un classeur avec une 30aine de feuilles.
Chacune de ces feuilles est nommée et doit contenir dans son module de code
:

Private Sub Worksheet_BeforeRightClick( ..... )
' le code
End Sub

Dans un module standard ( module_feuille ) du classeur 'père' ( wbMacro ),
j'ai donc écrit l'évènement dans sa totalité
En utilisant la procédure ci-dessous ( issue du site de Frédéric Sigonneau
et adaptée ), je n'obtiens rien d'autre
qu'un plantage d'Excel ;o(((((

wFeuille est le CodeName de la feuille dans laquelle je veux écrire
l'évènement
wbSaisie est le classeur contenant cette feuille
wbMacro le classeur qui génère l'ensemble et qui contient les originaux

Function CopieCodeModuleFeuille(wFeuille As String)
'd'après Frédéric Sigonneau
Dim s As String

With wbMacro.VBProject.VBComponents("Module_feuille").CodeModule
s = .Lines(1, .CountOfLines)
End With

With wbSaisie.VBProject.VBComponents(wFeuille).CodeModule
.AddFromString s
End With
End Function


Pouvez-vous me dire où je me trompe ?
Merci d'avance.

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)




Avatar
denis P
Bonjour Pounet95
Ne serait'il pas plus simple pour toi d'utiliser l'évènement
Workbook_SheetBeforeRightClick du module ThisWorkbook...
cela t'éviterai de devoir recopier ton code dans toute tes feuille ?
amicalement
denis p.
''''''''''''''''''''''''''''''''''''''
Private Sub Workbook_SheetBeforeRightClick _
(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'ton code
....
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"Pounet95" a écrit dans le message de
news:e$$
Bonsoir à toutes et tous,
XL2000 XP Pro et XL2000 W2000 Pro

Je créé via une procédure VBA un classeur avec une 30aine de feuilles.
Chacune de ces feuilles est nommée et doit contenir dans son module de
code

:

Private Sub Worksheet_BeforeRightClick( ..... )
' le code
End Sub

Dans un module standard ( module_feuille ) du classeur 'père' ( wbMacro ),
j'ai donc écrit l'évènement dans sa totalité
En utilisant la procédure ci-dessous ( issue du site de Frédéric Sigonneau
et adaptée ), je n'obtiens rien d'autre
qu'un plantage d'Excel ;o(((((

wFeuille est le CodeName de la feuille dans laquelle je veux écrire
l'évènement
wbSaisie est le classeur contenant cette feuille
wbMacro le classeur qui génère l'ensemble et qui contient les originaux

Function CopieCodeModuleFeuille(wFeuille As String)
'd'après Frédéric Sigonneau
Dim s As String

With wbMacro.VBProject.VBComponents("Module_feuille").CodeModule
s = .Lines(1, .CountOfLines)
End With

With wbSaisie.VBProject.VBComponents(wFeuille).CodeModule
.AddFromString s
End With
End Function


Pouvez-vous me dire où je me trompe ?
Merci d'avance.

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)



Avatar
Pounet95
Bonsoir,
D'abord, Merci pour vos réponses.
Je n'y arrive toujours pas : j'ai pensé un moment que c'était du à la non
présence
de la référence Microsoft Visual Basic For Applications Extensibility 5.3,
mais même effet ;o(((

Je me demande si la cause n'est pas dans le fait de passer une variable dans
le nom de la feuille ?
J'ai beau essayer de tracer avec un on error goto , il l'ignore totalement
après avoir tenté
l'éxécution de la ligne ci-dessous et plante excel en le fermant et me
dmandant si je veux envoyer
un rapport d'erreur à Billou .
.InsertLines DebutCode + 1, S

Je vais tenter la 2ème proposition à mon retour. Merci encore et à plus tard
..... pour vous dire que ça marche !!!
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"denis P" a écrit dans le message de news:
%
Bonjour Pounet95
Ne serait'il pas plus simple pour toi d'utiliser l'évènement
Workbook_SheetBeforeRightClick du module ThisWorkbook...
cela t'éviterai de devoir recopier ton code dans toute tes feuille ?
amicalement
denis p.
''''''''''''''''''''''''''''''''''''''
Private Sub Workbook_SheetBeforeRightClick _
(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'ton code
....
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
"Pounet95" a écrit dans le message de
news:e$$
Bonsoir à toutes et tous,
XL2000 XP Pro et XL2000 W2000 Pro

Je créé via une procédure VBA un classeur avec une 30aine de feuilles.
Chacune de ces feuilles est nommée et doit contenir dans son module de
code

:

Private Sub Worksheet_BeforeRightClick( ..... )
' le code
End Sub

Dans un module standard ( module_feuille ) du classeur 'père' (
wbMacro ),
j'ai donc écrit l'évènement dans sa totalité
En utilisant la procédure ci-dessous ( issue du site de Frédéric
Sigonneau
et adaptée ), je n'obtiens rien d'autre
qu'un plantage d'Excel ;o(((((

wFeuille est le CodeName de la feuille dans laquelle je veux écrire
l'évènement
wbSaisie est le classeur contenant cette feuille
wbMacro le classeur qui génère l'ensemble et qui contient les originaux

Function CopieCodeModuleFeuille(wFeuille As String)
'd'après Frédéric Sigonneau
Dim s As String

With wbMacro.VBProject.VBComponents("Module_feuille").CodeModule
s = .Lines(1, .CountOfLines)
End With

With wbSaisie.VBProject.VBComponents(wFeuille).CodeModule
.AddFromString s
End With
End Function


Pouvez-vous me dire où je me trompe ?
Merci d'avance.

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)







Avatar
anonymousA
re,

cette affaire de plantage m'est arrivé mais pour CreatEventProc avec
toujours l'inenarrable "L'adresse à gangna ne peut être written".
Bizarrement, j'ai résolu la question en prenant toujours soin de
compiler mon code avant chaque essai et ca a fini par marcher comme si
avant Excel s'emmêlait la pile de mémoire.
Je ne prétends pas que ce soit le même cas de figure ni la panacée mais
ca ne coute rien d'essayer.

A+


Bonsoir,
D'abord, Merci pour vos réponses.
Je n'y arrive toujours pas : j'ai pensé un moment que c'était du à la
non présence
de la référence Microsoft Visual Basic For Applications Extensibility
5.3, mais même effet ;o(((

Je me demande si la cause n'est pas dans le fait de passer une variable
dans le nom de la feuille ?
J'ai beau essayer de tracer avec un on error goto , il l'ignore
totalement après avoir tenté
l'éxécution de la ligne ci-dessous et plante excel en le fermant et me
dmandant si je veux envoyer
un rapport d'erreur à Billou .
.InsertLines DebutCode + 1, S

Je vais tenter la 2ème proposition à mon retour. Merci encore et à plus
tard ..... pour vous dire que ça marche !!!


Avatar
Pounet95
Re,
Ah oui, effectivement, le message " la mémoire ne peut être read ...."
m'arrive sous Windows 2000
et je suis obligé de rebooter le micro pour pouvoir accéder à nouveau au
fichier ( lecture seule sinon ! )
Par contre sous XP, pas de problème, je relance Excel comme si de rien
n'était. Qu'y comprendre ?
Bon, je vais essayer de m'y remettre entre les buts de Thierry Henry et
Trézégoal !!!!
A + pour la suite
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"anonymousA" a écrit dans le message de news:
420a5e88$0$28558$
re,

cette affaire de plantage m'est arrivé mais pour CreatEventProc avec
toujours l'inenarrable "L'adresse à gangna ne peut être written".
Bizarrement, j'ai résolu la question en prenant toujours soin de compiler
mon code avant chaque essai et ca a fini par marcher comme si avant Excel
s'emmêlait la pile de mémoire.
Je ne prétends pas que ce soit le même cas de figure ni la panacée mais ca
ne coute rien d'essayer.

A+


Bonsoir,
D'abord, Merci pour vos réponses.
Je n'y arrive toujours pas : j'ai pensé un moment que c'était du à la non
présence
de la référence Microsoft Visual Basic For Applications Extensibility
5.3, mais même effet ;o(((

Je me demande si la cause n'est pas dans le fait de passer une variable
dans le nom de la feuille ?
J'ai beau essayer de tracer avec un on error goto , il l'ignore
totalement après avoir tenté
l'éxécution de la ligne ci-dessous et plante excel en le fermant et me
dmandant si je veux envoyer
un rapport d'erreur à Billou .
.InsertLines DebutCode + 1, S

Je vais tenter la 2ème proposition à mon retour. Merci encore et à plus
tard ..... pour vous dire que ça marche !!!




Avatar
Pounet95
Re, BINGO !!!!!

J'ai refait la procédure en mettant une boucle sur les feuilles du classeur
et en utilisant .CreateEventProc
Au premier coup, plantage itou
Ensuite, j'ai compilé et ça marche.

.........
For i = 1 To ActiveWorkbook.Sheets.Count
If Sheets(i).Name = "LOV" Or Sheets(i).Name = "Accueil" Then

Else
wFeuille = Sheets(i).CodeName
With
ActiveWorkbook.VBProject.VBComponents(wFeuille).CodeModule
'nom de l'événement, type de module concerné
("Worksheet")
'n° ligne du début de la proc
DebutCode = .CreateEventProc("BeforeRightClick",
"WorkSheet")
'insérer le texte du code
.InsertLines DebutCode + 1, S
End With
End If
Next i
.............

Maintenant, je me pose une question : la procédure étant lancée par un
bouton,
le fait que le code ait été compilé une fois est-il suffisant ? Est-ce que
je peux
diffuser mon fichier sans crainte ?

Merci pour vos réponses venues et à venir.
Bonne soirée devant les écrans ( micro et TV pour France-Suède )
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Pounet95" a écrit dans le message de news:
e$$
Bonsoir à toutes et tous,
XL2000 XP Pro et XL2000 W2000 Pro

Je créé via une procédure VBA un classeur avec une 30aine de feuilles.
Chacune de ces feuilles est nommée et doit contenir dans son module de
code :

Private Sub Worksheet_BeforeRightClick( ..... )
' le code
End Sub

Dans un module standard ( module_feuille ) du classeur 'père' ( wbMacro ),
j'ai donc écrit l'évènement dans sa totalité
En utilisant la procédure ci-dessous ( issue du site de Frédéric Sigonneau
et adaptée ), je n'obtiens rien d'autre
qu'un plantage d'Excel ;o(((((

wFeuille est le CodeName de la feuille dans laquelle je veux écrire
l'évènement
wbSaisie est le classeur contenant cette feuille
wbMacro le classeur qui génère l'ensemble et qui contient les originaux

Function CopieCodeModuleFeuille(wFeuille As String)
'd'après Frédéric Sigonneau
Dim s As String

With wbMacro.VBProject.VBComponents("Module_feuille").CodeModule
s = .Lines(1, .CountOfLines)
End With

With wbSaisie.VBProject.VBComponents(wFeuille).CodeModule
.AddFromString s
End With
End Function


Pouvez-vous me dire où je me trompe ?
Merci d'avance.

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)



Avatar
anonymousA
re,

Pour eviter la lecture seule san rebooter , réponds au message de
Excel.exe, Annuler.

A+
Re,
Ah oui, effectivement, le message " la mémoire ne peut être read ...."
m'arrive sous Windows 2000
et je suis obligé de rebooter le micro pour pouvoir accéder à nouveau au
fichier ( lecture seule sinon ! )
Par contre sous XP, pas de problème, je relance Excel comme si de rien
n'était. Qu'y comprendre ?
Bon, je vais essayer de m'y remettre entre les buts de Thierry Henry et
Trézégoal !!!!
A + pour la suite


Avatar
anonymousA
re,

à priori, si ca a fonctionné, ca devrait le refaire. Quand ca m'est
arrivé, ca n'a plus jamais déconné.

A+


Re, BINGO !!!!!

J'ai refait la procédure en mettant une boucle sur les feuilles du classeur
et en utilisant .CreateEventProc
Au premier coup, plantage itou
Ensuite, j'ai compilé et ça marche.

.........
For i = 1 To ActiveWorkbook.Sheets.Count
If Sheets(i).Name = "LOV" Or Sheets(i).Name = "Accueil" Then

Else
wFeuille = Sheets(i).CodeName
With
ActiveWorkbook.VBProject.VBComponents(wFeuille).CodeModule
'nom de l'événement, type de module concerné
("Worksheet")
'n° ligne du début de la proc
DebutCode = .CreateEventProc("BeforeRightClick",
"WorkSheet")
'insérer le texte du code
.InsertLines DebutCode + 1, S
End With
End If
Next i
.............

Maintenant, je me pose une question : la procédure étant lancée par un
bouton,
le fait que le code ait été compilé une fois est-il suffisant ? Est-ce
que je peux
diffuser mon fichier sans crainte ?

Merci pour vos réponses venues et à venir.
Bonne soirée devant les écrans ( micro et TV pour France-Suède )


Avatar
Clément Marcotte
Bonjour,

Ah oui, effectivement, le message " la mémoire ne peut être read
...."

m'arrive sous Windows 2000


En principe, il suffirait de repasser un/des SevicePack(s) de Windows.

http://search.microsoft.com

search for : memory could not be read



"Pounet95" a écrit dans le message de
news:
Re,
et je suis obligé de rebooter le micro pour pouvoir accéder à
nouveau au

fichier ( lecture seule sinon ! )
Par contre sous XP, pas de problème, je relance Excel comme si de
rien

n'était. Qu'y comprendre ?
Bon, je vais essayer de m'y remettre entre les buts de Thierry Henry
et

Trézégoal !!!!
A + pour la suite
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

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

420a5e88$0$28558$
re,

cette affaire de plantage m'est arrivé mais pour CreatEventProc
avec


toujours l'inenarrable "L'adresse à gangna ne peut être written".
Bizarrement, j'ai résolu la question en prenant toujours soin de
compiler


mon code avant chaque essai et ca a fini par marcher comme si
avant Excel


s'emmêlait la pile de mémoire.
Je ne prétends pas que ce soit le même cas de figure ni la panacée
mais ca


ne coute rien d'essayer.

A+


Bonsoir,
D'abord, Merci pour vos réponses.
Je n'y arrive toujours pas : j'ai pensé un moment que c'était du
à la non



présence
de la référence Microsoft Visual Basic For Applications
Extensibility



5.3, mais même effet ;o(((

Je me demande si la cause n'est pas dans le fait de passer une
variable



dans le nom de la feuille ?
J'ai beau essayer de tracer avec un on error goto , il l'ignore
totalement après avoir tenté
l'éxécution de la ligne ci-dessous et plante excel en le fermant
et me



dmandant si je veux envoyer
un rapport d'erreur à Billou .
.InsertLines DebutCode + 1, S

Je vais tenter la 2ème proposition à mon retour. Merci encore et
à plus



tard ..... pour vous dire que ça marche !!!







Avatar
Pounet95
Bonjour,

J'ai crié victoire trop tôt ! En fait, cela n'a fonctionné qu'une fois et
même en recompilant ( à condition de faire au moins une modif ),
il n'y a rien à faire. Je me lance sur la proposition de Denis et vais voir
ce que je peux faire en utilisant l'évènement dans ThisWorkbook
Dans le même style, je n'ai aucun souci pour créer un module standard et y
recopier les procédures issues du classeur 'père'.
Etant donné les problèmes de reboot, je n'en suis que sur XP Pro. Je mets
au chaud la précision de Clément sur le pack W2000
et je soumets le problème à ceux qui savent et qui gèrent le parc logiciel
et informatique.
Je vous tiens au courant.
Bonne journée


--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Pounet95" a écrit dans le message de news:
e$$
Bonsoir à toutes et tous,
XL2000 XP Pro et XL2000 W2000 Pro

Je créé via une procédure VBA un classeur avec une 30aine de feuilles.
Chacune de ces feuilles est nommée et doit contenir dans son module de
code :

Private Sub Worksheet_BeforeRightClick( ..... )
' le code
End Sub

Dans un module standard ( module_feuille ) du classeur 'père' ( wbMacro ),
j'ai donc écrit l'évènement dans sa totalité
En utilisant la procédure ci-dessous ( issue du site de Frédéric Sigonneau
et adaptée ), je n'obtiens rien d'autre
qu'un plantage d'Excel ;o(((((

wFeuille est le CodeName de la feuille dans laquelle je veux écrire
l'évènement
wbSaisie est le classeur contenant cette feuille
wbMacro le classeur qui génère l'ensemble et qui contient les originaux

Function CopieCodeModuleFeuille(wFeuille As String)
'd'après Frédéric Sigonneau
Dim s As String

With wbMacro.VBProject.VBComponents("Module_feuille").CodeModule
s = .Lines(1, .CountOfLines)
End With

With wbSaisie.VBProject.VBComponents(wFeuille).CodeModule
.AddFromString s
End With
End Function


Pouvez-vous me dire où je me trompe ?
Merci d'avance.

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)



1 2