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 :

declaration constante range


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 45
    Par défaut declaration constante range
    bonjour

    je voudrais déclarer comme constante dans un classeur la valeur d'une cellule (représentant le chemin réseau des docs partagés)

    pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public const CheminReso as string = sheets("A").range("A10").value
    est-il incorrect ?

    j'ai essayé en nommant la plage, pas mieux!

    merci par avance pour vos explications

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut
    dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public const CheminReso as string = sheets("A").range("A10").value
    Range("A10").Value est une variable. Elle ne peut donc déterminer la valeur d'une constante.

    Tu peux par contre utiliser une variable publique CheminReso ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public CheminReso as string ' Public si dans un module standard, sinon Private
    et :
    1) à l'ouverture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CheminReso = range("A10"').value
    2) dans l'évènement Change de ta feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Target = Range("A10") Then CheminReso = Target.Value
    End Sub

  3. #3
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    Bonjour,
    Par définition une constante n'est pas variable
    Il est préférable d'initialiser la valeur à l'ouverture du fichier
    déclarer une variable globale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim chemin As String
    puis à l'ouverture du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Workbook_Open()
     chemin = Activeworkbook.Worksheets("A").range("A10").value
    End Sub

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Nomme ta plage CheminReseau dans Excel et tu pourras l'utiliser sans problème en VBA via
    sans devoir initialiser quoi que ce soit à l'ouverture...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut Pierre Fauconnier
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public CheminReso As Range
    et à l'ouverture (une seule fois, donc) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set CheminReso = Range("A10")
    Il suffira dès lors de se référer à CheminReso, qui renverra toujours le contenu de A10, quelle que soit la procédure qui l'utilise. Ex :
    puisque, par défaut de propriété, la propriété utilisée par VBA est Value.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Perso, je ne comprends pas bien pourquoi se compliquer la tâche en définissant une variable globale qu'il faut initialiser à un moment ou à un autre, alors qu'une plage nommée fait l'affaire.

    De plus, si l'utilisateur doit modifier le chemin réseau à un moment ou à un autre, il faudra, pour que la nouvelle valeur soit placée dans la variable, soit fermer et ouvrir à nouveau le classeur, soit intercepter l'évènement Change de la feuille concernée pour modifier la valeur de la variable... Beaucoup de code pour rien, donc, là où ma solution ne fait intervenir aucune ligne de code.

    Enfin, si un débogage survient à un moment ou à un autre et qu'il y a arrêt du code, la variable devra être initialisée à nouveau...

    J'ai tendance à dire que lorsque l'on programme en VBA pour Excel, il faut d'abord penser Excel, cela simplifie grandement le code, d'une façon générale.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    A mon avis, ce qui est constant, ce n'est pas la valeur de la cellule, mais la cellule elle-même.
    Comme une constante ne peut pas être de type objet, on peut oublier.
    Après, entre utiliser une cellule nommée ou appeler directement la cellule, il n'y a pas grande différence, sauf que l'utilisation d'un nom préserve le code en cas de déplacment de la cellule.
    La solution de Pierre Fauconnier me semble donc la meilleure.
    Par contre, pour appeler la cellule au lieu de Je préfère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thisworkbook.Names("CheminReseau").Referstorange.Value
    C'est plus sûr si on a plusieurs classeurs ouverts qui contiendraient le même nom.

    Cordialement,

    PGZ

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

Discussions similaires

  1. declaration constante range
    Par AgnesK dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/01/2011, 17h29
  2. declaration d'une constante
    Par patmar83 dans le forum VBA Access
    Réponses: 4
    Dernier message: 22/11/2009, 16h51
  3. Declaration d'une liste constante
    Par bitou dans le forum Général Java
    Réponses: 2
    Dernier message: 21/04/2008, 15h54
  4. Declaration des constantes en tableau
    Par barbsbou dans le forum Débuter
    Réponses: 3
    Dernier message: 20/11/2007, 15h22
  5. Declaration de constantes en VBA
    Par acid25 dans le forum Access
    Réponses: 5
    Dernier message: 01/08/2006, 16h18

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