Récupérer une variable d'une macro déclarée dans le dossier personnel (PERSONAL.XLSB)

Ratos

XLDnaute Nouveau
Bonjour j'ai un problème avec les variables publics
Mon environnement de travail : Windows Seven et Excel 2010
Dans mon dossier de macro personnel (PERSONAL.XLSB), j'ai crée une macro qui se nomme "lire_fichier_ini".
Cette macro me lit un fichier ini qui me renseigne sur certains paramètres de configuration.

La macro en principe est accessible depuis n'importe quels développements de modules Excel.

A partir de ce constat j'aimerai que dans n'importe module Excel je puisse accéder à une variable qui se trouve dans la macro "lire_fichier_ini"

J'ai essayé la variante suivante ::(
- déclaration d'une variable Public "paramGlobaux" dans la macro "lire_fichier_ini" et ensuite affichage de cette variable dans un module externe.Le résultat est que la variable est vide dans le module externe et dans la macro "lire_fichier_ini" cette même variable contient les bonnes valeures.

Je tourne un peu en rond et je ne vois pas comment procéder.

Quelqu'un a-t-il été confronté à ce problème ?

Merci d'avance de vos suggestions.

Ratos
 

Dranreb

XLDnaute Barbatruc
Re : Récupérer une variable d'une macro déclarée dans le dossier personnel (PERSONAL.

Bonjour.
Si vous appelez la macro par un Run vous devriez pouvoir spécifier des paramètres à récupérer.
Sinon pour utiliser une variable Public d'un autre projet VBA il faut spécifier son nom suivi d'un point devant (mettez y en Name autre chose que VBAProject, bien sûr)
Vous pouvez aussi l'ajouter aux références.
À +
 

Ratos

XLDnaute Nouveau
Re : Récupérer une variable d'une macro déclarée dans le dossier personnel (PERSONAL.

Bonjour Dranreb
effectivement je lance ma macro avec la commande suivante :
Application.Run "PERSONAL.XLSB!lire_fichier_ini" et ensuite la ligne suivante c'est d'afficher ma variable "paramGlobaux" qui elle se trouve aussi dans "lire_fichier_ini"

Par contre aurais-tu un exemple sur la façon d'utiliser des paramètres avec la commande run et de récupérer les valeurs ?

Tu m'indiques une deuxième façon de récupérer une variable public c'est de mettre son nom suivi d'un point devant ???
Je ne comprends pas.
Si le nom de ma variable est "paramGlobaux" quelle est la syntaxe ?
Désolé je suis pas un king en programmation vba.

Merci encore de ton aide.

Ratos
 

Ratos

XLDnaute Nouveau
Re : Récupérer une variable d'une macro déclarée dans le dossier personnel (PERSONAL.

Bonjour MJ13 et Efgé
Désolé pour mon explication laborieuse.
Voilà en fait ce que je désire faire :

J'ai crée sous excel une macro dans mon dossier personnel de macro (c.a.d que cette macro est accessible à chaque fois que je lance une session excel)
Cette macro se nomme "lire_fichier_ini"
La fonction de cette macro c'est d'aller lire, dans un fichier ini qui se trouve sur mon disque local, des informations de configuration.

Ensuite j'ai commencé à développer mon application de gestion (avec Excel et VBA). Au lancement de cette application j'affiche une fenêtre (UserForm1)
qui doit faire certaines opérations selon les paramêtres se trouvant dans "lire_fichier_ini".
Et c'est là que le problème se corse car je n'arrive pas à récupérer la valeur de cette variable dans mon application de gestion.

j'espère avoir été un peu plus clair dans mon explication.

Merci de votre aide.

Ratos
 

Dranreb

XLDnaute Barbatruc
Re : Récupérer une variable d'une macro déclarée dans le dossier personnel (PERSONAL.

Je parlais de qualifier (devant un point) le nom de la variable Public du nom du projet VBA qui la contient. C'est obligatoire s'il n'est pas ajouté aux références de celui qui veut l'utiliser. Il faut naturellement d'abord lui donner un nom intelligent: avant d'être renommés ils s'appellent tous par défaut VBAProject.
Mais si vous exécuter par Run, il n'y a pas forcément de liaison VBA entre les 2 classeurs. Vous pouvez aussi écrire une fonction dans le classeur de macro qui renvoie les valeurs souhaitées. Ça peut aussi s'appeler par Run voir l'exemple dans l'aide
[h=1]Run, méthode[/h] Voir aussi S'applique à Exemple Spécificités
Méthode Run telle qu'elle s'applique à l'objet Range.
Cette méthode exécute la macro Microsoft Excel à cet endroit. La plage doit se trouver dans une feuille macro.
expression.Run(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)

expression Obligatoire. Expression qui renvoie un objet Range.
Arg1-Arg30 Arguments de type Variant facultatifs. Arguments à transmettre à la fonction.


Méthode Run telle qu'elle s'applique à l'objet Application.
Cette méthode exécute une macro ou appelle une fonction. Elle peut être utilisée pour exécuter une macro écrite en Visual Basic ou dans le langage de macro de Microsoft Excel ou pour exécuter une fonction dans une DLL ou une XLL.
expression.Run(Macro, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)

expression Obligatoire. Expression qui renvoie un objet Application.
Macro Argument de type Variant facultatif. Macro à exécuter. Il peut s'agir d'une chaîne de caractères contenant le nom de la macro, d'un objet Range indiquant l'endroit où se trouve la fonction ou encore d'un identificateur de Registre pour une fonction DLL (XLL) inscrite dans le Registre. En cas d'utilisation d'une chaîne de caractères, celle-ci sera évaluée dans le contexte de la feuille active.
Arg1-Arg30 Argument de type Variant facultatif. Arguments à transmettre à la fonction.


[h=2]Notes[/h] Vous ne pouvez pas utiliser d'arguments nommés avec cette méthode. Ils doivent être transmis par position.
La méthode Run renvoie ce que la macro exécutée renvoie. Les objets qui sont transmis à la macro en tant qu'arguments sont convertis en valeurs (en appliquant la propriété Value à l'objet). Cela signifie que vous ne pouvez pas passer d'objets aux macros à l'aide de la méthode Run.
[h=2]Exemple[/h] Cet exemple montre comment appeler la fonction macro My_Func_Sum, qui est définie dans la feuille macro MyCustom.xlm (cette dernière doit être ouverte). Dans cet exemple, la fonction accepte deux arguments numériques, 1 et 5.

mySum = Application.Run("MYCUSTOM.XLM!My_Func_Sum", 1, 5) MsgBox "Macro result: " & mySum
Cordialement.
 
Dernière édition:

Ratos

XLDnaute Nouveau
Re : Récupérer une variable d'une macro déclarée dans le dossier personnel (PERSONAL.

Salut Dranreb,
j'ai essayé ta solution mais je ne trouve pas encore le moyen de résoudre mon problème.
Peut-être me suis-je mal exprimé ou mon explication manque de clarté ?
Voici les étapes détaillées du projet.

Ouverture d'Excel - menu Affichage --> Macros et création d'une nouvelle macro dans le "Classeur de macros personnelles"
Cette nouvelle macro est en principe accessible après chaque lancement d'Excel et voici son code source :

'****************************************************************
Sub lire_fichier_ini(param1, param2)
'
' lire_fichier_ini Macro
'
Dim intFic As Integer
Dim strLigne As String
Dim lignes As String
Dim cpt As Integer

intFic = FreeFile
Open "C:\Gestion heures cours d'eau\configuration\config.ini" For Input As intFic

While Not EOF(intFic)
Line Input #intFic, strLigne
MsgBox ("Dans macro globale --> " & strLigne) 'affiche ligne après ligne
If lignes = "" Then
lignes = strLignes & vbCrLf
Else
lignes = lignes & strLigne & vbCrLf
End If
Wend

Close intFic
MsgBox (lignes) ' affiche tout le fichier ini
MsgBox (param1 * param2) ' c'est pour tester si les 2 paramètres sont bien reçus par la macro et c'est le cas
End Sub
'*****************************************************************

Pour info voilà le contenu de mon fichier config.ini (fichier texte)

'*****************************************************************
[Chemin acces au programme gestion des heures]
unité=c:\
chemin=Gestion heures cours d'eau
NomFichier=602 Cours d'eau
'*****************************************************************

Je lance une nouvelle session Excel. J'enregistre ce fichier Excel sous "602 Cours d'eau menu.xls"
Je crée ensuite un nouveau UserForm "ChoixFichier" (ce formulaire est vide, pas de champs de saisie pour l'instant)
Pour terminer j'insère le code suivant dans l'évènement Workbook_Open() c.a.d que mon UserForm est chargé automatiquement lors du lancement du fichier Excel "602 Cours d'eau menu.xls"

'*****************************************************************
Private Sub Workbook_Open()
Load ChoixFichier
ChoixFichier.Show
End Sub
'*****************************************************************

Dans le UserForm "ChoixFichier" j'ai mis le code suivant sur la propriété UserForm_Initialize()

'*****************************************************************
Private Sub UserForm_Initialize()
dim reponse as string

reponse = Application.Run("PERSONAL.XLSB!lire_fichier_ini", 70, 5) 'lancement de ma macro personnelle
MsgBox ("Macro result: " & reponse)

End Sub
'*****************************************************************

Et enfin voici le problème sur lequel je bute. Le code ci-dessus "MsgBox ("Macro result: " & reponse)" me donne rien ???
Commet dois-je procéder pour que la variable reponse contienne bien la valeur de la variable lignes de la macro lire_fichier_ini ?

Merci de ton aide car si je ne trouve pas de solution je vais devoir embarquer dans chaque fichier Excel les valeures du fichier
"config.ini". Dur dur la maintenance du code.

Cordialement
Ratos
excel probleme.jpg
 

Pièces jointes

  • excel probleme.jpg
    excel probleme.jpg
    61.5 KB · Affichages: 475
  • excel probleme.jpg
    excel probleme.jpg
    61.5 KB · Affichages: 484

Dranreb

XLDnaute Barbatruc
Re : Récupérer une variable d'une macro déclarée dans le dossier personnel (PERSONAL.

Bonjour.
Normal que le Run ne renvoit rien: lire_fichier_ini est une Sub, pas une Function.
À l'avenir veuillez joindre un classeur, pas du code reproduit sans balise, ni des images.
À +
 

Ratos

XLDnaute Nouveau
Re : Récupérer une variable d'une macro déclarée dans le dossier personnel (PERSONAL.

Bonjour Dranreb,
super tout fonctionne comme prévu.
Un grand merci pour ton aide.
(désolé pour la transgression des règles du forum)

Cordialement
Ratos
 

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87