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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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

  8. #8
    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

  9. #9
    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.

  10. #10
    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 ».

  11. #11
    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

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