IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Accès aux variables globales [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 46
    Points
    46
    Par défaut Accès aux variables globales
    Bonjour a tous,

    j'aimerai savoir si c'est possible d'accéder à des variables globales du fichier Excel lui même.

    Je m'explique, je voudrai pouvoir sauvegarder des informations dans des variables et que celles-ci soient conservées même lorsque l'on ferme le fichier.
    Et par conséquent, ces variables seront accessibles à sa réouverture.

    merci d'avance,

    cordialement

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 84
    Points : 90
    Points
    90
    Par défaut
    Pourquoi ne pas créer une feuille (que tu pourrais rendre invisible, éventuellement la protéger) et mémoriser tes variables dans les cellules de cette feuille ? A l'ouverture tu commence par lire ces cellules et mettre leur contenu dans tes variables.

    Cela repond à ton pb ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 84
    Points : 90
    Points
    90
    Par défaut
    Ou alors si tu tiens absolument à avoir des variables initialisées différemment, tu pourrais aussi utiliser la bibliothèque VBComponent (voir ça). Comment faire:
    1. On crée un module spécial pour mémoriser les variables (c'est mieux).
    2. On met dans ce module le code:3. A la sortie d'Excel, dans une macro, on recupère le texte de la macro du module avec VBComponent, on le remplace avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const toto = autre_valeur
    J'ai jamais fait ça, mais ça devrait marcher. Si tu le fait tu me donne des nouvelles...

  4. #4
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    merci pour ces informations

    Pour ta première solution (enregistrer dans une feuille cachée) c'est ce que je fais actuellement, et ca marche relativement bien mais je recherché une solution non visible par l'utilisateur.

    Pour ta deuxième solution, je vais regarder cela de plus près cette après midi, mais développant un addin VSTO je ne suis pas sur que je puisse programmer la macro. Je te tiens au courant sur ce point.

    Mais n'existe t'il pas dans Excel un module auquel je pourrait accéder tel que celui pour les connexions externe mais pour des variables?

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Points : 1 116
    Points
    1 116
    Par défaut
    Bonjour,

    Si tu reste sur le m^me poste, tu pourrais utiliser la base de registre

    enregistrement de la variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'écriture dans HKey_current_user/software / VB and VBA Program settings
      SaveSetting appname:="dvp", section:="truc", key:="nombre", setting:=Lavariable
    A l’ouverture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ' Lit la valeur dans la base de registre
           Lavariable = GetSetting(appname:="dvp", section:="truc", key:="Nombre")

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 84
    Points : 90
    Points
    90
    Par défaut
    Comme je disais, tu peux rendre ta feuille invisible avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maFeuilleParametres.Visible = xlSheetVeryHidden   'non pas xlSheetHidden
    et avec ça on pourra pas la rendre visible sans les macro.

  7. #7
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    pour la propriété visible de la feuille je connaissais mais merci

    et pour ce qui est du déploiement, mon addin sera distribuer a qui veux l'utiliser donc il il ne sera pas toujours utiliser sur le même poste.

    Par contre je viens de tomber sur quelque chose qui a l'air de parfaitement convenir a savoir les "CustomProperties" qui sont des propriétées applicables pour chaque feuille.
    En savez vous plus a ce sujet ?

    Alors après un test rapide les customproperties ont l'air nikel comme solution.

    en effet, cet élément permet d'ajouter des paramètres avec un nom et une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CustomProperties.Add("NAME", "VALUE");
    elles s'enregistrent avec le document et la réouverture de celui ci, il suffit de les relire avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CustomProperties.Item[1].Name 
    CustomProperties.Item[1].Value

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 919
    Points
    55 919
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je ne vois pas trop où résiderait le problème de stocker les informations dans une feuille très cachée (verryhidden) puisque tu ne pourras accéder à cette feuille que par macro.

    L'utilisation des customproperties d'une feuille se faisant par macro, si ta peur réside dans le fait que l'on puisse accéder au code, les placer dans des customproperties de résoudra pas grand chose.

    Tu peux cependant utiliser la procédure et la fonction suivantes pour écrire / lire une customproperty

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Sub SetCustomProperty(Feuille As Worksheet, nom As String, Valeur As Variant)
      ' Ecrit la valeur dans la propriété
     
      Dim oProperty As CustomProperty
      Dim blnProprieteExiste As Boolean
     
      For Each oProperty In Feuille.CustomProperties
        If oProperty.Name = nom Then
          blnProprieteExiste = True
          Exit For
        End If
      Next
      If blnProprieteExiste Then
        oProperty.Value = Valeur
        Else
        Feuille.CustomProperties.Add nom, Valeur
      End If
     
    End Sub
     
    Function GetCustomProperty(Feuille As Worksheet, nom As String) As Variant
      ' Lit la valeur de la customproperty passée en paramètres
      Dim oProperty As CustomProperty
     
      For Each oProperty In Feuille.CustomProperties
        If oProperty.Name = nom Then
          GetCustomProperty = oProperty.Value
          Exit For
        End If
      Next
    End Function
     
    Sub UtiliserCustomProperty()
      ' Test d'utilisation de customproperty
      SetCustomProperty Feuil1, "Nom", "Martine"
      Debug.Print GetCustomProperty(Feuil1, "Nom")
    End Sub

  9. #9
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    C'est tout a fait juste,
    seulement, comme je le dis plus haut, je développe un composant VSTO et je souhaite donc que tous le code concernant la gestion de celui ci soit compilé directement.

    De plus j'ai déjà mis en place la solution proposée par vpovpo avec la feuille verryhidden. Cependant les données inscrites dedans peuvent variées d'une feuille a l'autre. Cela entraine donc du code supplémentaire afin d'organiser cette page.

    C'est pourquoi, dans ma situation, les customproperties correspondent mieux à mon besoin.

    ghosty

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Astuce pour accès aux variables globales depuis une fonction
    Par manur0 dans le forum Général Python
    Réponses: 0
    Dernier message: 03/09/2009, 14h30
  2. Acces aux variables d'une DLL
    Par abignon dans le forum MFC
    Réponses: 1
    Dernier message: 08/09/2005, 14h29
  3. [C#] Accès aux variables Session
    Par kalan dans le forum ASP.NET
    Réponses: 9
    Dernier message: 31/08/2005, 16h40
  4. [FLASH MX2004] [AS2] Accès aux variables d'une classe
    Par stailer dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 17/07/2005, 12h58
  5. [Language]Accès aux variables
    Par Adaemon dans le forum Langage
    Réponses: 12
    Dernier message: 27/04/2005, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo