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 de données associées en tant que constantes publiques


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Par défaut Déclaration de données associées en tant que constantes publiques
    Bonjour,

    Dans tous mes projets VBA je crée toujours un module de déclaration de constantes, qui me servent entre autre pour donner des noms à mes cellules Excel, et pour avoir des informations sur des tableaux de mes onglets.

    Exemple j'ai un tableau à 3 colonnes dans un onglet, je vais alors déclarer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public const C1_Cel1Tab as string = "Nom de la cellule en haut à gauche du tableau (c'est pour me repérer)"
    Public const DCOL_Col1Tab as long = 0 (Décalage pour accéder à la première colonne, bien entendu je mets des noms explicites sinon ça ne sert à rien ;))
    Public const DCOL_Col2Tab as long = 1
    Public const DCOL_Col3Tab as long = 2
    Public const NBCOL_Tab as long = 2
    ... J'ai encore d'autres infos constantes associées au tableau mais je vais pas rentrer dans les détails
    Cette solution marche très bien et est pratique (je vois tous mes tableaux d'un coup d'oeil, et dans le code je peux accéder à mes colonnes, ou au nombre de colonnes... de manière intuitive. J'aimerais cependant l'améliorer...

    J'ai envisagé la solution de mais d'après ce que j'ai vu on ne peut utiliser que des données numériques, hors j'aimerais aussi stocker des chaînes de caractères voir des tableaux array.

    En fait il me faudrait exactement quelque chose du type Enum mais pour tout les types de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public enum tab1
         c1="première cellule"
         col1=0
         col2=1
         col3=2
         nbcol=2
         centre=array(true,false,true)
    end enum
    Le bout de code ci-dessus serait vraiment l'idéal si seulement il marchait...

    Mercide vos suggestions!

  2. #2
    Membre expérimenté Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Par défaut
    En cherchant un peu j'ai trouvé le post de qqun qui avait le même problème que moi. Malheureusement pour moi il programme en VB et du coup qqun lui a proposé la solution suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Structure MySecondGroup 
     
        Const Value1 = "thePath1"
        Const Value2 = "thePath2"
        Const Value3 = "thePath3"
     
    End Structure
    Y-a-t-il un équivalent de l'instruction Structure en VBA?

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonjour,

    Tu peux déclare un type de donnée personnalisé avec Type mais cela ne permet pas d'utiliser des constantes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Type Tableau
        Nom As String
        NbColonnes As Long
        NbLignes As Long
    End Type
    Il faut donc initialiser les variables avec les valeurs désirées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub Init()
        Dim MonTableau As Tableau
        With MonTableau
            .NbColonnes = 10
            .NbLignes = 100
            .Nom = "Données"
        End With
    End Sub
    Cordialement,

    Tirex28/

  4. #4
    Membre expérimenté Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Par défaut
    Merci de la réponse!

    Malheureusement, cette solution ne me convient pas vraiment pour deux raisons:

    - Avec la création du type personnalisé, je suis obligé de créer une procédure qui va affecter les valeurs à chaque tableau, je perds alors le principe de constantes globales, même si à la limite je peux définir mes tableaux personnalisés en tant que variable publique

    - Le second point qui est le plus important, c'est qu'avec cette solution je ne peux pas avoir des tableaux ayant des nombres de colonnes différents. Il faudrait que je crée un type pour les tableaux à 1 colonne, un pour ceux à 2 colonnes...

    La solution reste valable, mais les deux points ci-dessus en réduisent un peu son efficacité.
    J'ai malheureusement la forte impression qu'il n'existe pas de solution parafaitement adaptée à mon problème, je vais donc devoir bidouiller un truc...

    Je ne mets pas encore le post en "Résolu", j'attends quelques jours pour avoir d'autres propositions!

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonjour,

    - Le second point qui est le plus important, c'est qu'avec cette solution je ne peux pas avoir des tableaux ayant des nombres de colonnes différents. Il faudrait que je crée un type pour les tableaux à 1 colonne, un pour ceux à 2 colonnes...
    Rien ne t'empeche de déclarer un tableau de type.

    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
    Public Type Tableau
        Nom As String
        NbColonnes As Long
        NbLignes As Long
    End Type
     
    Public MesTableaux(1 To 2) As Tableau
     
    Sub Init()
        With MesTableaux(1)
            .NbColonnes = 10
            .NbLignes = 100
            .Nom = "Données"
        End With
        With MesTableaux(2)
            .NbColonnes = 20
            .NbLignes = 200
            .Nom = "Rapport"
        End With
    End Sub
     
    Sub test()
        MsgBox MesTableaux(1).NbColonnes
    End Sub
    Cordialement,

    Tirex28/

  6. #6
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Hello,

    j'ai du mal à comprendre l'intérêt d'utiliser des variables globales et des enum alors que l'objet Range() est fait pour ça ...
    Qu'est-ce que tu fais que Range() ne sait pas faire ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/03/2009, 19h23
  2. Active Directory en tant que base de données
    Par azad_892000 dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 16/10/2007, 18h08
  3. Réponses: 2
    Dernier message: 05/02/2007, 11h12
  4. [FTP] Définir une variable en tant que constante
    Par Anduriel dans le forum Langage
    Réponses: 2
    Dernier message: 15/01/2006, 11h39

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