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

VBA Access Discussion :

Tableau de variable (et non variable tableau)


Sujet :

VBA Access

  1. #1
    Membre éclairé Avatar de Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 218
    Par défaut Tableau de variable (et non variable tableau)
    Bonjour à toutes et tous !

    N'ayant rien trouvé de concluant à ce sujet...

    Admettons que je dispose de plusieurs variables booléennes.

    Je souhaite que, lorsque l'une est à True, toutes les autres passent à False.

    Ça pourrait donner ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Bascule()
        If booToto Then
            booTiti = False
            booTata = False
        ElseIf booTiti Then
            booToto = False
            booTata = False
        Else
            booToto = False
            booTiti = False
        End If
    End Sub
    Rien de bien méchant me direz-vous...
    Ben maintenant on refait la même avec... 50 variables !

    A titre indicatif, ça fait 50x50 possibilités + 1 ligne pour le END IF = 2501 lignes de code juste pour faire une sorte d'interrupteur global

    Donc, existe-t-il une instruction inconnue de moi qui ressemblerait à INDIRECT() de la feuille Excel et qui permettrait de passer en paramètre le nom de la variable à laquelle affecter une valeur, genre VARIABLE(booToto)=True, ce qui permettrait de stocker une fois le nom des variables dans un tableau, puis de faire une boucle sur le-dit tableau...

    Ça réduirait à 50 tests contenant chacun une boucle For Each de 3 lignes, ce qui paraît nettement moins fastidieux et encombrant.


    Messieurs-Dames, je suis impatient de recevoir vos idées !

  2. #2
    Membre éclairé Avatar de Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 218
    Par défaut
    Re !

    J'ai une solution de contournement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Bascule()
        ' On met tout à false
            booToto = False
            booTiti = False
            booTata = False
     
        ' Puis on met à True la bonne
            booToto = True
    End Sub
    Mais ça reste une solution de contournement car dans mon cas, la mise à True de booToto dépend d'un test.
    C'est donc bien plus compliqué que ce que je présente ci-dessus, et ma question reste entièrement posée, à savoir :
    "Existe-t-il une fonction du genre Variable(booToto) = True ?"
    J'apporte juste ce complément parce qu'il est plus logique que ma première mouture.

    Je reste donc en attente de vos retours et vous en remercie d'avance !

  3. #3
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonjour,

    Avec ce code associé à l'événement Après mise à jour de chaque case à cocher, tu obtiens le résultat voulu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Cocher0_AfterUpdate()
    Dim ctl As Control
      If Me.ActiveControl = -1 Then
          For Each ctl In Me.Controls
            If ctl.ControlType = acCheckBox And ctl.Name <> Me.ActiveControl.Name Then ctl = 0
          Next ctl
      End If
    End Sub

  4. #4
    Membre éclairé Avatar de Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 218
    Par défaut
    Bonjour Claude, et merci pour cette réponse.

    C'est pas mal, mais ça n'entre pas dans le contexte... Je vais donc préciser ledit contexte :

    On se trouve dans un système hiérarchique de formulaires et jeux d'onglets :
    F_MENU_GENERAL
    Tabs_MENU_GENERAL
    Tab_CONCEPTION
    SF_MENU_GENERAL_CONCEPTION
    Tabs_MENU_GENERAL_CONCEPTION
    Tab_LISTE_DOCUMENTS
    SSF_MENU_GENERAL_CONCEPTION_LISTE_DOCUMENTS
    txtProcessName
    Correspondances :
    F_, SF_, SSF = Formulaires
    Tabs = Contrôle onglets
    Tab = Page (onglet)

    On a donc plusieurs Contrôles onglets disposés chacun dans une page d'un Contrôle onglet "principal".

    Il y a en tout 28 onglets.
    Pour une histoire de facilité d'utilisation dans le code (qui fait déjà plusieurs milliers de lignes), j'envisage d'affecter à chaque onglet une variable booléenne globale qui devra indiquer si l'onglet est ou non actif.
    Cette méthode me permettrait à tout moment ce genre de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If booAccueilListeOf then blablablabla
    Donc je cherche à écrire une procédure commune qui, sur l'événement Change du contrôle onglet, chargerait comme il se doit ces 28 variables.

    Alors j'ai bien mis au point une méthode qui me permet d'atteindre mon but, mais j'aurais fait 10 fois plus vite avec une fonction du genre :
    Je te remercie donc encore pour avoir pris le temps de me répondre, mais les variables étant globales et non liée à un formulaire en particulier, ta solution se trouve ne pas être adaptée à mon besoin.

    Je continue donc de chercher la fonction magique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Variable(maVariable)=maValeur
    ou une piste qui me permettrait de la créer.
    Je rappelle que l'intérêt de cette fonction serait de pouvoir boucler sur un tableau contenant les noms des variables à passer en paramètre.

    En vous remerciant par avance de vos réponses !

  5. #5
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Au fait, pourquoi ne veux-tu pas définir un tableau au lieu d'avoir une série de variables BooXX ?

    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
    Option Compare Database
    Option Explicit
     
    Global Arr(10) As Boolean
     
    Public Function Modif(col As Integer)
      Dim i As Integer
      For i = 0 To UBound(Arr) - 1
         If i = col Then
             Arr(i) = True
           Else
             Arr(i) = False
         End If
      Next i
     
    End Function

  6. #6
    Membre éclairé Avatar de Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 218
    Par défaut
    J'y ai pensé, mais dans le cadre de la maintenance, 6 mois après, et au milieu de 3000 lignes (certes réparties dans plein de modules, mais quand même), auquel des 28 onglets correspond varOnglets(17) ?

    J'ai laissé tomber l'idée des tableaux car on ne peut apparemment pas faire de tableaux associatifs en VBA, sinon ça aurait fait l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim varOnglets as Variant
    varOnglets(Conception) = True
    Remarque que la syntaxe du tableau associatif est identique à celle de la fonction que je recherche...

    Il y aurait la fastidieuse tâche de créer une classe clOnglets dans laquelle chaque page serait une propriété... mais ça reste un sacré boulot pour pallier l'absence de tableaux associatifs !

    En tout cas merci de t'intéresser à mon affaire et d'y apporter des propositions !

  7. #7
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Et si tu avais un formulaire (toujours ouvert mais caché) avec des contrôles portant le nom de tes variables, là tu pourrais boucler dans la collection.

  8. #8
    Membre confirmé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 64
    Par défaut
    Bonjour Eric13500 (dans le 13 ?)

    Une idee gratuite !!
    Et si tu utilisais la propriete Tag (Remarque) de chaque onglet pour lui affecter un numero, lequel servira dans un tableau global pour savoir si l'onglet est l'actif.
    Il suffirait, lors de la commutation d'un onglet a l'autre par l'operateur, de recuperer ce numero, puis remettre tout le monde a zero sauf celui qui vient de s'activer.

    Si ca roule, merci de donner la reponse.

    Cdlt
    Caramel13

  9. #9
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut

  10. #10
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Personnellement, je ne comprend pas l'intérêt. Le contrôle onglet dispose déjà d'attribut permettant de savoir quel onglet est actif.

  11. #11
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonjour Christophe,

    Imagine qu'à chaque onglet on associe un N° (via sa propriété remarque), on peut alors créer une relation facile entre ce N° et l'indice du tableau et rencontrer ainsi l'objection :
    J'y ai pensé, mais dans le cadre de la maintenance, 6 mois après, et au milieu de 3000 lignes (certes réparties dans plein de modules, mais quand même), auquel des 28 onglets correspond varOnglets(17) ?
    ... réponse : celui qui a « 17 » dans sa propriété « Remarque ».

  12. #12
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Mais cette propriété existe déjà, quel intérêt de passer par le tag ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub MonControleOnglet_Change()
    MsgBox "Bonjour, je suis l'onglet n°" & MonControleOnglet.Value
    End Sub
    Bref, je n'ai rien compris je crois

  13. #13
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    J'ai sans doute mal compris ta proposition
    Images attachées Images attachées  

  14. #14
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Il s'agit de la structure contenant les pages et non la page elle même

  15. #15
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Ah OK, merci. Cela m'avait échappé.
    Je vois comment faire la liaison directement avec une colonne du tableau si un seul groupe de pages : index du tableau = value du groupe.

    Mais suppose qu'il y ait plusieurs groupes de pages comme dans l'application qui nous occupe

    On a donc plusieurs Contrôles onglets disposés chacun dans une page d'un Contrôle onglet "principal".
    Il y a en tout 28 onglets.
    Le problème d'établir la relation indice du tableau/onglet reste. Non ?

  16. #16
    Membre éclairé Avatar de Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 218
    Par défaut
    Bonjour !

    Whaou !
    Sujet qui déchaîne les neurones et les passions !

    Merci en tout cas d'y réfléchir !

    Ça va être difficile de répondre à tout le monde, mais je vas essayer...

    Citation Envoyé par Caramel13
    Bonjour Eric13500 (dans le 13 ?)
    Bonjour Caramel13. Anciennement du 13, maintenant au vert dans les Alpes (04).

    Citation Envoyé par Caramel13
    Et si tu utilisais la propriete Tag (Remarque) de chaque onglet pour lui affecter un numero, lequel servira dans un tableau global pour savoir si l'onglet est l'actif.
    Je me suis immédiatement fait la même réflexion que Christophe (Tofalu) : je ne comprends pas l'intérêt de la manip dans la mesure où un contrôle onglet dispose d'une propriété .Value qui, en lecture, renvoie l'index de l'onglet actif, et en écriture "ouvre" l'onglet en question

    D'ailleurs, depuis que j'ai posté mon SOS et avant de lire vos réponses, j'ai fait ça :
    Code dans un module standard GestionInterfaceEtNavigation : 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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    Option Compare Database
     
    ' ========== Variables de navigation ==========
    ' Chargées par les changements d'onglets
    ' Permettent de connaître ceux qui sont acifs (page et sous-page)
     
    ' Accueil
    Public booOngletAccueil As Boolean
    Public booOngletAccueilOfEnCours As Boolean
    Public booOngletAccueilDocsEnCoursDeValidation As Boolean
    Public booOngletAccueilStatutEquipepent As Boolean
    Public booOngletAccueilNcATraiter As Boolean
     
    ' Conception
    Public booOngletConception As Boolean
    Public booOngletConceptionCreerDocument As Boolean
    Public booOngletConceptionListeDocuments As Boolean
     
    ' Ordonnancement
    Public booOngletOrdonnancement As Boolean
    Public booOngletOrdonnancementCreerOf As Boolean
    Public booOngletOrdonnancementListeOf As Boolean
     
    ' Production
    Public booOngletProduction As Boolean
    Public booOngletProductionOuvrirOf As Boolean
    Public booOngletProductionRapportOf As Boolean
    Public booOngletProductionListeDocs As Boolean
     
    ' Maintenance
    Public booOngletMaintenance As Boolean
    Public booOngletMaintenanceListeMr As Boolean
    Public booOngletMaintenanceStatistiques As Boolean
    Public booOngletMaintenanceHistorique As Boolean
     
    ' Qualité
    Public booOngletQualite As Boolean
    Public booOngletQualiteNc As Boolean
    Public booOngletQualiteActionsCorrectives As Boolean
    Public booOngletQualiteSystemeDocumentaire As Boolean
     
    ' Paramétrage
    Public booOngletParametrage As Boolean
    Public booOngletParametrageMajTableEquipement As Boolean
    Public booOngletParametrageMajTableConsommables As Boolean
    Public booOngletParametrageMajTableDataLogs As Boolean
    Public booOngletParametrageOutilsAdmin As Boolean
    ' =============================================
     
     
    Public Sub OngletsActifs()
        Dim objF As Form
        Set objF = Forms(strNomFormulaireMenuPrincipal)
     
        ' ==========  Mise à False de toutes les variables  ==========
     
        ' Accueil
            booOngletAccueil = False
            booOngletAccueilOfEnCours = False
            booOngletAccueilDocsEnCoursDeValidation = False
            booOngletAccueilStatutEquipepent = False
            booOngletAccueilNcATraiter = False
     
        ' Conception
            booOngletConception = False
            booOngletConceptionCreerDocument = False
            booOngletConceptionListeDocuments = False
     
        ' Ordonnancement
            booOngletOrdonnancement = False
            booOngletOrdonnancementCreerOf = False
            booOngletOrdonnancementListeOf = False
     
        ' Production
            booOngletProduction = False
            booOngletProductionOuvrirOf = False
            booOngletProductionRapportOf = False
            booOngletProductionListeDocs = False
     
        ' Maintenance
            booOngletMaintenance = False
            booOngletMaintenanceListeMr = False
            booOngletMaintenanceStatistiques = False
            booOngletMaintenanceHistorique = False
     
        ' Qualité
            booOngletQualite = False
            booOngletQualiteNc = False
            booOngletQualiteActionsCorrectives = False
            booOngletQualiteSystemeDocumentaire = False
     
        ' Paramétrage
            booOngletParametrage = False
            booOngletParametrageMajTableEquipement = False
            booOngletParametrageMajTableConsommables = False
            booOngletParametrageMajTableDataLogs = False
            booOngletParametrageOutilsAdmin = False
     
     
        ' ==========  Mise à jour des variables relatives aux onglets actifs (principal et secondaire)  ==========
     
            Select Case objF.Controls("tabsMenuGeneral").Value
            Case 0
                ' Accueil
                booOngletAccueil = True
                Select Case objF.Form("SF_MENU_GENERAL_ACCUEIL").Controls("tabsAccueil").Value
                    Case 0
                        booOngletAccueilOfEnCours = True
                    Case 1
                        booOngletAccueilDocsEnCoursDeValidation = True
                    Case 2
                        booOngletAccueilStatutEquipepent = True
                    Case 3
                        booOngletAccueilNcATraiter = True
                End Select
            Case 1
                ' Conception
                booOngletConception = True
                Select Case objF.Form("SF_MENU_GENERAL_CONCEPTION").Controls("tabsConception").Value
                    Case 0
                        booOngletConceptionCreerDocument = True
                    Case 1
                        booOngletConceptionListeDocuments = True
                        DoEvents
                        Forms("F_MENU_GENERAL").Form("SF_MENU_GENERAL_CONCEPTION").Form("SSF_MENU_GENERAL_CONCEPTION_LISTE_DOCUMENTS").Requery
                End Select
            Case 2
                ' Ordonnancement
                booOngletOrdonnancement = True
                Select Case objF.Form("SF_MENU_GENERAL_ORDONANCEMENT").Controls("tabsOrdonancement").Value
                    Case 0
                        booOngletOrdonnancementCreerOf = True
                    Case 1
                        booOngletOrdonnancementListeOf = True
                End Select
            Case 3
                ' Production
                booOngletProduction = True
                Select Case objF.Form("SF_MENU_GENERAL_PRODUCTION").Controls("tabsProduction").Value
                    Case 0
                        booOngletProductionOuvrirOf = True
                    Case 1
                        booOngletProductionRapportOf = True
                    Case 2
                        booOngletProductionListeDocs = True
                End Select
            Case 4
                ' Maintenance
                booOngletMaintenance = True
                 Select Case objF.Form("SF_MENU_GENERAL_MAINTENANCE").Controls("tabsMaintenance").Value
                    Case 0
                        booOngletMaintenanceListeMr = True
                    Case 1
                        booOngletMaintenanceStatistiques = True
                    Case 2
                        booOngletMaintenanceHistorique = True
                End Select
           Case 5
            ' Qualité
                booOngletQualite = True
                Select Case objF.Form("SF_MENU_GENERAL_QUALITE").Controls("tabsQualite").Value
                    Case 0
                        booOngletQualiteNc = True
                    Case 1
                        booOngletQualiteActionsCorrectives = True
                    Case 2
                        booOngletQualiteSystemeDocumentaire = True
                End Select
            Case 6
                ' Paramétrage
                booOngletParametrage = True
                Select Case objF.Form("SF_MENU_GENERAL_PARAMETRAGE").Controls("tabsParametrage").Value
                    Case 0
                        booOngletParametrageMajTableEquipement = True
                    Case 1
                        booOngletParametrageMajTableConsommables = True
                    Case 2
                        booOngletParametrageMajTableDataLogs = True
                    Case 3
                        booOngletParametrageOutilsAdmin = True
                End Select
        End Select
    Code dans chaque formulaire contenant un contrôle onglet : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub tabsMenuGeneral_Change()
        OngletsActifs
    End Sub
    Je me suis donc servi de la propriété .Value des mes contrôles onglets pour charger des booléennes globales.
    Ça fonctionne très bien, je sais dans quel onglet principal et quel onglet secondaire je me trouve, mais bon, sacrée tartine juste pour un fil d'Ariane !

    Citation Envoyé par Claude LELOUP
    Et si tu avais un formulaire (toujours ouvert mais caché) avec des contrôles portant le nom de tes variables, là tu pourrais boucler dans la collection.
    c'est pas idiot du tout ça ! mais à peu de choses près, je pense que ce serait aussi lourd à gérer que ma solution (charger les variables ou charger les contrôles)...

    Entre temps, j'ai lu quelque chose sur l'objet Dictionary qui fonctionnerait comme un tableau associatif en mieux... C'est ICI et c'est écrit par... Tofalu !
    J'essaierai d'y jeter un œil plus tard (suis en retard sur mon développement !) car c'est peut-être la réponse à ma question de base...

    Je laisse donc le sujet ouvert car (rappeler le sujet d'origine n'est jamais inutile) il s'agit toujours de trouver un système équivalent aux tableaux associatifs qui permettrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ' De valoriser des variables nommées :
        Variable(booToto)=true
     
    ' De lire ces variables :
        msgbox Variable(booToto)
     
    ' De boucler sur ces variables :
        For i=LBound(Variable) to UBound(Variable)
            Variable(i)=False
        Next
    ' (ou quelque chose dans le genre)
    Notez que, rapportée à mon cas, la dernière boucle de 3 lignes remplace 28 lignes de codes + les commentaires + les lignes vides de présentation !

    Merci encore pour votre participation !

Discussions similaires

  1. [PHP 5.3] Variables static non accessible dans un tableau
    Par narmataru dans le forum Langage
    Réponses: 6
    Dernier message: 27/03/2013, 15h20
  2. [Débutant] Un tableau de variables (et non pas de leurs valeurs)
    Par Whombat dans le forum VB.NET
    Réponses: 9
    Dernier message: 28/10/2011, 09h01
  3. Réponses: 7
    Dernier message: 15/11/2007, 14h41
  4. [HTML] boucle sur une variable et non pas un tableau
    Par delma dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/11/2006, 15h03
  5. Tableau d'éléments de type variable
    Par Drooxy dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2003, 15h20

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