Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Variables à utiliser dans 2 fichiers séparés

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Titof06

XLDnaute Occasionnel
Bonjour,

Je souhaite garder une variable dans 2 fichiers séparés.

Je m'explique.

Je déclare dans le fichier 1 une variable sous la forme :
Public desnum As Variant (la variable "desnum" étant un nombre de 1 à 99)

Si j'ouvre le fichier 2 et souhaite récupérer cette variable, j'ai un message "Erreur de compilation, Nom ambigü détecté : desnum"
J'ouvre le fichier 2, je fais un traitement spécifique et le referme.

L'erreur se déclare dans le fichier "Mise_En_Forme_Fichier_txt" en ligne 542.

Comment puis-je déclarer ma variable afin de pouvoir la récupérer dans le fichier 2, svp ?

Je vous remercie et vous souhaite une agréable journée,

Titof06
 

Pièces jointes

Solution
Bonjour le forum,

Même méthode qu'au post #6 mais en plus simple.

Dans le fichier Source.xlsm, dans un module standard :
VB:
Public desnum

Sub Préparation()
desnum = ActiveSheet.[D5]
ThisWorkbook.Names.Add "MaVal", desnum 'nom défini
'suite du code
End Sub
Dans le fichier Temporaire.xlsm, dans un module standard :
VB:
Public desnum

Sub Récupération()
desnum = Evaluate(Workbooks("Source.xlsm").Names("MaVal").RefersTo)
MsgBox desnum 'pour tester
'suite du code
End Sub
Les 2 fichiers doivent être ouverts.

Rien n'empêche d'avoir la même variable Public desnum dans chaque fichier.

A+
Bonjour à tous,
Dans l'ordre :
  • Vous devez renommer les projets des classeurs source et cible. exemple ProjectSource et ProjectCible. Dans Outils/Propriété de XXX/Nom du projet
  • Dans le ProjetCible ajouter la référence du projet source Outils/Références. Cocher ProjectSource ou autre nom définie.
  • Déclarer dans un module standards du projet source la variable à partager : Public variablePartagee As Long
  • Dans le projet cible vous pouvez accéder à la variable comme ceci : ProjectSource.Module1.variablePartagee = "Changement de texte"
  • Bien entendu vous ne devez pas déclarer la même variable dans le projet cible.
 
Bonjour Valtrase,

je vous remercie pour la réponse, mais je pense que ce n'est pas adapté à mon fichier.

Je m'explique.

J'utilise un fichier de base vierge, dans lequel j'intègre des données de fichiers "txt" et "xls ou xlsx".
Lorsque tout est chargé, je fais un traitement et je renomme ce fichier en "xslm" et le nom du fournisseur que je suis en train de traiter.
Dans ce traitement, je copie un onglet, que je mets en forme et avec lequel je dois le sauvegarder au format "txt", puis je le ferme sans même le sauvegarder.

En considérant votre solution, je ne sais pas comment rendre cela tout automatique, sans avoir à chercher et cocher cette déclaration.

J'ai testé manuellement, votre solution fonctionne parfaitement.

J'ai besoin de l'automatiser, et je ne sais pas faire cela.

Je vous remercie pour votre solution et vous souhaite une agréable fin de journée.

Titof06
 
Re,
Je ne comprends pas trop le :
J'ai besoin de l'automatiser, et je ne sais pas faire cela.
Vous créez un fichier de base avec la référence au fichier source, puis vous utilisez ce fichier pour faire votre mixture sans l'enregistrer.
  • Par contre j'ai regardé vos fichier, dur, dur...
  • 700 lignes dans un module c'est juste pas possible
  • A faire des .Select et .Activate votre classeur vas ressembler à un sapin de noël.
  • Certains passages identiques pourraient être des fonction avec arguments.
  • Nul besoin de déclarer mille variables si elles ne servent qu'une fois.
 
Bonjour Valtrase,

Oui, je suis débutant en VBA et essaye de faire au mieux.

J'ouvre un fichier "Source", j'importe les données dont j'ai besoin, je sauvegarde ce fichier sous un nouveau nom (exemple "Fournisseur GEBERIT_202509") afin de garder le fichier "Source" comme trame de départ pour un prochain traitement.

Par la suite, je dois extraire certaines données selon le type de mise à jour tarifaire que je dois faire.
Je peux sortir plus de 7 types de fichiers ".txt" différents.
C'est pour cela que je copie un onglet, où je fais un traitement dépendant de ma mise à jour que j'ai à faire.

Il est aussi vrai que j'ai beaucoup de lignes qui dépendent de tous mes cas.

Il est sans doute possible de raccourcir toutes ces lignes, mais je n'ai pas encore les compétences de savoir comment faire.
Vous me parlez de fonctions avec arguments, il va falloir que j'ai du temps pour étudier ce dont vous me parlez.

Je vous remercie encore pour le temps que vous m'accordez.

Je vous souhaite une agréable journée,

Titof06
 
Bonjour Titof06, Valtrase, le forum,

Je ne comprends pas pourquoi vous parlez de fichiers .txt.

Pour stocker une donnée on peut utiliser un nom défini (MaVal).

Le code dans ThisWorkbook de Fichier 1.xlsm :
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim v
v = ActiveSheet.[D5]
Me.Names.Add "MaVal", v 'nom défini
End Sub
Le code dans Fichier 2.xlsm :
VB:
Sub MaVal()
Dim fichier As Variant, v
fichier = Application.GetOpenFilename("Fichiers .xlsm (*.xlsm),*.xlsm")
If fichier = False Then Exit Sub
Application.ScreenUpdating = False
With Workbooks.Open(fichier)
    v = Evaluate(.Names("MaVal").RefersTo)
    .Close False
End With
MsgBox v
End Sub
A+
 

Pièces jointes

Bonjour job75, Valtrase, le forum,

Je vous remercie pour la réponse et vos fichiers fonctionnent parfaitement bien entre le fichier2 vers le fichier1.

Dans mon cas, j'ouvre mon fichier "Source" et je fais les traitements que j'ai à faire.
Je dois ouvrir un fichier "temporaire" qui va me servir à le sauvegarder au format ".txt", et me permettra de formater les colonnes selon mes besoins. Ces besoins sont définis par la valeur d'une cellule (un nombre de mes 7 fichiers possibles, ma variable s'appelle "desnum") qui se trouve dans mon fichier "Source" déjà ouvert.

C'est cette variable "desnum" que je souhaite garder dans les 2 fichiers ouverts, mon source et le temporaire.

J'espère que j'ai un peu mieux expliqué la situation.

Je vous remercie encore pour le temps que vous m'accordez.

Je vous souhaite une agréable journée,

Titof06
 
Pourquoi sauvegarder le fichier Source au format .txt ? Il n'y a pas de VBA ni de noms définis dans un fichier .txt
Bonjour job75,

Je garde mon fichier "Source" comme trame de départ.
En fait, dans mon fichier "Source", j'ai plusieurs onglets, dont un que je dois extraire au format ".txt".

C'est celui-là qui me pose le problème.

Lorsque je fais une copie d'un onglet, j'ai un classeur du type "Classeur1" qui s'ouvre avec les informations de cet onglet qui vient de mon fichier "Source".
Vu que je suis dans le "Classeur1", je fais une mise en forme des colonnes et je dois l'enregistrer au format ".txt" et ensuite je le ferme, pour revenir dans mon fichier "Source" du départ.
C'est là où je dois connaitre la valeur de ma variable "desnum" du fichier "Source" pour faire ma mise en forme.

Je vous remercie encore pour le temps que vous m'accordez.

Je vous souhaite une agréable journée,

Titof06
 
Alors pourquoi faire une mise en forme de "Classeur1", faites-la dans le fichier "Source".

De quelle mise en forme s'agit-il ?
 
Alors pourquoi faire une mise en forme de "Classeur1", faites-la dans le fichier "Source".

De quelle mise en forme s'agit-il ?
Bonjour job75,

Cela ne change rien si je le fais directement sur le fichier "Source", il faudra quand même que je copie l'onglet pour le sauvegarder au format ".txt".
De plus, lors d'un copier-coller les valeurs ou cells modifiées, Excel me perd quelquefois les formats des colonnes, par exemple, le Code Barre de 13 chiffres passe souvent au format scientifique "1Exxxxx".
C'est la raison pour laquelle je fais le traitement directement sur la copie afin de garder le dernier format des colonnes avant de l'enregistrer.

Je vous remercie encore pour le temps que vous m'accordez.

Je vous souhaite une agréable journée,

Titof06
 
Dernière édition:
Je déclare dans le fichier 1 une variable sous la forme :
Public desnum As Variant (la variable "desnum" étant un nombre de 1 à 99)

Il y a deux méthodes pour partager des variales globales entre classeurs
la première consiste a déclarer la variable dans le module ThisWorkbook du classeur ( Source)
et pour pourvoir y accéder depuis l'autre classeur
Code:
Msgbox Workbooks("Source.xlsm").denum

la seconde méthode c'est de créer des fonctions globales dans un module dans le classeur Source
Code:
Public denum As Variant
 
Public Function Getdenum()
  Getdenum = denum
End Function
Public Sub Setdenum(value)
  denum = value
End Sub

Et dans l'autre classeur pour lire et écrire:
Code:
Dim v
v = Application.Run("Source.xlsm!Getdenum") ' lire
MsgBox v
Application.Run "Source.xlsm!Setdenum", v + 1 ' écrire
 
Bonjour le forum,

Même méthode qu'au post #6 mais en plus simple.

Dans le fichier Source.xlsm, dans un module standard :
VB:
Public desnum

Sub Préparation()
desnum = ActiveSheet.[D5]
ThisWorkbook.Names.Add "MaVal", desnum 'nom défini
'suite du code
End Sub
Dans le fichier Temporaire.xlsm, dans un module standard :
VB:
Public desnum

Sub Récupération()
desnum = Evaluate(Workbooks("Source.xlsm").Names("MaVal").RefersTo)
MsgBox desnum 'pour tester
'suite du code
End Sub
Les 2 fichiers doivent être ouverts.

Rien n'empêche d'avoir la même variable Public desnum dans chaque fichier.

A+
 

Pièces jointes

Bonjour Rheeem,

Je vous remercie encore pour le temps que vous m'accordez et vais essayer votre méthode..

Je vous souhaite une agréable journée,

Titof06
 
Bonjour job75,

J'ai essayé votre méthode, et cela a l'air de fonctionner.

Je vous remercie encore pour le temps que vous m'accordez.

Je vous souhaite une agréable journée,

Titof06
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…