ThisWorkBook_Open

Résolu
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 12 juil. 2006 à 08:46
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 14 juil. 2006 à 11:52
Salut à tous,

Je cherche le moyen, à partir d'Excel 2003, d'ouvrir un autre fichier Excel 2003 n'executant pas le code dans ThisWorkBook_Open.

J'ai cherché partout sans trouvé réponse.

Merci de votre aide

@++
Mortalino

Ps : je repasse vers 16h.

10 réponses

michelxld Messages postés 402 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 12 octobre 2008 32
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

bonne soiree
michel
3
michelxld Messages postés 402 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 12 octobre 2008 32
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
  
    Set RechercheFile = Nothing 'vide la mémoire


End Sub

bonne journée
michel


 
3
cs_bipou Messages postés 61 Date d'inscription mercredi 14 janvier 2004 Statut Membre Dernière intervention 14 septembre 2006
12 juil. 2006 à 10:17
bonjour Mortalino,

avec

    Application.AutomationSecurity = msoAutomationSecurityForceDisable

que tu connais ca peut fonctionner mais cela va certainement arreter ta macro derrière.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
12 juil. 2006 à 17:03
Salut Bipou,

effectivement ça m'arrête ma macro principale et c'est là que je bloque.

J'ai testé ça :

Dim secAutomation As MsoAutomationSecurity

secAutomation = Application.AutomationSecurity

Application.AutomationSecurity = msoAutomationSecurityForceDisable

' ouverture de mon fichier.xls ayant du code dans Thisworkbook_Open
' code ...

Application.AutomationSecurity = secAutomation

Mais la continuité de ma macro ne s'execute plus.
C'est tordu, ce que je demande mais j'y arrive pas.

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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 !
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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
0
michelxld Messages postés 402 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 12 octobre 2008 32
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





bon apres midi
michel


 


 
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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






























Application.EnableEvents = False
Call Choix_Fichier
Application.EnableEvents = True






























        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















/FONT>
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
13 juil. 2006 à 17:13
Public FichierATraiter As String

a mettre en déclaration  (je suis mauvais en copier / coller)
 
@++

Mortalino

Le mystérieux chevalier, "Provençal, le Gaulois"
Merci de prendre le temps de répondre à ce sondage

/FONT>
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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



















 
0
Rejoignez-nous