Comment eviter le plantage de la procedure quand il n'y a pas de thisworkbook_op

C

Creepy

Guest
Bonjour all,

Pour effacer ma procedure Workbook_open on m'a donné sur ce forum le tuyau suivant :

-------------------------------------------------------------------
Dim Debut As Integer, Lignes As Integer

With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").codemodule
Debut = .ProcStartLine("Workbook_Open", 0)
Lignes = .ProcCountLines("Workbook_Open", 0)
.DeleteLines Debut, Lignes
End With
-----------------------------------------------------------------

Ca marche super sauf quand le workbook_open a deja été effacé !! j'ai un miserable message d'erreur : erreur 35, sub ou fonction non définie.

Comment eviter que ma macro plante quand il n'y a pas ce workbook_open ?

Merci

@+

Creepy
 
P

pierref

Guest
une solution un peu brutale mais qui marche :

Dim Debut As Integer, Lignes As Integer

on error goto suite

With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").codemodule
Debut = .ProcStartLine("Workbook_Open", 0)
Lignes = .ProcCountLines("Workbook_Open", 0)
.DeleteLines Debut, Lignes
End With

suite :

'la suite du code...
 
@

@+Thierry

Guest
Bonjour Creepy, Pierref, le Forum

Je trouve la même solution que Pierref, mais je préfère souvent créer un réel "ErrorHandler" car dans l'exemple que Pierref donne toutes les erreurs seront ignorées, ce qui, selon la nature du reste du code peut occasionner des désagrément...

Sub TestWorkbook_Open()
Dim Debut As Integer, Lignes As Integer
Dim msg As String

With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").codemodule
On Error GoTo ErrorHandler
Debut = .ProcStartLine("Workbook_Open", 0)
Lignes = .ProcCountLines("Workbook_Open", 0)
.DeleteLines Debut, Lignes
End With

'blah blah blah suite du code (if any)

Exit Sub
ErrorHandler:
If Err = 35 Then
MsgBox "Macro WorkBook_Open non existante", vbInformation, "Erreur Gérée"
Else
MsgBox "Une erreur # " & Str(Err.Number) & " a été générée par " _
& Err.Source & vbCrLf & Err.Description, vbCritical, "DANGER Erreur Non-Gérée"
End If
End Sub

Bien entendu, si dans ce cas de Figure, Creepy ne veut pas être "embêté" par le message pour le WorkBook_Open, le ErrorHandler peut se présenter ainsi :

If Err <> 35 Then
MsgBox "Une erreur # " & Str(Err.Number) & " a été générée par " _
& Err.Source & vbCrLf & Err.Description, vbCritical, "DANGER Erreur Non-Gérée"
End If
End Sub

Bon Aprèm
@+Thierry
 

Discussions similaires

D
Réponses
2
Affichages
1 K

Statistiques des forums

Discussions
312 304
Messages
2 087 065
Membres
103 451
dernier inscrit
Souleymane