Variable public

dONut

XLDnaute Nouveau
Bonjour tout le monde,

je viens vers vous car je rencontre un problème pour définir des variables au lancement d'Excel, pour ensuite les utiliser dans mes différents modules.

Je souhaiterais avoir une variable col_application contenant la colonne (en lettre) du début du tableau d'une application (app1 par exemple) que je suis dans mon document. Je voudrais que cette variable soit instanciée dès l'ouverture du document Excel (via Workbook_open() donc), et qu'elle ne bouge plus.

J'ai essayé de déclarer une variable en Public dans mon module principale, et de l'instanciée à l'ouverture du document. Cela fonctionne, mais étrangement cette variable se vide avec le temps, alors que je n'effectue aucune modification dessus.
Je souhaitais passer par une constante, mais la valeur que je veux mémoriser provient d'une fonction, donc à ma connaissance on ne peut pas affecter le resultat d'une fonction à une constante.

Je bloque donc sur ce problème, qui je pense n'est pas compliqué. Il y a juste une petite astuces qui m'échappe, soit dans la déclaration (au mauvais endroit), soit dans l'instanciation (au mauvais moment).

Merci pour votre aide.

Cdlt
 

camarchepas

XLDnaute Barbatruc
Re : Variable public

Bonjour,
Il faut que ta variable public soit déclarée dans un module standart pas dans lle thisworkbook bien sur.

Et tant que tu ne réïnitialises pas les variables , elle ne doit pas bouger.
attention à ne pas la redéclarer dans un autre module car tout en portant le même nom, ce ne sera pas la même variable. Mais l'on parle un peu dans le vide , un extrait de ton fichier avec un zoom sur ton anomalie nous aurait aidé à bien mieux cerner ton problème
 

tototiti2008

XLDnaute Barbatruc
Re : Variable public

Bonjour à tous,

As-tu essayé en utilisant les registres ?

Function SaveSetting et GetSetting

Très facile à utiliser

Ah non, ça écrit dans la base de registre, que Microsoft a déjà tendance à utiliser comme la poubelle centrale du système.... moi je déconseille.

Si tu as bien déclaré ta variable publique avec un Public en haut d'un module, il se peut tout de même qu'elle perde sa valeur, notament si tu passe en débogage dans une macro

Le plus simple est peut être d'écrire ta valeur dans une cellule à l'ouverture de ton fichier et de relire la valeur de la cellule quand tu veux l'utiliser
 
C

Compte Supprimé 979

Guest
Re : Variable public

Bonjour le fil,

Plutôt que d'utiliser la base de registre, qui comme le dis si bien TotoTiti2008 est déjà une poubelle,
pourquoi ne pas utiliser un fichier ".INI"

Code:
' Fonctions API pour lire et écrire dans les fichier INI
Public Declare Function GetPrivateProfileString Lib "kernel32" _
        Alias "GetPrivateProfileStringA" _
        (ByVal lpApplicationName As String, _
        ByVal lpKeyName As Any, _
        ByVal lpDefault As String, _
        ByVal lpReturnedString As String, _
        ByVal nSize As Long, _
        ByVal lpFileName As String) As Long
Public Declare Function WritePrivateProfileString Lib "kernel32" _
        Alias "WritePrivateProfileStringA" _
        (ByVal lpApplicationName As String, _
        ByVal lpKeyName As Any, _
        ByVal lpString As Any, _
        ByVal lpFileName As String) As Long
Public Function EcrireIni(stSection As String, stKey As String, stValeur As String)
' Ecriture d'une valeur dans un fichier INI
' stSection est le la partie designée entre crochets ([option] par exemple)
' stKey est le nom de la clé à récupérer (COULEUR=... par exemple)
' stValeur est la valeur à stocker
Dim FicIni As String, lgRep As Long
FicIni = Application.CurrentProject.Path & "\MonFic.ini"
' Inscription des valeurs
lgRep = WritePrivateProfileString(stSection, stKey, stValeur, FicIni)
End Function
Public Function LireIni(stSection As String, stKey As String)
' Lecture d'une valeur dans un fichier INI
' stSection est le la partie designée entre crochets ([option] par exemple)
' stKey est le nom de la clé à récupérer (COULEUR=... par exemple)
Dim stBuf As String, FicIni As String, lgBuf As Long, lgRep As Long
FicIni = Application.CurrentProject.Path & "\MonFic.ini"
' Mise en place du buffer de lecture
stBuf = Space$(255)
lgBuf = 255
lgRep = GetPrivateProfileString(stSection, stKey, "", stBuf, lgBuf, FicIni)
If lgRep <= 0 Then
    ' Erreur au niveau du fichier INI
    LireIni = ""
    Exit Function
End If
LireIni = Trim$(Left$(stBuf, lgRep))
End Function

Composition du fichier ini
Code:
[NomSection]
NomClé=ValeurClé

Appel des fonctions
Code:
MonRep = ThisWorkbook.Path & "\"
EcrireIni "REPERTOIRES", "Base", MonRep
Code:
MonRep = LireIni("REPERTOIRES", "Base")

A+
 
Dernière modification par un modérateur:

ROGER2327

XLDnaute Barbatruc
Re : Variable public

Bonsoir à tous
Une possibilité un peu rustique et pas très-élégante, mais assez sûre : ajouter une feuille de "service" au classeur dans laquelle on met les constantes utiles. Cette feuille peut-être masquée pour éviter des interventions inopportunes...​
ROGER2327
#3737


Samedi 7 Gidouille 137 (Saint Bébé Toutout, évangéliste, SQ)
3 Messidor An CCXVIII
2010-W25-1T21:59:01Z
 

dONut

XLDnaute Nouveau
Re : Variable public

Bonjour et merci à tous pour vos réponses.

Je viens de remarquer que mes variables publiques sont réinitialisées lorsque je quitte mon userform. Le problème viendrait donc de là.

Vos solutions me semblent bien compliquées juste pour affecter une valeur à une variable et la conserver tant que le document est ouvert.

Et-il possible d'exécuter une procédure lorsque l'on quitte un userform ?
Pour l'instant je réinitialise mes variables à chaque lancement du userform, ce qui n'est pas terrible en soit, mais je désire tout de même garder ces variables après sa fermeture.

Cdlt
 

pierrejean

XLDnaute Barbatruc
Re : Variable public

bonjour a tous

Je rejoins camarche pas #2
Si la variable est declarée publique dans un module standard et initialisée par le Workbook_open il n'y a aucune raison pour qu'elle soit modifiée tant que le fichier est ouvert
Seul un fichier exemple pourra permettre de savoir ce qu'il se passe
 
C

Compte Supprimé 979

Guest
Re : Variable public

Bonjour à tous,
Maitre PierreJean ;)

En général ce genre de problème vient du fait que l'on déclare une variable publique en même temps en local

Code:
Public MaVar As String
Est ré-initialisée si on la déclare également en local dans une procédure
Code:
Dim MaVar As String
A+
 
Dernière modification par un modérateur:

dONut

XLDnaute Nouveau
Re : Variable public

Bonjour et merci pour vos réponses.

Je suis d'accord avec pierrejean, mes variables sont déclarées en Public dans un module, et instanciées à l'ouverture du document. Elles ne devraient donc pas bouger.

Etrangement, mes variables étaient "vidées" lorsque je quittais mon userForm. En utilisant Unload Me pour le fermer, mon problème a été résolu.

Merci encore de votre aide.

Cdlt
 

MJ13

XLDnaute Barbatruc
Re : Variable public

Bonjour à tous

Sinon, on peut aussi définir des noms et la cela ne bouge pas (comme ceux que l'on voit avec \insertion \Nom \Définir ou Ctrl+F3).

En plus, tout le monde peut facilement le comprendre ;).
 

Discussions similaires

Réponses
3
Affichages
178

Statistiques des forums

Discussions
312 609
Messages
2 090 200
Membres
104 451
dernier inscrit
scp9990