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 ??
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
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...
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 !!
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 !!
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...
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...
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!!
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 :
Re : Complément .xla : Exécution à l'ouverture de certains fichiers
Re,
A priori, et sauf erreur de ma part on ne peut pas affecter une macro à un objet, si cette macro possède des arguments, "Optional" ou pas d'ailleurs....