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 :

Sélection sur plusieurs listes déroulantes dans un bouton


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Points : 41
    Points
    41
    Par défaut Sélection sur plusieurs listes déroulantes dans un bouton
    Bonjour,

    J'imagine que ma question n'est pas très compliquée mais bon...chaque cas étant particulier...
    Alors je suis en train de créer un formulaire de consultation permettant de faire des sélections sur une seule table mais à partir de différentes listes déroulantes portant sur différents champs.
    J'ai trouvé un bout de code dans un des didacticiels mais quand je clique sur mon bouton "Rechercher", je n'arrive pas à cumuler les critères...un seul choix dans la liste déroulante est pris en compte.

    Je voudrais donc savoir comment je pourrai faire pour que tous les critères de mes listes déroulantes soient pris en compte, dans n'importe quel ordre. Je vous mets mon bout de code provisoire...

    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
    Private Sub CmdFiltre_Click()
     
    'Déclaration de variable
    f = ""
     
    If Not IsNull(Me.Rjour) And Me.Rjour <> "" Then
    If f <> "" Then
    f = f & " AND Jsem = """ & Me.Rjour & """"
    Else
    f = "Jsem = """ & Me.Rjour & """"
    End If
     
    If Not IsNull(Me.Radresse) And Me.Radresse <> "" Then
    f = "Adresse LIKE ""*" & Me.Radresse & "*"""
    End If
     
    End If
    Me.Filter = f
    Me.FilterOn = True
     
    End Sub
    Je vous remercie pour vos éclaircissements.
    Bonne journée

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    pour le deuxième critère tu oublies de le concaténer avec le contenu de la variable f.
    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
    Private Sub CmdFiltre_Click()
     'Déclaration de variable
     Dim f As String
     
    f = ""
     
    If Nz(Me.Rjour, "") <> "" Then
       If f <> "" Then f = f & " AND "
       f = f & "Jsem = """ & Me.Rjour & """"
    End If
     
    If Nz(Me.Radresse, "") <> "" Then
       If f <> "" Then f = f & " AND "
       f = f & "Adresse LIKE ""*" & Me.Radresse & "*"""
    End If
     
    Me.Filter = f
    Me.FilterOn = True
     
    End Sub
    Pour chaque critère, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       If f <> "" Then f = f & " AND "
    ajoute " AND " si f n'est pas vide.

    Ensuite on concatène le critère
    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Je débute en VB et donc je comprends pas tout ce que tu as écris...

    Notamment le Nz après le if.
    De plus, à quoi sert de déclarer la variable f en chaine de caractère ? C'est pour être plus juste ?

    Sinon, merci pour les explications. Je vais essayer de suite.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Points : 41
    Points
    41
    Par défaut
    Je viens de tester...
    Bon déjà çà marche mieux en effet, car les 2 paramètres sont pris en compte...mais uniquement si je choisis en premier le paramètre dans la liste Rjour...

    Ce que j'aimerais réaliser, c'est que l'utilisateur puisse choisir dans l'ordre qu'il veut le contenu de ses listes déroulantes. Est-ce possible ?

    J'espère avoir été assez clair dans mes explications. N'hésitez pas si je suis trop confus.

    Merci

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,
    en fait que souhaites-tu faire vraiment ?
    Le code que LedZep a donné permet de cumuler les critères au moment du click sur le bouton.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Points : 41
    Points
    41
    Par défaut
    Salut,

    Ben en fait, je souhaite que dans un formulaire, l'utilisateur puisse sélectionner des infos (choix entre différentes listes déroulantes), qu'il sélectionne ses paramètres dans l'ordre qu'il veut (en sachant que certaines listes peuvent ne pas être interrogées).

    Donc au final, quand on clique sur le bouton, le résultat s'affiche dans le bas de la page sous forme de tableau (dans ce tableau, les champs sont pré-sélectionnés).

    Je sais, çà fait pas mal de conditions mais je pense que çà doit être faisable. Pour info, j'ai mis un extrait de ma table en pièce jointe dans ce post : http://www.developpez.net/forums/d72...-consultation/

    Je vous remercie pour votre aide.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Je ne comprends pas, la seule condition pour que le cumul ne s'opère pas quelque soit l'ordre; c'est que l'un des contrôles est vidé après le click sur le bouton d'application du filtre.
    L'idée peut être de conserver chacun des filtres dans une variable, ou au lieu de vider le filtre par cette ligne :
    de récupérer le filtre préalablement appliqué et de travailler dessus

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Points : 41
    Points
    41
    Par défaut
    Je ne vois pas ce que tu veux dire...

    Je vais tenter de ré-expliquer mon problème.
    J'ai donc une table, avec beaucoup de champs. J'ai créé un formulaire qui devrait permettre à l'utilisateur de faire des choix sur ces champs. Pour celà, j'ai donc fait des listes déroulantes, ce qui facilite le choix de l'utilisateur.

    Au final, l'utilisateur aura une dizaine de listes déroulantes. Chacune des listes correspond à une requête sur un champ. Par exemple, il pourra choisir le jour, l'adresse, la catégorie de véhicules...

    Ce que je cherche à faire, c'est que l'utilisateur puisse utiliser ces listes déroulantes. Il peut toutes les interroger, ou bien il peut en laisser quelques unes (donc sans les interroger).
    Il peut également les interroger dans l'ordre qu'il veut, parce que jusqu'à maintenant, le bouton de sélection fonctionne uniquement si l'on interroge la première liste interrogée dans le code. Le code de Ledzep permet donc de cumuler les critères mais çà marche seulement si je sélectionne la première liste en premier (Rjour).

    Je mets un extrait de ce formulaire en pièce jointe. Merci de votre aide. Bonne soirée

  9. #9
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Tes zones de listes modifiables ont une valeur par défaut : "- - Choisir - -"
    Du coup tu filtres sur Jsem = "- - Choisir - -" si tu ne fais aucune sélection.
    Cela fait trois cas, pour lesquels la zone de liste ne doit pas être utilisée pour fitrer :
    • Null
    • ""
    • "- - Choisir - -"


    Il faut remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Nz(Me.Rjour, "") <> "" Then
       If f <> "" Then f = f & " AND "
       f = f & "Jsem = """ & Me.Rjour & """"
    End If
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Nz(Me.Rjour, "") <> "" And Nz(Me.Rjour, "") <> "- - Choisir - -" Then
       If f <> "" Then f = f & " AND "
       f = f & "Jsem = """ & Me.Rjour & """"
    End If
    La fonction Nz(arg1, arg2) renvoie le premier argument s'il n'est pas Null, sinon (premier argument Null) elle renvoie le deuxième argument.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Nz(Me.Rjour, "") <> "" ...
    Traite à la fois Null et ""

    A+

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,
    Razorback,
    tu devrais relire le code que tu as et celui qui t'a été donné.
    voilà ce que tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Nz(Me.Radresse, "") <> "" Then
       f = f & "Adresse LIKE ""*" & Me.Radresse & "*"""
    End If
    et voilà ce qui permet de cumuler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    If Nz(Me.Radresse, "") <> "" Then
       If f <> "" Then f = f & " AND "   '<= ajout du AND pour le cumul
       f = f & "Adresse LIKE ""*" & Me.Radresse & "*"""
    End If

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Tout d'abord, désolé pour ma réponse tardive mais je n'ai pas eu accès à internet ces deux derniers jours...ensuite, merci beaucoup pour vos réponses, cela fonctionne bien à présent.

    En effet, les sélections sur les listes déroulantes basées sur du texte fonctionne bien.
    Cependant, je dispose également de listes déroulantes basées sur des chiffres, et j'obtiens une erreur lorsque je clique sur mon bouton. Je pense que çà doit venir de la variable f que l'on a défini comme string.
    Pour remédier à mon problème, je me demandais si je devais créer une 2e variable de type integer, et l'insérer dans mon code pour ces listes spécifiques ?

    Je vous remercie

  12. #12
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    J'ai ré-écrit le code un peu différemment.
    Je passe par une variable (String) intermédiaire dans laquelle je met la valeur du contrôle.
    C'est la variable strVal.
    La valeur d'une zone de liste indépendante est de type String, sauf si "colonne liée" = 0, mais ce n'est pas ton cas.
    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
    Private Sub CmdFiltre_Click()
    'Déclaration de variables
     Dim f As String, strVal As String
     
    f = ""
     
    ' Contrôle Rjour        Champ Jsem (Texte)
    strVal = Nz(Me.Rjour, "")
    If strVal <> "" And strVal <> "- - Choisir - -" Then
       If f <> "" Then f = f & " AND "
       f = f & "Jsem = """ & strVal & """"
    End If
     
    ' Contrôle Radresse     Champ Adresse (Texte)
    strVal = Nz(Me.Radresse, "")
    If strVal <> "" And strVal <> "- - Choisir - -" Then
       If f <> "" Then f = f & " AND "
       f = f & "Adresse LIKE ""*" & strVal & "*"""
    End If
     
    ' Contrôle Rnbvehic     Champ Nveh (Nombre Entier)
    strVal = Nz(Me.Rnbvehic, "")
    If strVal <> "" And strVal <> "- - Choisir - -" Then
       If f <> "" Then f = f & " AND "
       f = f & "Nveh = " & strVal
    End If
     
    Me.Filter = f
    Me.FilterOn = True
     
    End Sub
    Le troisième critère porte sur le champ Nveh qui est numérique.
    Je suppose qu'il s'agit toujours de nombres entiers (bien que le champ soit de type Réel double).
    Tu vois la différence ?

    Champ texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       f = f & "NomChamp = """ & strVal & """"
    Champ numérique Entier long
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       f = f & "NomChamp = " & strVal
    Si le champ contient des nombres avec décimales, on s'assure avec la fonction Replace, que "," est remlacé par "." :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    strVal = Replace(Nz(Me.Rnbvehic, ""), ",", ".")
    If strVal <> "" And strVal <> "- - Choisir - -" Then
       If f <> "" Then f = f & " AND "
       f = f & "Nveh = " & strVal
    End If
    A+

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Points : 41
    Points
    41
    Par défaut
    Salut,

    Et désolé pour mon retard.
    Alors j'ai testé le code et çà fonctionne. Je te remercie.
    Mais j'ai encore quelques petites interrogations...

    Je ne connais pas la différence entre réel double et entier...
    De plus, et je crois que c'est super important pour la compréhension : je ne comprends pas comment se détermine le nombre de guillemets...

    par exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f = f & "NomChamp = """ & strVal & """"
    : pourquoi y a t-il 3 guillemets après le nom du champ et 4 après le &... ?

    Merci de m'éclairer là-dessus.

    Ensuite, j'ai encore quelques listes déroulantes que je n'arrive pas à interroger, notamment celles sur des dates et sur des calculs (requêtes)...

    En effet, j'ai un champ "date" au format jj/mm/aaaa et je voudrais par exemple faire une interrogation sur l'année 2002 en particulier...ou sur un mois particulier. Idem pour un champ heure...et là, c'est plus compliqué...je voudrais faire une interrogation par tranche horaire...je sais pas si c'est possible ?

    En tout cas, merci énormément pour ton aide. Bonne soirée

  14. #14
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Le doublement des guillements doubles (") vient de la syntaxe de Visual Basic, en ce qui concerne les chaînes de caractères.
    Une chaîne de caractères Visual Basic est délimitée par un guillemet double à gauche et un guillemet double à droite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaVariableTexte = "Ceci est une chaîne de caractères"
    Le contenu de la variable MaVariableTexte est le texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ceci est une chaîne de caractères
    Si je veux affecter à cette variable le texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ceci est une "chaîne" de caractères
    j'ai un soucis car ce texte contient des guillemets doubles.
    Je ne peux donc pas écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaVariableTexte = "Ceci est une "chaîne" de caractères"
    Ce cas est prévu dans Visual Basic. Pour inclure des caractères guillemets doubles dans une chaîne de caractères, il faut les doubler.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaVariableTexte = "Ceci est une ""chaîne"" de caractères"
    L'expression Visual Basic ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "NomChamp = """ & strVal & """"
    donne le texte suivant si strVal contient le texte ABC :
    J'ai mis en violet les " qui délimitent les chaînes de caractères. Ce sont des délimiteurs Visual Basic.
    J'ai laissé en rouge les guillemets doubles qui ont été doublés. Ce sont des caractères faisant partie de la chaîne.

    Pourquoi veut-on obtenir
    Parce que c'est l'expression d'un critère sur le champ NomChamp et qu'il est de type texte. Donc on encadre le texte ABC avec des délimiteurs.
    Le SQL d'Access reconnait le guillemet double comme délimiteur de chaîne de caractères.
    Il reconnait également le guillemet simple (').
    On peut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    f = f & "NomChamp = """ & strVal & """"   ' NomChamp = "ABC"
    ' ou
    f = f & "NomChamp = '" & strVal & "'"     ' NomChamp = 'ABC'
    Enfin, s'il y a un risque que le délimiteur se trouve dans strVal, on le double avec la fonction Replace.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    f = f & "NomChamp = """ & Replace(strVal, """", """""") & """"   ' NomChamp = "A""BC" si strVal contient A"BC
    ' ou
    f = f & "NomChamp = '" & Replace(strVal, "'", "''") & "'"        ' NomChamp = 'A''BC' si strVal contient A'BC
    Pour tes sélections sur les dates, tu ne souhaites qu'une partie de la date.
    Il faudra construire un critère qui compare une partie, extraite du champ date, à une valeur.
    Exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Year(champDate) = 2002
    Month(champDate) = 10
    Ce lien devrait t'aider : Les Fonctions Date/Heure en VBA

    Exemple de critère sur une tranche horaire, à l'aide d'une fonction d'extraction date/heure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Heure(champHeure) Between 8 And 12
    Heure de mon champ champHeure compris entre 8 et 12.

    A+

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Et un grand merci pour ces explications. J'y vois plus clair désormais.

    Pour mes dates, j'ai donc essayé quelques trucs dans ma liste déroulante. Tout d'abord, j'ai créé une requête afin d'obtenir uniquement les enregistrements de l'année 2002.

    J'ai donc fait dans le mode SQL :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Total.Date
    FROM Total
    WHERE Year (Date) = 2002;

    J'obtiens donc tous mes enregistrements de 2002.
    J'ai donc voulu avoir uniquement l'année 2002 en faisant un GROUP BY (group BY Year (Date)) mais une erreur apparait.

    Je comptais faire ceci afin d'avoir le choix entre les années dans ma liste. Dans cette liste, de cette façon, quand on clique sur 2002, la sélection se fait uniquement sur les enregistrements de 2002, et ainsi de suite...

    Je ne comprends pas mon erreur. Est-ce possible de faire ce que je souhaite ?
    Je pense que çà recoupera avec les sélections sur les mois et les heures...

    Merci encore. A +

  16. #16
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Comme Date est mot-clé ça peut poser un problème.
    Pour faire comprendre au moteur de base de données qu'il s'agit d'un champ, il faut l'encadrer avec des crochets droits.

    Cette requête fonctionne chez moi :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Year([Date]) AS Année
    FROM Total
    GROUP BY Year([Date])
    ORDER BY  Year([Date]);
    A+

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Points : 41
    Points
    41
    Par défaut
    Salut,

    Merci pour cette info. C'était bien çà l'erreur. A moi de faire attention pour la prochaine fois de ne pas employer de mots clés Access...

    J'ai donc procédé de la même façon pour les mois, et j'obtiens donc une liste avec le mois 1, 2...jusqu'à 12...
    Mais comment faire pour faire apparaitre le nom des mois au lieu de leur numéro. Autrement dit, le mois 1 = Janvier...etc
    Dois-je créer une nouvelle colonne avec les noms de mois ? Et comment spécifier que le 1 = Janvier ?

    Et enfin, je désire également permettre à mon utilisateur de choisir un jour en particulier. J'ai donc créé une zone de texte avec un masque de saisie (afin d'empêcher les erreurs de format) de type __/__/____
    Comment faire en sorte que quand il clique sur le bouton après avoir spécifier une date, la recherche se fasse automatiquement...?

    Je vous remercie encore. Bonne journée

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Points : 41
    Points
    41
    Par défaut
    Re,

    Ah...en fait, petit problème pour mes sélections sur le bouton Rechercher...

    J'emploie le même code que pour les autres listes et donc étant donné que le champ est de type Date, il faut peut-être que je modifie quelque chose...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' SELETION DE L'ANNEE
    'strVal = Nz(Me.RAnnee, "")
    'If strVal <> "" And strVal <> "- - Choisir - -" Then
    '   If f <> "" Then f = f & " AND "
    '   f = f & "Date = " & strVal
    'End If
    Dans l'état actuel des choses, si je clique en ayant sélectionné l'année 2002, je n'obtiens aucun résultat...et la case avec la liste déroulante des mois se remplit de # si je ne sélectionne pas de mois...

    Je sais pas si je suis clair dans mes explications...

    Merci pour votre aide

  19. #19
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Pour la date complète
    Avec un contrôle zone de texte nommé txtDate.
    Masque de saisie : 00/00/0000;0
    Le ;0 c'est pour que les caractères / soient conservés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' Contrôle txtDate
    strVal = Nz(Me.txtDate, "")
    If strVal <> "" And IsDate(strVal) Then
       If f <> "" Then f = f & " AND "
       f = f & "[Date]=#" & Format(CDate(strVal), "mm\/dd\/yyyy") & "#"
    End If
    On récupère le texte de la zone de texte dans la variable strVal.
    Si la zone de texte est vide, Null est remplacé par une chaîne vide grâce à Nz.
    On vérifie que la variable strVal ne contient pas une chaîne vide et que sont contenu peut être convertit en type Date.
    En SQL un critère sur une date s'écrit
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    champDate = #mois/jours/année#
    C'est pour cette raison que je convertit strVal en date avec la fonction CDate, puis que je reconvertis en texte avec la fonction Format.

    Critère sur l'année

    Contenu de la zone de liste modifiable Rannee
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CStr(Year([Date])) AS Année FROM Total GROUP BY Year([Date]) ORDER BY Year([Date]);

    J'ai ajouté CStr(..) pour convertir en texte.
    Sinon la valeur de la colonne de l'instruction SELECT est numérique et la valeur par défaut (- - Choisir - -) de type texte.
    D'où les ##########

    Maintenant le code à mettre pour filtrer sur l'année :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' Contrôle Rannee
    strVal = Nz(Me.RAnnee, "")
    If strVal <> "" And strVal <> "- - Choisir - -" Then
       If f <> "" Then f = f & " AND "
       f = f & "Year([Date])=" & strVal
    End If
    Critère sur le mois

    Contenu de la zone de liste modifiable Rmois
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Format([Date],"mmmm") AS Mois, Month([Date]) AS NumMois FROM Total GROUP BY Format([Date],"mmmm"), Month([Date]) ORDER BY Month([Date]);
    Nbre de colonnes = 2
    Largeurs colonnes : 2,547cm;0cm
    Colonne liée = 1
    Limiter à la liste = Non
    Valeur par défaut = "- - Choisir - -"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' Contrôle Rmois
    strVal = Nz(Me.Rmois.Column(1), "")
    If strVal <> "" And strVal <> "- - Choisir - -" Then
       If f <> "" Then f = f & " AND "
       f = f & "Month([Date])=" & strVal
    End If
    Me.Rmois.Column(1) correspond à la deuxième colonne, Month([Date]).

    A+

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Désolé pour le retard et merci beaucoup LedZepII pour tes explications. Ça fait plaisir d'avoir de l'aide...

    J'ai donc adopté tes codes et çà fonctionne bien.
    On en vient presque au bout...

    Il me reste donc 2 critères que je n'arrive pas à régler. Un sur une sélection des tranches horaire (mais j'ai ouvert un autre post là dessus et çà avance tout doucement) et un sur l'âge des accidentés.

    En effet, j'aimerais que l'utilisateur puisse sélectionner une tranche d'âge.
    Je dispose d'une colonne Age dans ma table et je voudrais donc faire des classes en gros. Par exemple, que l'utilisateur puisse sélectionner les personnes ayant entre 15 et 18 ans...

    Ensuite, je pense que le plus simple serait de ne pas faire de liste déroulante car ceci réduirait les possibilités. Mais que l'utilisateur puisse lui même écrire les tranches dans 2 textbox.

    Je pense que c'est le plus efficace mais peut-être avez vous une meilleure idée...Comme je vous le répète souvent, je suis preneur de tout bon conseil.

    Je vous remercie encore et vous souhaite une bonne journée

Discussions similaires

  1. Requête sur plusieurs listes déroulantes
    Par Olivierporcinet dans le forum Access
    Réponses: 3
    Dernier message: 07/05/2012, 09h50
  2. Liste déroulante dans cellule. Bouton n'apparait pas
    Par pat91 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/05/2010, 16h23
  3. Liste déroulante dans cellule. Bouton n'apparait pas
    Par JML62400 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/02/2009, 06h44
  4. [MySQL] Faire apparaître la sélection d'une liste déroulante dans une zone de texte
    Par emmy99 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 30/03/2008, 14h11
  5. Réponses: 2
    Dernier message: 15/02/2008, 14h48

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