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 :

Variable Publique: problème de fonctionnement [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Variable Publique: problème de fonctionnement
    Bonjour,
    Après un certain temps a tester plusieurs solutions, et surtout a regarder dans le forum une solution, je m'avoue vaincu et je poste cette requete.

    J'utilise2 userform.
    Dans le premier - Userform0 - je définis la variable graph de type string
    J'ai besoin, dans un second userform - Userform1 - de récupérer la valeur de cette variable.
    (cette variable renferme le type de graphique que je souhaite réaliser : xlLine xLRadar xlXYScatter ...)

    Or, quand je lance le Userform1, (en pas a pas), et que je regarde ce que vaut la variable graph, elle est vide.

    J'ai mis au début du Userform0 : Public graph
    et je l'ai définis dans mon code : dim graph as string

    puis j'ai remis en haut du Userform1 : public graph

    dans mon code du userform1, lorsque je fais appel a la variable, il ne comprends pas.
    le code est le suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With ActiveSheet
        Charts.Add.Location Where:=xlLocationAsObject, Name:=.Name
        ActiveChart.SetSourceData Source:=.range(.Cells(lig, col), .Cells(lig2, col2)), PlotBy:=xlColumns
     
    If graph = "xlColumnStacked" Or graph = "xlColumnStacked100" Or graph = "xlBuiltIn" Then
       ActiveChart.ApplyCustomType charttype:=graph, TypeName:="Courbes - Histogramme"
    Else: ActiveChart.charttype = graph
    End If
    End With
    j'ai testé en mettant public graph as string en haut du userform0, de ne pas déclarer dans le code du userform0, de redéclarer dans le userform1, mais sans succès ...


    Je suis sûr que c'est tout con en plus, mais j'avoue que je sèche en ce moment...


    Merci

    Yord

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Quand tu déclare une variable publique il faut lui donner un type c'est mieux et ensuite tu ne peux plus la déclarer par la suite.

    Ensuite si tya variable n'est utilisé que par ton userform tu peux la déclarer tout en haut comme private ainsi seule les procédure dans le module de l'userform pourront l'utiliser. (et tu risque moine de la modifier par erreure dans un autre morceau du code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private graph as string
    Essaye de mettre dans ton code avant le teste sur graph
    voir si elle a bien une valeur

    Et enfin le plus important je ne sais pas si tu as remarqué mais quand les gens donne un code y a une jolie mise en forme avec des couleur et tout qui le rendre lisible, as chez toi. Parce qu'il faut utiliser les balise code
    Regarde ici pour savoir comment

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci pour le truc pour le code (en postant le message, je me suis dit que ca allait le faire tout seul, mais non ....).

    Donc, je l'ai déclarée en haut de mon userform0 :

    Dans ce userform0, je lui affecte une valeur sous condition.
    quelque chose comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If ListBox1.Selected(0) = True Then
        graph = xlLine
    ElseIf ListBox1.Selected(1) = True Then
        graph = xlColumnClustered
    end if

    dans un deuxieme userform, j'appelle la variable graph, avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With ActiveSheet
        Charts.Add.Location Where:=xlLocationAsObject, Name:=.Name
        ActiveChart.SetSourceData Source:=.range(.Cells(lig, col), .Cells(lig2, col2)), PlotBy:=xlColumns
     
    If graph = "xlColumnStacked" Or graph = "xlColumnStacked100" Or graph = "xlBuiltIn" Then
       ActiveChart.ApplyCustomType charttype:=graph, TypeName:="Courbes - Histogramme"
    Else: ActiveChart.charttype = graph
    End If
    End With

    seulement, si je fais comme tu as dit, en controlant avant avec une msgbox la valeur, il me donne une valeur vide ...

  4. #4
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Ta variable public doit être déclaré dans un module standard. Tu doit donc mettre Public graph as string dans le module1 (ou n'importe quel autre) Tu en peux le mettre ni dans le code d'un onglet ni dans celui d'un userform
    Si je me souvient bien c'est ca en tout cas chez moi ca a l'air de bien fonctionner (comme ca je en prend pas de risque)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Alors, j'ai fait ce que tu m'as dit, déclarer dans un module, mais cela ne fonctionne pas.

    Je l'ai redéclarée dans le userform0 (la ou j'affecte la valeur a la variable graph), et apres, dans le userform1, j'ai reussi a solutionner le probleme en mettant non pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.charttype = graph
    mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.charttype = userform0.graph
    Cela fonctionne comme ca, mais est-ce que c'est bien correct ?
    Je n'aimerais pas que le programme plante si jamais je change de fichier Excel, ou si j'utilise un autre userform, ou que sais-je encore ...

  6. #6
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Tu ne doit déclarer la variable graph QUE dans un module standard et ensuite tout roulera comme sur des roulette. (on ne déclare pas plusieurs fois la même variable)
    Je pense que userform0.graph indique daller chercher la variable spécifique au userform0 j'ignore ce que ca vaut mais c'est moins pratique qu'un seule déclaration bien propre dans un module standard

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    J'avais fait bien fait comme cela, j'ai juste mis dans Module 1

    mais j'ai l'erreur : Incompatibilité de Type

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Autant pour moi, j'en avais laissé un trainer quelque part...

    Cela fonctionne parfaitement maintenant.
    Merci infiniment !


    Yoord

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

Discussions similaires

  1. problème de variable publique
    Par guy_antoine_mav dans le forum Débuter
    Réponses: 7
    Dernier message: 30/11/2009, 13h17
  2. Problème d'affectation d'une variable publique
    Par boufano dans le forum Langage
    Réponses: 7
    Dernier message: 28/01/2008, 19h12
  3. problème variable publique sur userform
    Par swissmade dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/08/2007, 06h36
  4. Réponses: 11
    Dernier message: 11/05/2006, 10h09
  5. variables publiques ou module de classe ?
    Par niclalex dans le forum Access
    Réponses: 3
    Dernier message: 04/10/2005, 18h49

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