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 :

Enumération en cascade et Variable Indirect


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Neutthsch
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 105
    Par défaut Enumération en cascade et Variable Indirect
    Bonjour à tous,

    J'ai 2 problèmes imbriqués dans mon code mais qui peuvent être traiter distinctement.

    1/Je stocke mes noms et positions de colonne dans une énumération et j'aimerai pouvoir identifier des blocs de colonnes. J'ai pensé à faire des Enum en cascade mais ça ne marche pas

    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
    Public Enum ColData 'Position des colonnes de InitData
        Inv = 1
        Equip
        Zone
        Room
        Com
        Crit
        MP 'Première colonne d'un bloc de 5 colonnes
        Metro = 12 'Première colonne d'un bloc de 5 colonnes
    End Enum
     
    Public Enum CS 'Soit ColonneService, qu'on additionne sur l'appel des blocs des différents services (MP et Metro)
        Start
        Freq
        Last
        Statut
        SDate
    End Enum
    Voilà mon code qui fonctionne bien mais que je trouve un peu inesthétique, car si je veux appeler une colonne du Bloc MP ou du bloc Metro ça donne ceci :
    Et j'aurai clairement Préféré quelque chose du genre
    Est-ce possible?

    2/Le problème suivant découle un peu de ça. Une variable stService de type String stocke "MP" ou "Metro" suivant différentes conditions.
    Je voudrais pouvoir appeler mes deux variables du point 1 grâce à la valeur de stService.
    Sous excel la fonction INDIRECT existe mais je ne trouve pas d'équivalent sous VBA.

    aussi est-ce possible?

  2. #2
    Membre expérimenté

    Homme Profil pro
    Technical Account Manager
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technical Account Manager

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Billets dans le blog
    1
    Par défaut
    Si tu souhaites utiliser la fonction indirect, tu peux utiliser cette option de VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("ta feuille").Cells(indice-ligne, indice-colonne).Formula = "=Indirect(" & "ton instruction" & ")"
    L'option Formula te permet d'écrire une formule dans une cellule (ou plage) choisi.
    La valeur ajoutée sera une chaine de caractère contenant ta formule.
    Alors fait attention à bien ajouter le "&" pour la concaténation de ta formule avec de possibles variables.

  3. #3
    Membre éprouvé Avatar de Neutthsch
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 105
    Par défaut
    Salut Xela,

    ce n'est absolument pas ma question

    Je souhaite appeler une variable en VBA dont le nom serait le résultat d'une (ou plusieurs) autre variable(s). A la manière de la formule indirect() de excel.
    On parle bien ici de variables internes à un projet qui n'ont pas vocation à être renvoyer dans une page excel (je ne cherche pas à concaténer une formule).

    Je sais pas si c'est beaucoup plus clair

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    j'a absolument rien compris!
    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
    Public Type CS 'Soit ColonneService, qu'on additionne sur l'appel des blocs des différents services (MP et Metro)
        Start As Variant
        Freq As Variant
        Last As Variant
        Statut As Variant
        SDate As Variant
    End Type
     
    Public Type ColData 'Position des colonnes de InitData
        Inv As Variant
        Equip As Variant
        Zone As Variant
        Room As Variant
        Com As Variant
        Crit As Variant
        MP As CS  'Première colonne d'un bloc de 5 colonnes
        Metro As Variant  'Première colonne d'un bloc de 5 colonnes
    End Type
     
    Sub test()
    Dim toto(10) As ColData,titi As ColData
    toto(0).MP.Start
    toto(1).MP.Start
    toto(2).MP.Start
    toto(3).MP.Start
    toto(4).MP.Start
    toto(5).MP.Start
    toto(7).MP.Start
    toto(8).MP.Start
    toto(9).MP.Start
    toto(10).MP.Start
     
    titi.MP.Start
    End Sub

  5. #5
    Membre éprouvé Avatar de Neutthsch
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 105
    Par défaut C'est où la sortie?
    mârde je crois que je suis nul pour expliquer mes problèmes... du coup je ne mérite pas ma signature.

    Je vais essayer de travailler avec ce que tu m'as envoyé déjà et je vous reformule tout ça autour de lundi si ça marche tjs pas.

    merci

  6. #6
    Membre éprouvé Avatar de Neutthsch
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 105
    Par défaut
    Non allez je me couragise à 2 mains avant le we :

    1/ça c'est mon tableau InitData :
    Nom : Sans titre.JPG
Affichages : 491
Taille : 63,4 Ko

    Je souhaite identifier chaque colonne pour pouvoir à la fois facilité la lecture de mon code et pouvoir déplacer facilement mes colonnes. j'utilise donc une énumération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Enum ColData 'Position des colonnes de InitData
        Inv = 1
        Equip
        Zone
        Room
        Com
        Crit
        MP 'Première colonne d'un bloc de 5 colonnes
        Metro = 12 'Première colonne d'un bloc de 5 colonnes
    End Enum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(ActiveRow, ColData.Inv)= "Poney"  'Je sais à la simple lecture du code que je suis positionné dans la colonne "Inventaire" du tableau InitData (soit la colonne 1)

    Le problème c'est pour me balader dans le bloc de "MP" ou de "Metro"

    J'aimerais pouvoir écrire quelque chose comme Pour me positionner dans la colonne Féquence du bloc MP (la 2éme du bloc)
    ou encore Pour me positionner dans la colonne Statut du bloc Metro (la 3éme)

    Pour l'heure, en ajoutant ce bloc si :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Enum CS 'Soit ColonneService, qu'on additionne sur l'appel des blocs des différents services (MP et Metro)
        Start 
        Freq 
        Last 
        Statut 
        SDate 
    End Enum
    Je n'arrive que à me positionner sur la première colonne du bloc choisi, auquel j'additionne la position dans le bloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ColData.MP+CS.Freq 'on identifie la colonne fréquence du bloc MP
    Ça fonctionne bien pas de souci mais je trouve pas ça très esthétique. (en faite j'ai pas vraiment de souci, je cherche à paufiner mon art VBA ^^)

    2/ Plus tard parce que là je dois y aller :p

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/05/2008, 16h47
  2. [trigger] Indirection Des Variables De Liens
    Par stephDeZ dans le forum Administration
    Réponses: 6
    Dernier message: 27/03/2007, 22h46
  3. [Cookies] Variables en cascade
    Par gaeil dans le forum Langage
    Réponses: 6
    Dernier message: 20/01/2007, 23h51
  4. Fonction INDIRECT avec variable sur n° de colonne
    Par mat.guillaume dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/08/2006, 18h04
  5. Appel ou affectation indirects de variables
    Par BARRIN dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 25/11/2005, 18h17

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