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 :

trop de Variables globales donc enums ou autre


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 36
    Par défaut trop de Variables globales donc enums ou autre
    Bonjour,

    je suis en train de créer un fichier qui gère des commandes.
    chaque commande est sur un onglet et on peut générer un onglet bilan pour récapituler toutes ces commandes (et plein d'autres trucs ... je rentre pas dans les détails)

    mon classeur fonctionne mais je voudrais rendre mon code plus propre afin de pouvoir, par exemple, modifier la position d'un champ en ne modifiant qu'une variable et non partout dans le code ... genre, faire des variables globales ...

    seulement, j'ai beaucoup de champ à mémoriser ...

    par exemple, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    champ_bilan_total_commandes = Worksheets("BILAN").Range("B4")
    champ_bilan_date = Worksheets("BILAN").Range("B3")
    ...
    J'ai pensé une énumération, mais ça ne prend pas les Range (erreur compilation)

    et je trouve bizarre de faire des getChamp... ou des setChamp... pour tout ...

    vous auriez une idée ou une piste que je pourrai suivre ???

    Merci par avance...

    ...Milie...

  2. #2
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonjour à tous
    Bonjour mimi

    Je ne sais pas si j'ai bien compris, mais une idée :

    Faire référence à une cellule nommée dans une feuille, dans laquelle il serait saisie "BILAN" par exemple, mais si j'ai bien compris....

    Eric

  3. #3
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 36
    Par défaut
    merci edelweisseric

    mon classeur contient avant toute modification un onglet avec la commande du client principal, et à partir de celui-ci je peut créer un bilan ou d'autres commandes annexes. la mise en page de ces annexes se base sur des champs de la commande principale (champ nom client principal, champs en-tête de commande, ...) et le bilan va chercher des infos dans chaque commande (principale ou annexe).

    si je référence tout, mon problème sera le même, il faudrait savoir quelle cellule contient la référence qui m'intéresse ...

  4. #4
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    si tu veux enumerer les cellules dans une plage tu dois faire comme ceci

    a peu de chose pres!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dim C as range
    dim Plage as range
     
    set plage=range("B3:C10")
    for each c in plage
        debug.print c.address
    next c

  5. #5
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 36
    Par défaut
    en fait je voudrais pouvoir faire toutes mes fonctions de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    'pour toutes les feuilles de nbFeuilles I_NB_FEUIL_FIXES, on ajoute le total au total de toutes les commandes
            Do Until i = NB_FEUIL_FIXES
                If Worksheets(i).Name <> "Cadeaux" Then
                    CHAMP_TOTAL_ATELIER.Value = CHAMP_TOTAL_ATELIER.Value _
                        + Worksheets(i).Range(CHAMP_TOTAL_CMDE).Value
                End If
                i = i - 1
            Loop
    mais comment definir CHAMP_TOTAL_ATELIER ??? c'est de type range mais je vois pas trop comment faire...

  6. #6
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    de cette façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DIM CHAMP_TOTAL_ATELIER as range
    ...
    SET CHAMP_TOTAL_ATELIER = RANGE("A1")
    ...

  7. #7
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 36
    Par défaut
    je dois faire une fonction initialisation ou je peux le faire dans la partie (Déclaration) ??? parce que j'aurai besoin que ce soit visible par tous mes modules ...

  8. #8
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    alors tu as deux manières

    1. soit tu défini la variable comme étant publique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public maVariable as range
    dans la partie déclaration

    2. soit tu passe la variable en parametres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub code1(mavariable as range)
    ...
    end sub
    et tu passe la variable comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sub code2
    ...
    code1 range("A1)
    ...
    end sub
    ou encore comme ça evidemment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sub code3
    ...
    set mavariable=range("a1")
     
    ...
    code1 mavariable
    ...
    end sub

  9. #9
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 36
    Par défaut
    donc si je fais :
    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
    Public maVariable1 as range
    Public maVariable2 as range
    ...
     
    sub init
    ...
    set maVariable1=range("a1")
    set maVariable2=range("b4")
    ...
     
    ...
    end sub
     
    sub autreFonction
    ...
    uneCellule.Value = maVariable1.value
    maVariable2.Value = "test"
    ...
     
    ...
    end sub
    ça fonctionnera ? même si autre fonction est dans un module différent ?

  10. #10
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    oui, tout a fait

  11. #11
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 36
    Par défaut
    Merci beaucoup
    j'ai essayé, cette solution fonctionne mais pas d'un module à l'autre ...
    les variables publiques d'un modules ne sont pas lisibles dans un autre ...

    un solution est de tout mettre dans un et un seul module, mais bon, si quelqu'un voit un autre façon ...

  12. #12
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    j'ai essayé, cette solution fonctionne mais pas d'un module à l'autre ...
    les variables publiques d'un modules ne sont pas lisibles dans un autre ...
    tu m'en vois surpris

  13. #13
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par mimi31110 Voir le message
    les variables publiques d'un modules ne sont pas lisibles dans un autre ...
    Désolé mais ton affirmation est fausse, une variable Public est lisible dans l'entièreté du classeur, d'un module à l'autre, d'un module vers un userform, d'un module vers une feuille, etc...

  14. #14
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonsoir


    et je trouve bizarre de faire des getChamp... ou des setChamp... pour tout ...
    tu travailles dans des modules de classe ou dans des modules standards ?


    bonne soirée
    michel

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/05/2009, 16h22
  2. [PHP 5.0] appel d'une variable global dans un autre fichier à partir d'une classe
    Par andry.aime dans le forum Langage
    Réponses: 1
    Dernier message: 13/01/2009, 09h31
  3. Variable globale d'une feuille à l'autre
    Par gazavous dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 09/10/2008, 13h24
  4. passer des variables globales d'un form a un autre
    Par Zenerox dans le forum Général VBA
    Réponses: 2
    Dernier message: 07/02/2008, 12h34
  5. Réponses: 4
    Dernier message: 14/05/2007, 13h44

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