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 :

Utiliser des variables globale pour modules et form [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 33
    Par défaut Utiliser des variables globale pour modules et form
    Bonjour,

    J'ai declare en debut de module des variables globales pour y affecter les noms de mes feuilles (et ainsi eviter de les chercher partout dans mon code si je souhaite les renommer) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Stock As String
    Public Commande As String
     
    Stock = "StockVelos"
    Commande= "Commande2017"

    J'ai ensuite declare mes fonctions Sub () qui viennent chercher des informations dans mes feuilles stock et commande. Cependant j'ai un message d'erreur : erreur de compilation, non valide a l'exterieur de la routine.

    1) Où et quand affecter des valeurs a mes variables pour quelle puissent etre utilisees par toutes mes fonctions ?
    2) Meme question pour que mes variables globales soient utilisees par mon userform


    Mon code fonctionnait avant que je change le nom de mes feuilles par des variables globales



    Merci par avance pour votre aide

    Rima

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai declare en debut de module des variables globales pour y affecter les noms de mes feuilles (et ainsi eviter de les chercher partout dans mon code si je souhaite les renommer) :
    Pour éviter de déclarer des variables publiques et surtout pour ne pas avoir de soucis si l'utilisateur modifie le nom des feuilles, je te conseille d'utiliser la propriété CodeName de la feuille
    Pour en savoir plus à lire VBA – CodeName d’une feuille Excel

    'ai ensuite declare mes fonctions Sub () qui viennent chercher des informations dans mes feuilles stock et commande. Cependant j'ai un message d'erreur : erreur de compilation, non valide a l'exterieur de la routine.
    Alors pour obtenir une réponse rapide et pertinente, évite de nous donner des informations au compte-gouttes.
    Tu nous affiches la manière dont tu déclares tes variables publiques mais par contre aucune des lignes de codes qui te renvoient une erreur. Crois-tu que nous ayons une boule de cristal ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 33
    Par défaut
    Bonjour,

    J'ai avance sur mon code, j'ai maintenant plusieurs feuilles. Tout se passe dans le meme module. Cependant, avec ce code je dois executer la macro MaJ_TCD() avant la macro MAJ_Commandes() si je veux que la macro MAJ_Commandes() trouve bien mes feuilles.
    Comment faire pour que quelque soit le module ou le userform et quelque soit l'ordre d'execution de mes macros, elles aillent chercher dans la bonne feuille de mon classeur ?




    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Public Listeaservir As String
    Public ListeFRM6 As String
    Public ListeFRM1 As String
    Public ListeMCJ As String
    Public Stock As String
    Public Ordini As String
    Public OrdiniTP As String
    Public BisogniInterniTP As String
    Public BisogniInterni As String
     
     
    ------
     
    Sub MaJ_TCD()
    'Mise a jour des TCD
     
    Listeaservir = "Liste a servir"
    ListeFRM6 = "Liste PJF SAV"
    ListeFRM1 = "Liste PJF"
    ListeMCJ = "Liste MCJ"
    Stock = "Stock"
    Ordini = "Ordini"
    OrdiniTP = "OrdiniTP"
    BisogniInterniTP = "BisogniInterniTP"
    BisogniInterni = "BisogniInterni"
     
     
     
        Sheets(BisogniInterniTP).Select
        ActiveSheet.PivotTables("Tabella_pivot1").PivotCache.Refresh
        Sheets(OrdiniTP).Select
        ActiveSheet.PivotTables("Tabella_pivot1").PivotCache.Refresh
        Sheets(Listeaservir).Select
     
    End Sub
     
    -----
     
    Sub MAJ_Commandes()
    '
    ' MAJ_Commandes Macro
    '
    '
        Range("A5:E5").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.ClearContents
        Sheets(OrdiniTP).Select
        Range("A5:E5").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
        Sheets(Listeaservir).Select
        Range("A5").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
        Range("A1").Select
    End Sub

    merci
    Rima

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    S'il s'agit de stocker des noms de feuilles connus dans des variables publiques, personnellement, j'utiliserait des constantes...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const NOMFEUILLE As String = "Feuil_4418725"
    Et dans le code, depuis n'importe quel module, on utilisera systématiquement la constante pour nommer la feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets(NOMFEUILLE)
     
    End With
    A noter : j'utilise des majuscules pour les constantes afin de les différencier des fonctions et autres variables.

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 33
    Par défaut
    J'ai trouve une solution alternative !

    J'ai créé une sub init_var où j'associe mes variables a des valeurs et ensuite dans chaque Sub () j'appelle ma Sub init_var pour initialiser mes variables :

    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
    Public Listeaservir As String
    Public Stock As String
    Public Ordini As String
    Public OrdiniTP As String
    Public BisogniInterniTP As String
    Public BisogniInterni As String
     
    --------
     
    Sub init_var()
     
    Listeaservir = "Liste a servir"
    Stock = "Stock"
    Ordini = "Ordini"
    OrdiniTP = "OrdiniTP"
    BisogniInterniTP = "BisogniInterniTP"
    BisogniInterni = "BisogniInterni"
     
    End Sub
     
    ------------------
     
    Sub MaJ_TCD()
     
    Call init_var
     
        Sheets(BisogniInterniTP).Select
        ActiveSheet.PivotTables("Tabella_pivot1").PivotCache.Refresh
        Sheets(OrdiniTP).Select
        ActiveSheet.PivotTables("Tabella_pivot1").PivotCache.Refresh
        Sheets(Listeaservir).Select
     
    End Sub
    Et ca marche aussi bien pour les modules que les form !

    Merci en tout cas pour votre temps !

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

Discussions similaires

  1. Utilisation des variables globales
    Par B_E_L dans le forum MATLAB
    Réponses: 0
    Dernier message: 22/10/2010, 17h26
  2. Utiliser Des Variables Globales
    Par jojo69000 dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 15/05/2008, 10h10
  3. Utiliser des variables statiques pour des paramètres
    Par el_slapper dans le forum VB.NET
    Réponses: 4
    Dernier message: 11/03/2008, 08h55
  4. Utiliser des variables globales
    Par jujudrogba dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 10/02/2007, 11h02
  5. utilisation des variables global dans tout le projet
    Par EYENGA Joël dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/01/2006, 10h55

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