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 :

Déclaration public - Constante


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut Déclaration public - Constante
    Bonjour,
    Dans le dernier fichier où j'ai travaillé, j'ai noté que j'avais écris 350 fois :
    Workbooks("FichierPrincipal.xlsm").Sheets("Données")
    Le plus souvent, pour accoller un .range("..") derière.

    Je voudrais savoir comment déclarer une constante du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const RefDon as string = "Workbooks("FichierPrincipal.xlsm").Sheets("Données")"
    pour ensuite dans mes procédures n'avoir plus qu'à préciser la range
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RefDon.Range("A1") = "toto"
    Merci de votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Tu ne peux pas déclarer ça comme une String.
    Un workbook et un Worksheet sont des objets...

    Par contre, il y a l'utilisation de With qui pourrait t'éviter de réécrire plusieurs fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Workbooks("FichierPrincipal.xlsm").Sheets("Données")
       .Range("A1") = "toto"
       .Range("A2") = "titi"
    End With
    Autrement, tu peux déclarer des variables en Public que tu "Set" au démarrage de l'application
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Bk as workbook, Sh as worksheet

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bonsoir,

    utilise un objet feuille de calcul, il y as plein d'exemples sur le forum :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim sh as WorkSheet
    set sh= Workbooks("FichierPrincipal.xlsm").Sheets("Données")
     
    sh.range("A1")="Et vooilà"

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Effectivement utiliser 350 fois FichierPrincipal.xlsm peut être replacer par un variable public.

    En revanche tu n'expliques pas comment ce fichier arrive dans la vie de ton application!
    En effet, si ton fichier est ouvert par l'application , si l'ouverture est un prérequis et l'utilisateur doit l'ouvrir! Mais ce cas de figure est absurde!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public sh as WorkSheet
    Public wb as Workbook
    Sub init()
    Set wb=Workbooks.open("c:\FichierPrincipal.xlsm")
    set sh= wb.Sheets("Données")
    End Sub

  5. #5
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut
    Bonjour à Tous et merci pour vos réponses.
    Bbil
    quand j'essaie ton code, j'ai un message d'erreur d'exécution 9 : l'indice n'appartient pas à la selection (sur le Set)
    Mais j'ai le même motif avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Sh = Sheets("Données")
    par contre,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Sh = Wb.Sheets("Données")
    passe très bien (Rdurupt)

    rdurupt,
    Ce fichier est ouvert manuellement, puis il pilote un grand nombre de mises à jour qui consistent à ouvrir des fichiers, aller chercher des données, incrémenter une base de données, écrire quelques formules, fermer les fichiers tiers ; mais j'ai quelques interventions manuelles à faire quelques fois donc je lance ces actions avec des boutons et donc je vais perdre le set entre chaque lancement.
    Je suis sans arrêt en train de passer d'un fichier à l'autre, par contre les noms des feuilles de travail sont quasiment les mêmes.

    Car si je comprends ce que vous voulez me dire, c'est qu'en lançant un set, avec une variable publique, je garde la valeur de la variable tout le long de la procédure ? (je ne peux pas vérifier tant que je n'aurai pas résolu le message d'erreur - quand je dis "je", je pense bien évidemment à "Vous" ;>)

    Merci encore pour votre intervention.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Nous restons dans l'inconnu, car si FichierPrincipal.xlsm est le fichier qui contient tes macros, tu peux utiliser la méthode open de thisWorkbook pour renseigner ta variable
    Set Sh = ThisWorkbook.Sheets("Données")

  7. #7
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut
    Oui, rdurupt,
    Tu as raison, je vais faire comme tu le suggérais :
    • Faire une déclaration public
    • faire une Sub Init() avec tous les Set pour donner les valeurs aux variables
    • enfin, à chaque fois que je lance un nouveau bloc de procédures, de faire un Call Init pour réinitialiser les variables

    J'aurais préféré des constantes, mais si c'est pas possible, vous m'avez donné une méthode, je ferai avec et je serai très contente.

    Par contre, si vous pouvez me dire pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Sh = Sheets("Données")
    ne fonctionne pas...
    Je vous remercie pour tout.

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

Discussions similaires

  1. [String] Déclaration de constantes
    Par bulbo dans le forum Langage
    Réponses: 10
    Dernier message: 22/07/2008, 17h19
  2. déclaration de constante
    Par DiverSIG dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/06/2007, 08h07
  3. [VB.NET] Déclaration PUBLIC Multiple
    Par olbi dans le forum VB.NET
    Réponses: 2
    Dernier message: 06/04/2007, 11h02
  4. Réponses: 2
    Dernier message: 05/04/2007, 15h52
  5. Déclaration de constantes
    Par gilv57 dans le forum C
    Réponses: 2
    Dernier message: 13/12/2006, 21h35

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