michelxld
Messages postés402Date d'inscriptionvendredi 6 août 2004StatutMembreDernière intervention12 octobre 200832 12 juil. 2006 à 17:57
bonjour
je ne suis pas sur d'avoir bien compris mais tu peux tester
Application.EnableEvents = False
Workbooks.Open "C:\Documents and Settings\michel\dossier\leClasseur.xls"
'attention a bien reinitialiser la propriété d'activation des evenements (enableEvents)
Application.EnableEvents = True
michelxld
Messages postés402Date d'inscriptionvendredi 6 août 2004StatutMembreDernière intervention12 octobre 200832 14 juil. 2006 à 06:39
bonjour Mortalino
cette adaptation fonctionne avec Excel2002
Option Explicit
Public FichierATraiter As String
Sub EffaceCodeThisWorkBook()
Dim xlBook As Workbook
Dim NbLigneObjAvant As Integer, NbLigneObjApres As Integer
Call Choix_Fichier
Application.ScreenUpdating = False
On Error GoTo Fin
Application.EnableEvents = False
Set xlBook = Workbooks.Open(FichierATraiter)
Application.EnableEvents = True
On Error GoTo 0
With xlBook.VBProject.VBComponents("ThisWorkbook").CodeModule
NbLigneObjAvant = .CountOfLines 'nb lignes avant suppr
.DeleteLines 1, .CountOfLines NbLigneObjApres .CountOfLines 'nb lignes après suppr (par logique, doit être à 0)
End With
xlBook.Close True
MsgBox "Le code dans ThisWorkbook a été suprimer", vbOKOnly + vbInformation
Application.ScreenUpdating = True
Exit Sub
Fin:
Application.EnableEvents = True
End Sub
Sub Choix_Fichier()
Dim RechercheFile As FileDialog
Dim refItemSelectionne As FileDialogSelectedItems
' création de la boite de dialogue de type 'Choix du Fichier'
Set RechercheFile = Application.FileDialog(msoFileDialogFilePicker)
With RechercheFile
.Filters.Add "Fichiers excel", "*.xls", 1 'Type de l'extension
.InitialFileName = ThisWorkbook.Path 'la racine est celle de ce fichier
.AllowMultiSelect = False 'on ne permet qu'une seule sélection de fichier
.Title = "Quel est le fichier à traiter ?" 'titre de la boite de dialogue
If .Show = -1 Then 'on l'affiche
FichierATraiter = .SelectedItems.Item(1) 'référence le nom du fichier choisi
Else
End If
End With
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 12 juil. 2006 à 19:03
Salut Michel,
Merci pour ta réponse, je teste ça ce soir et te tiens au courant.
Je ne pourrais répondre avant samedi mais je le ferai.
Sinon, pour simplifier :
J'ai un fichier A. Je voudrai ouvrir un fichier B à partir de A.
Sachant, que dans B, il y a du code dans ThisWorkbook_Open qui ne doit pas être exécuté, mais le code dans A doit poursuivre son exécution.
Sinon, encore merci Michel et à samedi.
@++
--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 13 juil. 2006 à 10:53
Bonjour Michel,
Bon ben c'est pas mal, effectivement la procédure ne s'exécute pas mais cela me cause un autre problème.
Le but d'ouvrir le fichier c'est pour récupérer les noms de composants du ProjetVB (Module1, UserForm1 etc)
mais en mettant False à EnableEvents, j'ai un message d'erreur :
Erreur '50289'
Impossible de traiter l'objet tant que celui'ci est protégé.
Si tu connais une autre solution, je suis preneur !
@++
Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"
N'oubliez pas de lire le règlement
michelxld
Messages postés402Date d'inscriptionvendredi 6 août 2004StatutMembreDernière intervention12 octobre 200832 13 juil. 2006 à 17:00
bonjour
c'est curieux comme erreur
ci joint un exemple complet qui fonctionne chez moi
Sub listeMacros()
'MichelXld le 05.04.2004
'
'necessite d'activer la reference Microsoft Visual basic For Application Extensibility 5.3
'
Dim i As Integer, Ajout As Integer
Dim Msg As String
Dim VBCmp As VBComponent
Dim x As Integer
Dim Wb As Workbook
Application.ScreenUpdating = False
On Error GoTo Fin
Application.EnableEvents = False
Set Wb = Workbooks.Open(Filename:="C:\ClasseurTest.xls")
Application.EnableEvents = True
On Error GoTo 0
Ajout = 1
For Each VBCmp In Wb.VBProject.VBComponents
Msg = VBCmp.Name
With ThisWorkbook.Sheets(1).Cells(Ajout, 1)
.Interior.ColorIndex = 6
.Value = Msg
End With
x = Wb.VBProject.VBComponents(Msg).codemodule.CountOfLines
For i = 1 To x
ThisWorkbook.Sheets(1).Cells(Ajout + i, 1) = _
Wb.VBProject.VBComponents(Msg).codemodule.Lines(i, 1)
Next
Ajout = Ajout + x + 2
Next VBCmp
Wb.Close False
Application.ScreenUpdating = True
Exit Sub
Fin:
Application.EnableEvents = True
End Sub
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 13 juil. 2006 à 17:11
Merci Michel de l'aide que tu m'apportes.
En fait pour avoir les renseignements, ca fonctionne. Mais si je veux supprimer du code ou le module, c'est là que ça plante
Voici un extrait de mon appli. Tu peux tester si tu veux, il suffit de lancer cette procédure.
Sub EffaceCodeThisWorkBook()
Dim xlApp As New Excel.Application
Dim xlBook As Workbook
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
Set xlBook = xlApp.Workbooks.Open(FichierATraiter)
' Là on choisi l'Objet ThisWorkBook (dont Open en fait parti) et on procède à la suppression
' des lignes de code puis on ferme tout, et on vide les mémoires
With xlBook.VBProject.VBComponents("ThisWorkbook").CodeModule
NbLigneObjAvant = .CountOfLines 'nb lignes avant suppr
.DeleteLines 1, .CountOfLines NbLigneObjApres .CountOfLines 'nb lignes après suppr (par logique, doit être à 0)
End With
xlApp.Visible = True
xlBook.Close True
xlApp.Quit
Set xlBook = Nothing
Set xlApp = Nothing
MsgBox "Le code dans ThisWorkbook a été suprimer", vbOKOnly + vbInformation
End Sub
Sub Choix_Fichier()
Dim RechercheFile As FileDialog, refItemSelectionne As FileDialogSelectedItems
' création de la boite de dialogue de type 'Choix du Fichier'
Set RechercheFile = Application.FileDialog(msoFileDialogFilePicker)
With RechercheFile
.Filters.Add "Fichiers excel", "*.xls", 1 'Type de l'extension
.InitialFileName = ThisWorkbook.Path 'la racine est celle de ce fichier
.AllowMultiSelect = False 'on ne permet qu'une seule sélection de fichier
.Title = "Quel est le fichier à traiter ?" 'titre de la boite de dialogue
If .Show = -1 Then 'on l'affiche
FichierATraiter = .SelectedItems.Item(1) 'référence le nom du fichier choisi
Else
End If
End With
Set RechercheFile = Nothing 'vide la mémoire
End Sub
En tout cas, merci à toi Michel.
@++
Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"
Merci de prendre le temps de répondre à ce sondage
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 14 juil. 2006 à 11:52
Bonjour Michel,
et bein je te remercie pour ton code, en fait ça a replanté mais je viens de percuter pourquoi : j'ai fait un test sur un fichier du boulot (il n'y a que là que j'ai du code à l'ouverture) mais j'avais protégé mon projet par un mot de passe.
Je viens de virer le mot de passe et le code s'execute nickel.
Donc je te remercie car sans toi je n'aurais jamais pensé au coup du EnableEvents.
Merci aussi de t'être penché sur ce code !
@++
Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"
Merci de prendre le temps de répondre à ce sondage