OVH Cloud OVH Cloud

Insertion par une macro d'un évenement BeorePrint

5 réponses
Avatar
Philippe
Bonsoir à tous,

Sur XL 2000, je souhaiterais créer une macro, appelé par un bouton
personnalisé, qui me permettrait d'insérer une procédure évènement
BeforePrint dans la feuille active.

J'ai récupéré et adapté les bouts de code suivant sur le site Chip
Pearson mais je coince lorsque je veux tester si cette procédure
n'existe pas déjà dans le classeur actif.

L'un d'entre vous pourrait-il me dire où se trouve le problème ?

Merci d'avance

Philippe




Sub InsertBeforePrint()

If ProcedureExists("WorkBook_BeforePrint", "ThisWorkBook") = True
Then Exit Sub
Dim StartLine As Long
With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
StartLine = .CreateEventProc("BeforePrint", "Workbook") + 1
.InsertLines StartLine, "ActiveSheet.PageSetup.RightFooter =
""&6"" & ActiveWorkbook.FullName"
End With

End Sub

Function ProcedureExists(ProcedureName As String, ModuleName As String)
As Boolean
On Error Resume Next
If ModuleExists(ModuleName) = True Then
ProcedureExists = ThisWorkbook.VBProject.VBComponents(ModuleName) _
.CodeModule.ProcStartLine(ProcedureName,
vbext_pk_Proc) <> 0
End If
End Function

Function ModuleExists(ModuleName As String) As Boolean
On Error Resume Next
ModuleExists =
Len(ThisWorkbook.VBProject.VBComponents(ModuleName).Name) <> 0
End Function

5 réponses

Avatar
Pierre Fauconnier
Bonsoir

Dans la fonction qui teste l'existence de la procédure ( ProcedureExists ) ,
remplace la constante
vbext_pk_proc par 0 et ton code fonctionnera convenablement

Cela convient-il?

--
Pierre Fauconnier ()
Les sept laids tuent ( Lewis Carol )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"Philippe" a écrit dans le message de
news:
Bonsoir à tous,

Sur XL 2000, je souhaiterais créer une macro, appelé par un bouton
personnalisé, qui me permettrait d'insérer une procédure évènement
BeforePrint dans la feuille active.

J'ai récupéré et adapté les bouts de code suivant sur le site Chip
Pearson mais je coince lorsque je veux tester si cette procédure
n'existe pas déjà dans le classeur actif.

L'un d'entre vous pourrait-il me dire où se trouve le problème ?

Merci d'avance

Philippe




Sub InsertBeforePrint()

If ProcedureExists("WorkBook_BeforePrint", "ThisWorkBook") = True
Then Exit Sub
Dim StartLine As Long
With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
StartLine = .CreateEventProc("BeforePrint", "Workbook") + 1
.InsertLines StartLine, "ActiveSheet.PageSetup.RightFooter > ""&6"" & ActiveWorkbook.FullName"
End With

End Sub

Function ProcedureExists(ProcedureName As String, ModuleName As String)
As Boolean
On Error Resume Next
If ModuleExists(ModuleName) = True Then
ProcedureExists = ThisWorkbook.VBProject.VBComponents(ModuleName)
_

.CodeModule.ProcStartLine(ProcedureName,
vbext_pk_Proc) <> 0
End If
End Function

Function ModuleExists(ModuleName As String) As Boolean
On Error Resume Next
ModuleExists > Len(ThisWorkbook.VBProject.VBComponents(ModuleName).Name) <> 0
End Function


Avatar
Philippe
Bonsoir

Dans la fonction qui teste l'existence de la procédure ( ProcedureExists ) ,
remplace la constante
vbext_pk_proc par 0 et ton code fonctionnera convenablement

Cela convient-il?

Bonsoir,


Malheureusement le résultat est identique, un deuxième évènement est
crée, ce qui génère un message d'erreur à l'impression "Nom Ambigu ...).

Philippe

Avatar
Pierre Fauconnier
Etonnant, pas chez moi...
As-tu essayé en méthode pas à pas?

Pierre
"Philippe" a écrit dans le message de
news:%
Bonsoir

Dans la fonction qui teste l'existence de la procédure (
ProcedureExists ) ,


remplace la constante
vbext_pk_proc par 0 et ton code fonctionnera convenablement

Cela convient-il?

Bonsoir,


Malheureusement le résultat est identique, un deuxième évènement est
crée, ce qui génère un message d'erreur à l'impression "Nom Ambigu ...).

Philippe



Avatar
Philippe
Etonnant, pas chez moi...
As-tu essayé en méthode pas à pas?

Pierre


Bonjour,

La macro, telle que je l'ai écrite ou modifiée valide bien l'existence
du module ("ThisWorkBook") mais ne détecte pas la présence de
l'évènement "Workbook_BeforePrint".

Faut-il compléter le nom par "(Cancel As Boolean)" ?

Philippe

Avatar
Frédéric Sigonneau
Bonsoir,

3 macros pour trouver si une procédure existe ou non dans un classeur :

http://frederic.sigonneau.free.fr/code/VBE/ChercherSiUneProcedureExiste.txt

L'une de ces approches peut peut-être t'aider à résoudre ton problème..

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Bonsoir à tous,

Sur XL 2000, je souhaiterais créer une macro, appelé par un bouton
personnalisé, qui me permettrait d'insérer une procédure évènement
BeforePrint dans la feuille active.

J'ai récupéré et adapté les bouts de code suivant sur le site Chip
Pearson mais je coince lorsque je veux tester si cette procédure
n'existe pas déjà dans le classeur actif.

L'un d'entre vous pourrait-il me dire où se trouve le problème ?

Merci d'avance

Philippe




Sub InsertBeforePrint()

If ProcedureExists("WorkBook_BeforePrint", "ThisWorkBook") = True
Then Exit Sub
Dim StartLine As Long
With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
StartLine = .CreateEventProc("BeforePrint", "Workbook") + 1
.InsertLines StartLine, "ActiveSheet.PageSetup.RightFooter =
""&6"" & ActiveWorkbook.FullName"
End With

End Sub

Function ProcedureExists(ProcedureName As String, ModuleName As String)
As Boolean
On Error Resume Next
If ModuleExists(ModuleName) = True Then
ProcedureExists = ThisWorkbook.VBProject.VBComponents(ModuleName) _
.CodeModule.ProcStartLine(ProcedureName,
vbext_pk_Proc) <> 0
End If
End Function

Function ModuleExists(ModuleName As String) As Boolean
On Error Resume Next
ModuleExists =
Len(ThisWorkbook.VBProject.VBComponents(ModuleName).Name) <> 0
End Function