Complément .xla : Exécution à l'ouverture de certains fichiers

ouali

XLDnaute Junior
Bonjour le forum,

Voilà j'ai créé un complément .xla qui fonctionne très bien. J'aimerais cependant qu'il m'éxécute une macro à l'ouverture du fichier lorsque ce fichier à une certain nom.

Voici mon code dans this worbook du complément :
Code:
Private Sub Workbook_Open()
Run "aMenus"

Dim fso As Variant
Dim Nomfichier As String
'
'Importation de la librairie des libellé et ses mnémoniques dans le fichier de saisie des signaux des automates M1

Nomfichier = ThisWorkbook.Name
If Nomfichier Like "*Saisie*" Then
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FileExists("P:\DEP_TEC_ELECTRICITE\SPCC\02_Etudes_et_Projets\02_Etudes\05_StreamX\StreamTools\Librairies\Libellé_ObjectText.csv") = True Then
        Call Importe_Libellé
        Call Importe_Champ
        Call Importe_Ouvrage
        Call Importe_Comportement

        MsgBox "Ordinateur connecté au serveur, les différentes librairies ont été mises à jour"
    
    Else
        MsgBox "Ordinateur non connecté au serveur, les différentes librairies n'ont pas été mises à jour"
    End If

End If

End Sub

Le problème est que la fonction thisWorkbook.name prend le nom du compléement et pas le nom du classeur excel que j'ouvre.

Est ce que quelqu'un a une idée pour prendre le nom du classeur ??

Merci d'avance pour vos réponses
 

Pierrot93

XLDnaute Barbatruc
Re : Complément .xla : Exécution à l'ouverture de certains fichiers

Bonjour,

essaye en utilisant un module de classe dans ta "xla".

dans un module standard :
Code:
Option Explicit
Public z As New Classe1

dans le module thisworkbook :
Code:
Option Explicit
Private Sub Workbook_Open()
Set z.MonExcel = Application
End Sub

dans un module de classe nommé "Claase1" :
Code:
Option Explicit
Public WithEvents MonExcel As Application
Private Sub MonExcel_WorkbookOpen(ByVal Wb As Workbook)
If Not Wb.IsAddin And Not Wb.Name Like "classeur*" And Not LCase(Wb.Name) _
    Like "perso*" Then MsgBox Wb.Name
End Sub

bon après midi
@+
 

ouali

XLDnaute Junior
Re : Complément .xla : Exécution à l'ouverture de certains fichiers

Bonjour,

Merci pour ton aide ca marche bien.

Par contre j'ai aussi besoin d'utiliser le nom du fichier dans un module mais je n'arrive pas

J'ai essayé
Wb.name.activate
Windows(Wb.Name).Activate

Mais rien ne fonctionne alors si jamais vous avez la solution ? je suis en pleine recherche !!

Merci et bonne journée
 

Pierrot93

XLDnaute Barbatruc
Re : Complément .xla : Exécution à l'ouverture de certains fichiers

Bonjour,

euh... comprends pas bien, mets ta procédure dans le module de classe et sert toi de la variable objet "wb"... sans plus de détails, difficile de t'en dire plus...

bonne journée
@+
 

ouali

XLDnaute Junior
Re : Complément .xla : Exécution à l'ouverture de certains fichiers

Ok désolé je vais essayer d'être plus clair.

Voici le code qui se trouve dans le module de classe

Code:
Option Explicit

Public WithEvents MonExcel As Application
Sub MonExcel_WorkbookOpen(ByVal Wb As Workbook)

If Not Wb.IsAddin And Wb.Name Like "Saisie*" And Not LCase(Wb.Name) Like "perso*" Then
    
    Dim fso As Variant

'Importation de la librairie des libellé et ses mnémoniques dans le fichier de saisie des signaux des automates M1

    If Wb.Name Like "*Saisie*" Then
        Set fso = CreateObject("Scripting.FileSystemObject")
        If fso.FileExists("P:\DEP_TEC_ELECTRICITE\SPCC\02_Etudes_et_Projets\02_Etudes\05_StreamX\StreamTools\Librairies\Libellé_ObjectText.csv") = True Then
            Call Importe_Libellé
            Call Importe_Champ
            Call Importe_Ouvrage
            Call Importe_Comportement

            MsgBox "Ordinateur connecté au serveur, les différentes librairies ont été mises à jour"
    
        Else
            MsgBox "Ordinateur non connecté au serveur, les différentes librairies n'ont pas été mises à jour"
        End If

    End If
    
    MsgBox Wb.Name
    
End If
End Sub

Dans ce module j'appelle la procédure Call Importe_Libellé. Dans cette procédure je vais chercher des informations dans un autre classeur excel que je veux venir coller dans mon fichier.

Avant lorsque le code était dans le fichier en lui-même j'utilisais la fonction : thisWorkbook.activate. Or maintenant je ne peux plus comme le code se trouve dans un compléement. Alors j'aimerais activer le fichier avec Wb mais ca ne marche pas !!

J'espère que c'est plus clair ??
 

Pierrot93

XLDnaute Barbatruc
Re : Complément .xla : Exécution à l'ouverture de certains fichiers

Bonjour,

passe le classeur en question en argument, dans le module de classe pour le "call" :
Code:
Call Importe_Libellé(wb)

modifie la déclaration de procédure comme suit :
Code:
Sub Importe_Libellé(w As Workbook)
MsgBox w.Name
End Sub
 
Dernière édition:

ouali

XLDnaute Junior
Re : Complément .xla : Exécution à l'ouverture de certains fichiers

Bonjour,

Merci cela fonctionne bien je ne comprends pas quelquechose.

Pourquoi je n'arrive pas à rcupérer le nom de mon fichier dans d'autres procédures qui sont dans d'autres modules ?

En effet, dans mon complément j'ai d'autres procédures que j'appelle uniquement avec un "bouton" dans l'onglet complément

J'ai donc un module avec ce code

Code:
Option Explicit

Public z As New Classe1



Sub aMenus()

Dim cMenuS As CommandBarControl
Dim cbMenuPrincipal As CommandBar
Dim IdAide As Integer
Dim cbMenuPersonnalise As CommandBarControl

On Error Resume Next

Application.CommandBars("Worksheet Menu Bar").Controls("&Liste signaux M1").Delete

Set cbMenuPrincipal = Application.CommandBars("Worksheet Menu Bar")
IdAide = cbMenuPrincipal.Controls("?").Index

Set cbMenuPersonnalise = _
        cbMenuPrincipal.Controls.Add(Type:=msoControlPopup, Before:=IdAide)
        cbMenuPersonnalise.Caption = "&Liste signaux M1"
        
        With cbMenuPersonnalise.Controls.Add(Type:=msoControlButton)
            .Caption = "Saisir un signal"
            .OnAction = "Saisie_donnee"
        End With

        With cbMenuPersonnalise.Controls.Add(Type:=msoControlButton)
            .Caption = "Exporter"
            .OnAction = "Export(wb)"
        End With
        
        
        With cbMenuPersonnalise.Controls.Add(Type:=msoControlButton)
            .Caption = "Mapping IEC 104"
            .OnAction = "Importe_donnees"
        End With
        

        
On Error GoTo 0
End Sub

La fonction saise de donnée marche très bien mais les deux autres fonctions ont beosin du chemin du fichier SaisieM1.

J'ai donc procédé de la même manière que vous m'aviez expliqué mais cela ne fonctionne pas

Voici un tout petit bout de code de la fontion Export
Code:
Sub Export(wb As Workbook)

Dim Emplacement  As String

Emplacement = wb.Path & "\Export_vide.txt"

Or qd je veux lancer l'export depuis la partie complément de Excel il me dit que la macro n'existe pas !! et ceci est dû au fait de rajouter le wb en déclaration.

Car si a la place de Emplacement = wb.Path & "\Export_vide.txt" je met
Emplacement = thisworkbook.Path & "\Export_vide.txt" le fichier export va s'enregistrer dans le dossier ou il y a mon complément !!

Enfin bref si vous pouviez m'éclaircir un peu plus sur le fonctionnnent de cette variable et/ou du module de classe c'est avec plaisir !!

Merci pour votre aide dans tous les cas
 

Pierrot93

XLDnaute Barbatruc
Re : Complément .xla : Exécution à l'ouverture de certains fichiers

Bonjour,

en l'état pas sûr que "wb" soit bien initialisée... enfin dans le code donné je ne vois rien dans ce sens... attention également au "On Error Resume Next" qui masque toutes les erreurs et laisse l'exécution se poursuivre...

bon après midi
@+
 

ouali

XLDnaute Junior
Re : Complément .xla : Exécution à l'ouverture de certains fichiers

Salut

Par initialiser vous entendez déclarer ?

Car j'ai un module ou je déclare les variables utilisées dans plusieur modules :

Public wb As Workbook

Mais le fait d'utiliser un module de classe m'empecherait-il de réupérer cette variable ?

Bon après-midi également ;)
 

Pierrot93

XLDnaute Barbatruc
Re : Complément .xla : Exécution à l'ouverture de certains fichiers

Re,

non pas déclarée mais valorisée... attention d'ailleur avec ta variable "public", elle est également utilisée pour identifier l'argument de la classe... risque de provoquer des horreurs...
 

ouali

XLDnaute Junior
Re : Complément .xla : Exécution à l'ouverture de certains fichiers

Bon je ne déclare plus la variable public au cas ou cela pourrait me provoquer des horreurs.

Par contre la variable wb est bien valorisée. C'est dans le code que tu m'as proposée de mettre dans un module de classe afin d'avoir le nom du fichier. Le problème ce que j'arrive à l'utiliser uniquement dans ce module de classe et pas dans un module standard ou en tout cas une procédure qui n'est as lancé depuis le code du module de classe.

Bon plus ca avance plus je suis perdue ;) c'est la premire fois que je crée un complément et que j'utilise un module de classe au cas où et d'ailleurs je n'ai pas encore tout compris au module de classe!!
 

Pierrot93

XLDnaute Barbatruc
Re : Complément .xla : Exécution à l'ouverture de certains fichiers

Re,

bah... cela nous ramène au post 6.... d'autre part, as tu enlevé le "on error resume next" ?? et pas sûr que l'on puisse passer un argument dans la propriété "onaction" comme ceci :
Code:
.OnAction = "Export(wb)"