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 :

VBA - Déclarer wb et ws une fois, pour tous les modules


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
    Ingéniérie financière (orienté VBA Excel donc)
    Inscrit en
    Janvier 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Kazakhstan

    Informations professionnelles :
    Activité : Ingéniérie financière (orienté VBA Excel donc)

    Informations forums :
    Inscription : Janvier 2016
    Messages : 37
    Par défaut VBA - Déclarer wb et ws une fois, pour tous les modules
    Bonjour,

    Je suis à nouveau confronté à un soucis dont je n'ai jamais réussi à obtenir une réponse convenable :
    j'aimerais pouvoir déclarer une fois par exemple à l'ouverture du classeur dans le Workbook_Open() le classeur, les feuilles, éventuellement d'autres objets.

    Je déclare publiques le wb et les worksheets dans l'espace de code (module) du classeur
    Déjà ça n'est pas accessible dans les autres modules (mais pour ça, il faut mettre en Global les variables sauf que ce n'est pas possible pour des objets non primitifs j'ai l'impression !)

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Workbook_Open()
     
    'variables globales
     
    'Call declarationVariables
     
    Set wb = ThisWorkbook
    Set wsA = wb.Worksheets("AMORTISSEMENT")
    Set wsT = wb.Worksheets("TABLEAU_AUTOMATIQUE")
     
    debug.print wsA.Name & " dans wb_Open"
     
    End Sub

    Je suis tombé sur pas mal de topics présentant ce même soucis, mais je n'arrive pas à appliquer les solutions. Ca ne marche pas.
    Exemple : ce topic

    Je n'ai encore jamais rencontré le
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Property Get ModelWorksheet As Worksheet
    Je me renseigen pour l'utiliser,

    Mais avez-vous déjà rencontré ce problème,
    COmment l'avez-vous résolu ?

    Bien à vous,
    Douzal

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    c'est superflu vu les variables objet déjà prédéfinies comme ThisWorkbook et les CodeName des feuilles de calculs,
    pourquoi donc créer ce qui est déjà existant ?‼

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre averti
    Femme Profil pro
    Ingéniérie financière (orienté VBA Excel donc)
    Inscrit en
    Janvier 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Kazakhstan

    Informations professionnelles :
    Activité : Ingéniérie financière (orienté VBA Excel donc)

    Informations forums :
    Inscription : Janvier 2016
    Messages : 37
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Bonjour,

    c'est superflu vu les variables objet déjà prédéfinies comme ThisWorkbook et les CodeName des feuilles de calculs,
    pourquoi donc créer ce qui est déjà existant ?‼

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    Oh ?
    Je dois me renseigner sur les CodeNames, jamais entendu parler !

    Mais dans chacune de mes proc, j'ai pris la bonne habitude de bien pointer sur le classeru et la feuille, et toujours passer par ces
    set wb = thisworkbook
    setws1 = wb.worksheets("nomFeuille1")

    Y'a plus simple ??
    (merci poru ta rapidité)

  4. #4
    Membre averti
    Femme Profil pro
    Ingéniérie financière (orienté VBA Excel donc)
    Inscrit en
    Janvier 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Kazakhstan

    Informations professionnelles :
    Activité : Ingéniérie financière (orienté VBA Excel donc)

    Informations forums :
    Inscription : Janvier 2016
    Messages : 37
    Par défaut
    Nb : j'ai aussi un autre module avec donc redéclaration des variables (pas bien déjà, ça m'ennuie beaucoup) et là l'affectation n'est pas effective

    Code VBA : 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
    Option Base 1
    Option Explicit
     
    ' ________________________________________
     
    'Global wb As Workbook
    Public wb As Workbook
     
    Public MONTANT As Double
    Public TAUX As Long
    Public NBPER As Byte
    Public TYP As String
     
    Public wsA As Worksheet
    Public wsT As Worksheet
    'Public wb As Workbook
    Public c As Range
     
    ' ________________________________________
     
     
     
     
     
    Private Sub valider_Click()
     
    'Dim MONTANT As Double
    'Dim TAUX As Long
    'Dim NBPER As Byte
    Dim TYP As String
     
    'Dim wsA As Worksheet
    'Dim wsT As Worksheet
    'Dim wb As Workbook
    Dim c As Range
     
    'affectation
    'Set wb = ThisWorkbook
    'Set wsA = wb.Worksheets("AMORTISSEMENT")
    'Set wsT = wb.Worksheets("TABLEAU_AUTOMATIQUE")
    'Call declarationVariables
     
    MsgBox "Dans Valider_Click"
    MsgBox wsA.Name & " dans Valider_click"
    MsgBox "Dans Valider_Click"
     
     
    End Sub


    Nb : fichier en pj
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Les variables prédéfinies automatiquement pour le classeur et ses feuilles de calculs
    étant disponibles dans tout type de module de ce même classeur, utiliser directement ThisWorkbook pour le classeur …

    Exemple de CodeName dans cette discussion

  6. #6
    Membre averti
    Femme Profil pro
    Ingéniérie financière (orienté VBA Excel donc)
    Inscrit en
    Janvier 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Kazakhstan

    Informations professionnelles :
    Activité : Ingéniérie financière (orienté VBA Excel donc)

    Informations forums :
    Inscription : Janvier 2016
    Messages : 37
    Par défaut
    Citation Envoyé par Marc-L Voir le message

    Les variables prédéfinies automatiquement pour le classeur et ses feuilles de calculs
    étant disponibles dans tout type de module de ce même classeur, utiliser directement ThisWorkbook pour le classeur …

    Exemple de CodeName dans cette discussion
    Merci,
    Je me renseigne ça peut effectivement être une solution qui change de mes habitudes mais qui fonctionne parfaitement !
    Si je peux assigner un String au CodeName, ça va le faire

    Top,
    Je regarde tout ça !!

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Conclusion :

    en utilisant directement ThisWorkbook ou/et les CodeName des feuilles de calculs,
    il est inutile  - superfétatoire même ! -  de créer des variables pour ces objets.

    Sans compter l'utilisation de l'instruction With

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    D'accord pour ThisWorkbook, mais pour les feuilles je serais moins catégorique personnellement.
    Un codename par défaut est Feuilxx, il faudait tous les reprendre dans VBE si on veut un code autocommenté.
    Pour moi c'est plus simple de déclarer une variable, sauf si on veut s'affranchir d'un renommage des feuilles.

    La déclarer (Public ou Global selon la portée voulue) au début d'un module Standard, avant toute procédure.
    eric

  9. #9
    Membre averti
    Femme Profil pro
    Ingéniérie financière (orienté VBA Excel donc)
    Inscrit en
    Janvier 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Kazakhstan

    Informations professionnelles :
    Activité : Ingéniérie financière (orienté VBA Excel donc)

    Informations forums :
    Inscription : Janvier 2016
    Messages : 37
    Par défaut
    Alors voici, je mets dans le module du classeur

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
    Option Base 1
     
    Public wsA As String
     
    Private Sub Workbook_Open()
     
    ' affectation a wsA (portee publique) du codeName de la feuille Amortissement
    wsA = ThisWorkbook.Worksheets("AMORTISSEMENT").CodeName
     
     
    End Sub

    Et dans le bouton associé au clic sur VALIDER :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub valider_Click()
     
    ' "variable non definie"
    MsgBox wsA
     
    End Sub
    La variable n'est pas definie ..

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Créer une variable pour le classeur contenant le code ou pour ses propres feuilles de calculs est :


    I N U T I L E


    Encore une fois et c'est la dernière :   juste utiliser directement leurs variables prédéfinies …

    Sauf à vouloir perdre du temps et gâcher des ressources systèmes !

Discussions similaires

  1. [PHP 5.0] [Conception] Une page pour tous les traitements ?
    Par keaton7 dans le forum Langage
    Réponses: 15
    Dernier message: 25/04/2009, 14h02
  2. Comment faire un alignement vertical d'une image pour tous les navigateurs?
    Par Alexandrebox dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 06/04/2009, 14h10
  3. Réponses: 4
    Dernier message: 18/08/2008, 15h11
  4. Réponses: 3
    Dernier message: 06/09/2007, 14h31
  5. Installation d'une imprimante pour tous les utilisateurs
    Par chobol dans le forum Windows XP
    Réponses: 4
    Dernier message: 04/09/2007, 22h28

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