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 :

Peut-on déclarer un objet pour qu'il soit utilisable dans plusieurs modules? [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Régie
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Régie
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Peut-on déclarer un objet pour qu'il soit utilisable dans plusieurs modules?
    Bonjour,

    Je viens de finir un nouveau programme, que j'ai fait de manière empirique avec beaucoup de variable qui était déclarée plusieurs fois. Pour mettre de l'ordre dans tous ça, j'ai voulu regrouper toutes les variables dans un seul module.
    Dans ces variables, il y a des objets (Workbook et Worksheet). J’aimerai que la référence que je leur attribue soit utilisable par tous les modules de mon projet, sans avoir à remettre le "SET" dans toutes les "SUB". Est-e que c'est possible?

    Voici ma déclaration de variable:

    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
    58
    Option Explicit
     
    'Nomenclature
     
    Public WbNomenclature As Workbook
    Public WsNomenclature As Worksheet
    Public LigneN As Integer
    Public ColonneN As Integer
    Public Serie As Range
    Public NumSerie As String
    Public DateSerie As Date
    Public HeureSerie As String
    Public LieuSerie As String
    Public DistributionSerie As String
    Public ProgrammeSerie As String
    Public CaptationSerie As String
    Public ChefSerie As String
    Public LFSerie As String
    Public AARTSerie As String
    Public ODGSerie As String
    Public SuppSerie As String
    Public MRFnb As Integer
    Public LFnb As Integer
    Public AARTnb As Integer
    Public ODGnb As Integer
     
    Public WsNomenclatureTDB As Worksheet
    Public LigneNTDB As Integer
    Public ColonneNTDB As Integer
    Public C As Integer
     
    'TDB
     
    Public WbTDB As Workbook
    Public WsTDB As Worksheet
    Public LigneTDB As Integer
    Public ColonneTDB As Integer
     
    'Series
    Public WbSerie As Workbook
    Public WsSerie As Worksheet
    Public LigneSerie As Integer
    Public ColonneSerie As Integer
    Public L As Integer
     
     
    'Valeurs constantes
     
    Sub Constante()
     
    Set WbNomenclature = Application.Workbooks("1718_Nomenclature.xlsm")
    Set WsNomenclature = WbNomenclature.Worksheets("NomenclatureGNALE")
    Set WsNomenclatureTDB = WbNomenclature.Worksheets("NomenclatureTDB")
    Set WsTDB = WbTDB.Worksheets("TableauDeBord")
    Set WbTDB = Application.Workbooks("1718_TDB.xlsm")
    Set WbSerie = Application.Workbooks("1718_MA_Serie.xlsm")
     
    End Sub

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 098
    Points : 9 897
    Points
    9 897
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    en l'état, tes variables sont publiques, et donc utilisables dans l'ensemble de ton projet (= dans tous tes modules)

    il te suffit simplement qu'elles soient instanciées ... chose que fais ta procédure Constante


    je simplifie pour te monter :

    la déclaration publique et la procédure d'initialisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public MonClasseur As Workbook
    Public MaFeuille As Worksheet
     
     
    Sub Constantes()
    Set MonClasseur = ThisWorkbook
    Set MaFeuille = MonClasseur.Worksheets(1)
    End Sub

    Une procédure qui va lier la création des variables et l'appel d'une autre procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Demo()
    Constantes  ' faut bien initialiser une fois les variables !
    Utilisation ' ici on va aller dans une autre procédure pour utiliser les variables
    End Sub
    Et la procédure "Utilisation" qui ne fait qu'utiliser les variables publiques sans les instancier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Utilisation()
        MsgBox MonClasseur.Name
        MsgBox MaFeuille.Name
    End Sub

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Régie
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Régie
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Merci, c'est une bonne solution.
    Existe-il un moyen de ne le déclarer qu'un fois pour un module au lieu de lancer "Constante" à chaque sub?

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 098
    Points : 9 897
    Points
    9 897
    Billets dans le blog
    5
    Par défaut
    Constantes, une fois lancée, te permettra de conserver tes variables (objet ou non) avec le "contenu" jusqu'à :

    1) fermeture de l'application
    2) arrêt sauvage des procédure (instruction "End")
    3) plantage de procédure sur laquelle tu feras un arrêt complet

    dans ce type de dispositif, et sans dire que c'est la meilleur solution, voici ce que je fais :

    1) j'introduis une variable Booléenne Publique ("VariablesPretes" par exemple)
    2) cette variable est passée à True dans la procédure Constantes
    3) dans chaque procédure où je suis amené à utiliser mes variables publiques, je commence la procédure par un test sur la variable VariablesPretes
    - Si la variable est à True : RAS
    - Si elle est à False : je lance la procédure Constantes

    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
    Public MonClasseur As Workbook
    Public MaFeuille As Worksheet
    Public VariablesPretes As Boolean
     
     
    Sub Constantes()
    Set MonClasseur = ThisWorkbook
    Set MaFeuille = MonClasseur.Worksheets(1)
    VariablesPretes = True
    End Sub
     
    Sub UneProcédure()
    If Not VariablesPretes Then Constantes
    ' et ensuite ta procédure de traitement
    End Sub

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Régie
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Régie
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Merci pour ton aide

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

Discussions similaires

  1. Peut on raisonner en objets pour trouver les relations entre classes?
    Par wafiwafi dans le forum Diagrammes de Classes
    Réponses: 42
    Dernier message: 05/01/2011, 12h32
  2. Réponses: 11
    Dernier message: 05/04/2010, 22h10
  3. Réponses: 8
    Dernier message: 11/05/2007, 10h10
  4. Réponses: 8
    Dernier message: 09/01/2007, 16h30
  5. Pour qu'un logiciel ne soit utiliser dans tous les sessions
    Par mouloudéen dans le forum Autres Logiciels
    Réponses: 10
    Dernier message: 14/12/2005, 19h10

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