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

IHM Discussion :

[Access] Mise par défaut d'une valeur dans ZDL considéré comme un choix effectif


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 84
    Points : 51
    Points
    51
    Par défaut [Access] Mise par défaut d'une valeur dans ZDL considéré comme un choix effectif
    Bonjour,

    J'ai un formulaire avec 5 zones de liste déroulantes (zdl).
    Les choix faits dans chacune de ces listes permettent de filtrer automatiquement les champs du formulaire.
    Le filtre étant appliqué dans le code sur le changement de chaque zdl (change).
    J'ai rajouté à chaque liste (car la valeur n'existe par dans la table) un 'Tous' qui permet de sélectionner l'ensemble des choix possibles.
    J'ai de plus mis cette valeur 'Tous' par défaut dans les 5 zdl à l'ouverture du formulaire.

    Jusqu'ici tout va bien...

    Les choix possibles dans chaque zdl dépendent de l'ensemble des choix effectués dans les zdl la précédent.
    J'ai écrit tout cela en code, et cela fonctionne bien à un détail près :
    Access ne considère pas le choix par défaut de 'Tous' comme un choix.
    Par exemple :
    zdl1 = tous
    zdl2 = y
    A l'ouverture du formulaire : zdl1= tous & zdl2 = tous
    si je ne clic pas sur zdl1='tous' alors je n'ai aucun choix possible directement dans zdl2
    si je clic sur zdl1 = tous, mes choix possibles dans zdl2 sont = tous ou x ou y ou z.

    Ma question est la suivante :
    Comment faire pour que Access considère le 'Tous' mis automatiquement par défaut dans chaque zdl de la même façon que si l'utilisateur avait physiquement cliqué dessus ?

    Faut-il que je mette la procédure évènementielle me permettant de filtrer la zdl x+1 sur une autre action que changement ?
    J'ai essayé avec "après Mise à jour", mais cela n'a pas l'air de fonctionner...

    Est ce que vous avez d'autres idées ??

    Je n'ai pas l'impression d'être dans la bonne direction et étant débutante en Access, je suis loin de connaitre toutes les possibilités du logiciel...

    Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 124
    Points : 12 176
    Points
    12 176
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Une idée parmi tant d'autres...
    Pour arriver à tes fins, il faut que le RowSource de tes ZDLs soit construit autour d'une requête avec un UNION.
    De là, tu pourrais cliquer ou affecter par défaut la valeur "Tous" à chaque liste.
    Après, il faut que tu monte une chaîne SQL en conséquence de ce qui a été sélectionné dans chaque liste...
    Par exemple :

    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
    35
    36
    37
    Private Sub Form_Load()
      zdl1 = "Toutes"
      zdl2 = "Toutes"
      zdl3 = "Toutes"
      zdl4 = "Toutes"
      zdl5 = "Tous"
    End Sub
     
    Sub RenvoyerResultatDansPopup()
    Dim SQL As String
    Dim strCritereZdl1 As String
    Dim strCritereZdl2 As String
    Dim strCritereZdl3 As String
    Dim strCritereZdl4 As String
    Dim blnCritereZdl5 As Boolean
      ''' Construit les critères
      strCritereZdl1 = IIf(Me!zdlVille = "Toutes", "LIKE " & Chr(34) & "*" & Chr(34), _
        "='" & Me!zdl1 & "'")
      strCritereZdl2 = IIf(Me!zdlFrequence = "Toutes", "LIKE " & Chr(34) & "*" & _
        Chr(34), "='" & Me!zdl2 & "'")
      strCritereZdl3 = IIf(Me!zdlReputation = "Toutes", "LIKE " & Chr(34) & "*" & _
        Chr(34), "='" & Me!zdl3 & "'")
      strCritereZdl4 = IIf(Me!zdlTrancheTarifs = "Toutes", "LIKE " & Chr(34) & "*" & _
        Chr(34), "='" & Me!zdl4 & "'")
      blnCritereZdl5 = IIf(Me!zdlParking = "Tous", "LIKE " & Chr(34) & "*" & _
        Chr(34), "=" & CBool(Me!zdl5) & "")
     
      SQL = "SELECT Monuments FROM TBLMonuments WHERE Ville " & strCritereZdl1 & _
        " AND Frequence " & strCritereZdl2 & " AND Reputation " & strCritereZdl3 & _
        " AND TrancheTarifs " & strCritereZdl4 & " AND Parking " & blnCritereZdl5 
      ''' Créée la requête du formulaire à ouvrir
      CreerRequeteDuFormulaire "reqListeDesMonumentsCorrespondants", SQL
      ''' Ouvre le formulaire dont la source est
      ''' 'reqListeDesMonumentsCorrespondants'
      DoCmd.OpenForm "frmListeDesMonumentAVisiter", acNormal, , , _
      acFormReadOnly, acDialog
    End Sub
    Dans cet exemple, il est entendu que tes ZDLssont dotées que d'une colonne sinon, ca complique un peu la sauce mais c'est faisable.
    Le principe est que la condition WHERE se construit qu'avec des LIKE si rien n'est sélectionné.
    Je t'accorde que c'est loin d'être optimal mais cela peut te mettre sur la voie astucieuse de réaliser quelque chose de plus évolué ;
    Avec un CheckSum par exemple qui s'initialise conséquence au fait que telle liste a changé de valeur...
    De là, tu pourrais jouer avec un Select Case qui construirait une condition WHERE plus propre et sans LIKE.


    Argy

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Salut Argy,

    Je crois que tu n'as pas saisi où se situe mon problème,

    Pour les zdl, et leur row source j'effectue bien une requête union, avec des where etc.... blabla bla code suivant (que j'ai reproduit et adapté sur chaque zdl) :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Private Sub Région_Change()
     
    'Création de la zdl Departement selon choix faits dans les zdl NOM_REPR et Région + 0 commandes depuis 2005
    'et ajout de "Tous" à la liste
    Dim dWhere As String
    dWhere = "((Total_cde_5) Is Null) AND ((Total_cde_6) Is Null) AND ((Total_cde_7) Is Null)"
     
    'Vérification de la sélection faite dans la zdl NOM_REPR :
    If Me.NOM_REPR <> "- Tous -" Then
        dWhere = dWhere & " AND NOM_REPR = " & Chr(34) & Me.NOM_REPR & Chr(34)
        Else
        dWhere = dWhere
    End If
     
    'Vérification de la sélection faite dans la zdl Région :
    If Me.Région <> "- Tous -" Then
        dWhere = dWhere & " AND Région = " & Chr(34) & Me.Région & Chr(34)
        Else
        dWhere = dWhere
    End If
     
    Me.Departement.RowSource = "SELECT DISTINCT Departement FROM Recap1 " & _
    "WHERE " & dWhere & _
    " UNION (SELECT " & Chr(34) & "- Tous -" & Chr(34) & " AS Departement FROM Recap1); "
     
    Me.Requery
     
    'Construction du filtre dans le détails du formulaire :
    Dim sWhere As String
     
    'Sélection des prospects
    sWhere = "((Total_cde_5) Is Null) AND ((Total_cde_6) Is Null) AND ((Total_cde_7) Is Null)"
     
    'Vérification de la liste "NOM_REPR"
    If Not Me.NOM_REPR = "- Tous -" Then
        sWhere = sWhere & " AND NOM_REPR = " & Chr(34) & Me.NOM_REPR & Chr(34)
    End If
     
    'Vérification de la liste "Région"
    If Not Me.Région = "- Tous -" Then
        sWhere = sWhere & " AND Région =" & Chr(34) & Me.Région & Chr(34)
    End If
     
     'Vérification de la liste "Departement"
    If Not Me.Departement = "- Tous -" Then
        sWhere = sWhere & " AND Departement =" & Chr(34) & Me.Departement & Chr(34)
    End If
     
     'Vérification de la liste "Lib_Secteur_Activite"
    If Not Me.Lib_Secteur_Activite = "- Tous -" Then
        sWhere = sWhere & " AND Lib_Secteur_Activite =" & Chr(34) & Me.Lib_Secteur_Activite & Chr(34)
    End If
     
    Me.Filter = sWhere
    Me.Requery
     
    End Sub
    Un peu lourd : 100% d'accord, mais ça marche impec (et pour qq1 qui a touché au VBA pour la première fois il y a un mois, j'suis pas mécontente de moi )

    MAIS :
    mon problème est que j'ai mis des valeurs par défaut :
    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
    Option Compare Database
     
    Private Sub Form_Open(Cancel As Integer)
     
    DoCmd.Maximize
     
    'Mise par défaut de "- Tous -" dans les 4 listes déroulantes de critères
    Me.NOM_REPR = "- Tous -"
    Me.Région = "- Tous -"
    Me.Departement = "- Tous -"
    Me.Lib_Secteur_Activite = "- Tous -"
    Me.Imprimerie = "Les 2"
     
    DoCmd.ApplyFilter "Filtre_liste_prospects_general"
    Me.Requery
     
    End Sub
    Et Access ne considère pas ces choix quand la boucle qui permet de créer la ZDL tourne.
    C'est-à-dire que si en zdl1 'tous' (mis par défaut est laissé sans y toucher) alors ma liste complète en zdl2+tous n'apparait pas, je n'ai rien quand je clic sur la flèche qui ouvre la liste seulement le tous par défaut.
    Alors que si je "clic" sur le 'tous' la zdl2 apparait exactement comme je le souhaite.

    Est ce que tu vois ce que je veux dire ?

    Je voudrai faire en sorte que ce 'tous' par défaut permette sans qu'on ai besoin de cliquer dessus d'etre considéré par le filtre de la zdl2.

    précision : j'ai fait attention, il n'y a pas de fautes d'orthographe dans la construction et le rappel du 'tous'.
    mais je pense que ce pb cela peut avoir une relation avec l'évènement sur lequel j'ai fait le code de rowsource des zdl. Pour l'instant ils sont sur le changement.

    Merci de ton aide !

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 124
    Points : 12 176
    Points
    12 176
    Billets dans le blog
    5
    Par défaut
    Humm, il faut une procédure générique qui ressemble à ce que tu as déjà écrit pour chaque zone...
    D'ailleurs, tu ne devrait pas avoir à écrire 5 proc pour chacune mais bel et bien une seule qui s'adapte génériquement avec le nom du contrôle passé en paramètre.

    Bref, pour voir ton filtre, modifies ton code dans l'événement Open comme suit:
    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
    Private Sub Form_Open(Cancel As Integer)
    Const FILTRE_DEFAUT As String = "Filtre_liste_prospects_general"
    Dim oFiltre As DAO.QueryDef
     
    DoCmd.Maximize
     
    'Mise par défaut de "- Tous -" dans les 4 listes déroulantes de critères
    Me.NOM_REPR = "- Tous -"
    Me.Région = "- Tous -"
    Me.Departement = "- Tous -"
    Me.Lib_Secteur_Activite = "- Tous -"
    Me.Imprimerie = "Les 2"
     
    'Affecte l'objet QueryDefs à la requête Filtre 'FILTRE_DEFAUT'
    Set oFiltre = CurrentDb.QueryDefs(FILTRE_DEFAUT)
    'Imprime la chaîne SQL de ce filtre-requête
    Debug.Print oFiltre.SQL
    'Libère l'objet de la mémoire
    Set oFiltre = Nothing
     
    '**** Juste pour le test, on arrête ici
    '*** Appuyer sur Ctrl+G pour afficher la fenêtre de debogage
    Stop
     
    DoCmd.ApplyFilter "Filtre_liste_prospects_general"
    Me.Requery
    End Sub
    Appuie alors sur Ctrl+G... Quel est le contenu de la chaîne SQL ?

    Argy

    P.S.
    Assure que DAO 3.6 object library esr coché dans les Références du menu Outils en lieu et place de ADO 2.1.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    j'ai fait ce que tu as dit, ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT *
    FROM Recap1
    WHERE ((([Recap1].[Total_cde_5]) Is Null) And (([Recap1].[Total_cde_6]) Is Null) And (([Recap1].[Total_cde_7]) Is Null));
     
    SELECT *
    FROM Recap1
    WHERE ((([Recap1].[Total_cde_5]) Is Null) And (([Recap1].[Total_cde_6]) Is Null) And (([Recap1].[Total_cde_7]) Is Null));
    ???
    Je n'ai pas pu vérifier ce que tu avais mis en PS car je n'ai pas références d'indiqué dans le menu Outils...
    (je suis en Access 2000)

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 124
    Points : 12 176
    Points
    12 176
    Billets dans le blog
    5
    Par défaut
    Humm Ok,

    Eh bien il faut que ton RowSource soit alimenté sur l'événement click de la souris pour chaque zone. Comme ça tu auras le 'Tous' et le reste...

    C'est pour cela que je te préconise une seule et même proc qui se charge de construire ton sWhere...

    Par exemple :
    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
    Private m_strSQLRegion As String
    Private m_strSQLDepartement As String
     
    Private Sub Departement_Click()
      Call CreerConditionWhere(Me.NOM_REPR, Me.Région, Me.Departement, _
        Me.Lib_Secteur_Activite, Me.Imprimerie)
      Departement.RowSource = m_strSQLDepartement
    End Sub
     
    Private Sub Région_Click()
      Call CreerConditionWhere(Me.NOM_REPR, Me.Région, Me.Departement, _
        Me.Lib_Secteur_Activite, Me.Imprimerie)
      Région.RowSource = m_strSQLRegion
    End Sub
     
    Private Sub Région_Change()
      ''{.....}
    End Sub
     
    Private Sub CreerConditionWhere(ByVal Zdl2, ByVal Zdl3, ByVal Zdl1, _
    ByVal Zdl4,  ByVal Zdl5)
      strSQLRegion = "SELECT * FROM... UNION (SELECT " & Chr(34) & "- Tous -" _
    & Chr(34)
      m_strSQLDepartement = "SELECT DISTINCT Departement FROM Recap1...."
      'Etc etc...
    End Sub
    Tu vois où je veux en venir ?

    Argy

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    ok, on s'approche,
    Je comprends ton code, et le mien, bien que long fonctionne en l'état, je le reprendrai plus tard pour voir si je peux le réduire. Mais je garde bien dans un coin ton idée de code. Merci bien

    En fait tu me dis que de mettre le code "surclick" or justement, je souhaiterai qu'il n'y ait pas besoin de cliquer sur le 'tous' qui a été mis par défaut pour que la construction du rowsource de la zdl+1 fonctionne.En effet, comme tu l'as surement vu le rowsource de chaque zdl dépend du (des) choix effectué(s) dans les zdl situées avant.
    Mon code fonctionne très bien, MAIS il faut cliquer physiquement sur le 'tous' d'une zdl n-1 si on veut voir la liste de choix en zdl n.

    Je ne suis pas sure d'arriver à me faire comprendre clairement...

    Merci de ta patience... et de ton aide

  8. #8
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 124
    Points : 12 176
    Points
    12 176
    Billets dans le blog
    5
    Par défaut
    Eh bien dans ce cas, tu n'a pas le choix...
    Il te faut créer cette satanée procédure générique et l'appeler depuis l'événement Form_Load()
    Tes listes seront rafraîchies comme tu l'entends...
    Si tu ne veux pas créer cette procédure de suite alors tu peux trichoter en codant comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_Load()
        Call Région_Change()
        Call Dept_Change()
    Etc...
     
    End Sub
    Argy

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Salut Argy,

    plus haut dans la conversation tu m'avais donné un code.
    En fait je crois que je n'ai pas trop compris comment il fonctionne surtout notamment cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Departement_Click()
      Call CreerConditionWhere(Me.NOM_REPR, Me.Région, Me.Departement, _
        Me.Lib_Secteur_Activite, Me.Imprimerie)
      Departement.RowSource = m_strSQLDepartement
    End Sub
    Enfin c'est surtout la ligne avec la fonction Call (je ne la connaissais pas), je comprend qu'elle sert à 'appeler' CreerConditionWhere, mais je ne vois pas comment elle fonctionne...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CreerConditionWhere(ByVal Zdl2, ByVal Zdl3, ByVal Zdl1, _
    ByVal Zdl4,  ByVal Zdl5)
      strSQLRegion = "SELECT * FROM... UNION (SELECT " & Chr(34) & "- Tous -" _
    & Chr(34)
      m_strSQLDepartement = "SELECT DISTINCT Departement FROM Recap1...."
      'Etc etc...
    End Sub
    Et ici c'est le 'ByVal' que je ne saisis pas. En effet, les 'tous' dans mes listes sont rajoutés génériquement par la requête union. Ils sont mis par défaut dans les listes à l'ouverture du formulaire mais n'est pas défini (au moment de l'ouverture) ce à quoi ils correspondent (l'ensemble des valeurs de la liste) alors le ByVal risque de ne pas comprendre quand un 'tous' est sélectionné...? Non ? (c'est pour cela que j'avais mis les différents "If" qui me permettaient de dire au programme quoi faire lorsqu'il tombe sur un 'tous' sélectionné).

    Je suis désolée de toutes ces questions, mais j'ai besoin de comprendre pour pouvoir utiliser/ré-utiliser ce code. Sinon je ne vais jamais arriver à le faire fonctionner...

    J'espère que je ne suis pas trop confuse...
    Merci de ton aide

  10. #10
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 124
    Points : 12 176
    Points
    12 176
    Billets dans le blog
    5
    Par défaut
    En fait, CreerConditionWhere() n'est qu'un exemple incomplet...
    Le ByVal/ByRef (Par valeur - Par référence) dans ton cas n'a pas d'importance. C'est une méthode de passage de paramètre et même si tu omets ce mot clé (Ce sera alors du ByRef) , la procédure sera opérationnelle.

    L'objectif de la procédure générique est qu'elle permet d'être facilement maintenable et de plus, tu n'en as qu'un et pas 5 comme c'est le cas pour toi.

    Donc tu fais une synthèse de ce que tu as besoin dans chaque liste au moment du chargement et tu construits ta procédure en conséquence.
    Dans le Form_Load() tu appelles cette procédure (Call est facultatif) et tu initialises tes listes avec le mot "Tous".

    Il te faudrait aussi (dans l'idéal) une autre procédure générique qui elle rafraîchit les ZDL en fonction de ce qui est sélectionnée dans l'une ou l'autre liste...

    Voici une structure "hautement inspirative"...
    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
    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
    Option Compare Database
    Option Explicit
     
    'Variables de changement des liste
    Private m_blnZ1Change As Boolean
    Private m_blnZ2Change As Boolean
    Private m_blnZ3Change As Boolean
    Private m_blnZ4Change As Boolean
    Private m_blnZ5Change As Boolean
    'Variables de valeurs des liste
    Private m_strZ1Valeur As String
    Private m_strZ2Valeur As String
    Private m_strZ3Valeur As String
    Private m_strZ4Valeur As String
    Private m_strZ5Valeur As String
     
    Private Sub Form_Load()
      Call RemplirListes
      zdl1 = "Toutes"
      zdl2 = "Toutes"
      zdl3 = "Toutes"
      zdl4 = "Toutes"
      zdl5 = "Tous"
    End Sub
     
    Private Sub RemplirListes()
      zdl1.RowSource = "SELECT DISTINCT Departement FROM Recap1 UNION SELECT " & _
        Chr(34) & "- Tous -" & Chr(34) & " AS Departement FROM Recap1);"
      zdl2.RowSource = "SELECT DISTINCT ... UNION"
      zdl3.RowSource = "SELECT DISTINCT ... UNION"
      zdl4.RowSource = "SELECT DISTINCT ... UNION"
      zdl5.RowSource = "SELECT DISTINCT ... UNION"
     
    End Sub
     
    Private Sub RafraichirListe(Z1Change As Boolean, Z2Change As Boolean, Z3Change _
      As Boolean, Z4Change As Boolean, Z5Change As Boolean, m_strZ1Valeur As String, _
      m_strZ2Valeur As String, m_strZ3Valeur As String, m_strZ4Valeur As String, _
      m_strZ5Valeur As String)
      If Z1Change Then
        zdl1.RowSource = _
          "SELECT DISTINCT Departement FROM Recap1 ... WHERE LeChamp = " & _
          m_strZ1Valeur & " ... UNION SELECT " & Chr(34) & "- Tous -" & Chr(34) & _
          " AS Departement FROM Recap1);"
      Else
        zdl1.RowSource = "SELECT DISTINCT Departement FROM Recap1 UNION SELECT " & _
          Chr(34) & "- Tous -" & Chr(34) & " AS Departement FROM Recap1);"
      End If
      If Z2Change Then
        zdl2.RowSource = "SELECT DISTINCT ... WHERE LeChamp = " & m_strZ2Valeur & _
          " ... UNION"
      Else
        zdl2.RowSource = "SELECT DISTINCT Champs... FROM Table UNION SELECT " & _
          Chr(34) & "- Tous -" & Chr(34) & " AS ...."
      End If
      '''Etc...
    End Sub
     
    Private Sub zdl1_Change()
      m_blnZ1Change = True
      m_strZ1Valeur = Me!zdl1
      Call RafraichirListe(True, False, False, False, False, m_strZ1Valeur, _
        m_strZ2Valeur, m_strZ3Valeur, m_strZ4Valeur, m_strZ5Valeur)
      m_blnZ1Change = False
    End Sub
     
    Private Sub zdl2_Change()
      m_blnZ2Change = True
      m_strZ2Valeur = Me!zdl1
      Call RafraichirListe(False, True, False, False, False, m_strZ1Valeur, _
        m_strZ2Valeur, m_strZ3Valeur, m_strZ4Valeur, m_strZ5Valeur)
      m_blnZ2Change = False
    End Sub
     
    Private Sub zdl3_Change()
      m_blnZ3Change = True
      m_strZ3Valeur = Me!zdl1
      Call RafraichirListe(False, False, True, False, False, m_strZ1Valeur, _
        m_strZ2Valeur, m_strZ3Valeur, m_strZ4Valeur, m_strZ5Valeur)
      m_blnZ3Change = False
    End Sub
     
    Private Sub zdl4_Change()
      m_blnZ4Change = True
      m_strZ4Valeur = Me!zdl1
      Call RafraichirListe(False, False, False, True, False, m_strZ1Valeur, _
        m_strZ2Valeur, m_strZ3Valeur, m_strZ4Valeur, m_strZ5Valeur)
      m_blnZ4Change = False
    End Sub
     
    Private Sub zdl5_Change()
      m_blnZ5Change = True
      m_strZ5Valeur = Me!zdl1
      Call RafraichirListe(False, False, False, False, True, m_strZ1Valeur, _
        m_strZ2Valeur, m_strZ3Valeur, m_strZ4Valeur, m_strZ5Valeur)
      m_blnZ5Change = False
    End Sub
    à peaufiner...

    Argy

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Salut Argy,

    Merci encore beaucoup de ton aide et de tes explications, je vais travailler là dessus !!

    Marie

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

Discussions similaires

  1. Réponses: 52
    Dernier message: 30/07/2015, 22h23
  2. insérer des lignes par rapport a une valeur dans la ligne au-dessus
    Par samihichem dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/05/2015, 09h08
  3. Mise en couleur d'une valeur dans un crosstab
    Par sfoggy dans le forum BIRT
    Réponses: 4
    Dernier message: 16/02/2010, 15h59
  4. Comment ajouter par défaut une valeur dans un champ?
    Par zouloute dans le forum Access
    Réponses: 2
    Dernier message: 04/03/2008, 07h53
  5. Réponses: 2
    Dernier message: 23/05/2007, 14h05

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