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 :

Probleme Code source & Recherche Par des options dates et list view


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 53
    Points : 28
    Points
    28
    Par défaut Probleme Code source & Recherche Par des options dates et list view
    Bonjour,
    encore une autre fois et suite de la dernière problème (dernière discussion) qui j'ai,
    je veux chercher les données et l'afficher dans la list selon le choix de date.
    une image ci_joint relative à mon formulaire.

    Merci d'avance

    Voici le code qui j’essaye de faire:

    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
    'Filtrer
     
     
    Private Sub Filtrer_Selection_Click()
    Call GroupeDate_AfterUpdate
     Dim SQL As String
     
     'Filtre [Jour]-----
     If (Me.DTPicker_Day.Value = True) Then
        SQL = SQL & "And
    [Liste_Produit]!Date_Releve=#" & Format(DTPicker_Day.Value, "MM/dd/yyyy") & "# " & "Order by [Date_Releve] DESC;"
     
     'Filtre [Mois]-----
     ElseIf (Me.DTPicker_Month.Value = True) Then
        SQL = SQL & "And
    [Liste_Produit]!Date_Releve=#" & Format(DTPicker_Month.Value, "MMMM yyyy") & "# " & "Order by [Date_Releve] DESC ;"
     
     
    'Filtre [Année]-----
     
     ElseIf Me.DTPicker_year.Value = True Then
        SQL = SQL & "And
    [Liste_Produit]!Date_Releve=#" & Format(DTPicker_year.Value, "yyyy") & "# " & "Order by [Date_Releve] DESC ;"
     
     
      'Filtre [user]---------
     
      ElseIf Me.DTPicker_user11.Value < Me.DTPicker_user12 Then
      SQL = SQL & "And
    [Liste_Produit]!Date_Releve between #" & Format(DTPicker_user11.Value, "MM/dd/yyyy") & "# and #" & Format(DTPicker_user12.Value, "MM/dd/yyyy") & "# " & "Order by [Date_Releve] DESC ;"
     
     ElseIf Me.DTPicker_user11.Value > Me.DTPicker_user12 Then
     SQL = SQL & "And
    [Liste_Produit]!Date_Releve between #" & Format(DTPicker_user12.Value, "MM/dd/yyyy") & "# and #" & Format(DTPicker_user11.Value, "MM/dd/yyyy") & "# " & "Order by [Date_Releve] DESC ;"
     
     
    Me.lstProduit.RowSource = SQL
    Me.lstProduit.Requery
    End If
    End Sub
     
    'Liste des options
    Private Sub GroupeDate_AfterUpdate()
    Select Case GroupeDate
           Case 1
                    Me.DTPicker_Day.Visible = True
                    Me.DTPicker_Month.Visible = False
                    Me.DTPicker_year.Visible = False
                    Me.DTPicker_user11.Visible = False
                    'Me.DTPicker_user12.Visible = False
     
     
           Case 2
                    Me.DTPicker_Day.Visible = False
                    Me.DTPicker_Month.Visible = True
                    Me.DTPicker_year.Visible = False
                    Me.DTPicker_user11.Visible = False
                   ' Me.DTPicker_user12.Visible = False
           Case 3
                    Me.DTPicker_Day.Visible = False
                    Me.DTPicker_Month.Visible = False
                    Me.DTPicker_year.Visible = True
                    Me.DTPicker_user11.Visible = False
                   ' Me.DTPicker_user12.Visible = False
           Case 4
                    Me.DTPicker_Day.Visible = False
                    Me.DTPicker_Month.Visible = False
                    Me.DTPicker_year.Visible = False
                    Me.DTPicker_user11.Visible = True
     
                    'And Me.DTPicker_user12.Visible = True
     
    End Select
    End Sub
    Images attachées Images attachées  

  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,

    Voila comment j'écrirai la sub Filtrer_Selection_Click :
    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
    Private Sub Filtrer_Selection_Click()
    Dim SQL As String
    Dim dtDateMin As Date, dtDateMax as Date
     
    Call GroupeDate_AfterUpdate
     
    ' **** ici il faut initialiser SQL ****
    SQL = "SELECT ... FROM 
    [Liste_Produit] WHERE (1=1) "
     
    'Filtre [Jour]-----
    If (Me.DTPicker_Day.Value = True) Then
       SQL = SQL & " And 
    [Liste_Produit].[Date_Releve]=#" & Format(DTPicker_Day.Value, "mm/dd/yyyy") & "#"
     
    'Filtre [Mois]-----
    ElseIf (Me.DTPicker_Month.Value = True) Then
       dtDateMin = DateSerial(Year(DTPicker_Month.Value), Month(DTPicker_Month.Value), 1)
       dtDateMax = DateAdd("m", 1, dtDateMin) - 1
       SQL = SQL & " And 
    [Liste_Produit].[Date_Releve] between #" & Format(dtDateMin, "mm/dd/yyyy") & "#" & _
                                                      " And #" & Format(dtDateMax, "mm/dd/yyyy") & "#"
     
    'Filtre [Année]-----
    ElseIf Me.DTPicker_year.Value = True Then
       dtDateMin = DateSerial(Year(Me.DTPicker_year.Value), 1, 1)
       dtDateMax = DateSerial(Year(Me.DTPicker_year.Value), 12, 31)
       SQL = SQL & " And 
    [Liste_Produit].[Date_Releve] between #" & Format(dtDateMin, "mm/dd/yyyy") & "#" & _
                                                      " And #" & Format(dtDateMax, "mm/dd/yyyy") & "#"
     
    'Filtre [user]---------
    ElseIf Me.DTPicker_user11.Value < Me.DTPicker_user12 Then
       dtDateMin = Me.DTPicker_user11.Value
       dtDateMax = Me.DTPicker_user12.Value
       SQL = SQL & " And 
    [Liste_Produit].[Date_Releve] between #" & Format(dtDateMin, "mm/dd/yyyy") & "#" & _
                                                      " And #" & Format(dtDateMax, "mm/dd/yyyy") & "#"
     
    'Filtre [user]---------
    ElseIf Me.DTPicker_user11.Value > Me.DTPicker_user12 Then
       dtDateMin = Me.DTPicker_user12.Value
       dtDateMax = Me.DTPicker_user11.Value
       SQL = SQL & "And [Liste_Produit].[Date_Releve] between #" & Format(dtDateMin, "mm/dd/yyyy") & "#" & _
                                                      " And #" & Format(dtDateMax, "mm/dd/yyyy") & "#"
     
    End If
     
    ' Ajout clause ORDER BY
    SQL = SQL & " Order by [Date_Releve] DESC;"
     
    Me.lstProduit.RowSource = SQL
    Me.lstProduit.Requery
    End Sub
    Le problème majeur que j'ai relevé c'est quel SQL n'est pas initialié.
    Ça correspond à ces lignes que j'ai ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ' **** ici il faut initialiser SQL ****
    SQL = "SELECT ... FROM 
    [Liste_Produit] WHERE (1=1) "
    Il faut que tu mettes le SQL de ta requête (SELECT Champ1, Champ2[, ...] FROM NomTable WHERE (une condition toujours vraie))

    A+

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    rebonjour,

    Merci pour votre intéressement.

    J'ai essayé d'initialisé SQL comme ça:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQL = "SELECT [Liste_Produit].[Date_Releve], [Liste_Produit].[Num_produit_Frais], [Liste_Produit].[Designation_ar], [Liste_Produit].[Nom_Type_Produit_ar], [Liste_Produit].[APPORT], [Liste_Produit].[Prix_Min], [Liste_Produit].[Prix_Fréq], [Liste_Produit].[Prix_Max] FROM Liste_Produit ORDER BY [Date_Releve] DESC; "
    le problème que j'ai pas compri les deux date qui vous avez déclarer !!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim dtDateMin As Date, dtDateMax as Date
    les problèmes après correction:

    1: la liste n'ai pas filtrée et lorsque je click sur le bouton Filtrer après le choix d'option les données de la liste disparu
    2: lors de la deuxième choix d'option il m'affiche tous les contrôles dates en cet format malgré qui j'ai initialisé tous ces contrôle:

  4. #4
    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
    Pour le SQL ça ne va pas.
    Il faut un WHERE et il ne faut pas de ORDER BY.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL = "SELECT 
    [Liste_Produit].[Date_Releve], [Liste_Produit].[Num_produit_Frais], [Liste_Produit].[Designation_ar], [Liste_Produit].[Nom_Type_Produit_ar], [Liste_Produit].[APPORT], [Liste_Produit].[Prix_Min], [Liste_Produit].[Prix_Fréq], [Liste_Produit].[Prix_Max]"
    SQL = SQL & " FROM Liste_Produit"
    SQL = SQL & " WHERE (([Liste_Produit].[Num_produit_Frais]) Is Not Null) "
    Remarque : j'ai décomposé en trois lignes pour plus de lisibilité.
    1er ligne = ligne pour SELECT
    2e ligne = ligne pour FROM
    3e ligne = ligne pour WHERE

    Quand la liste est vide ça peut vouloir dire au moins deux choses:
    • Aucun enregistrement ne correspond au critères du WHERE
      ou
    • Le SQL est incorrect


    A+

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    ci_joint la base de données.

    le problème encore il es là
    lorsque je click sur l'option par exemple "JOUR" et je précise le jour au contrôle date et je click sur filtrer il m'affiche la liste comme il es dés le debut

    merci de m'aider pour.
    Fichiers attachés Fichiers attachés

  6. #6
    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
    J'ai trouvé que ça venait de la séquence If .. Then .. ElseIf ..
    Code vba : 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
    'Filtre [Jour]-----
    If (Me.DTPicker_Day.Value = True) Then
     
    'Filtre [Mois]-----
    ElseIf (Me.DTPicker_Month.Value = True) Then
     
    'Filtre [Année]-----
    ElseIf Me.DTPicker_year.Value = True Then
     
    'Filtre [user]---------
    ElseIf Me.DTPicker_user11.Value < Me.DTPicker_user12 Then
     
    'Filtre [user]---------
    ElseIf Me.DTPicker_user11.Value > Me.DTPicker_user12 Then
     
    End If
    On ne peut jamais tomber dans les trois premiers cas.

    En replaçant par ce qui suit ça fonctionne
    Code vba : 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
    'Filtre [Jour]-----
    If (Me.GroupeDate = Me.DTPicker_Day1.OptionValue) Then
     
    'Filtre [Mois]-----
    ElseIf (Me.GroupeDate = Me.DTPicker_Month1.OptionValue) Then
     
    'Filtre [Année]-----
    ElseIf (Me.GroupeDate = Me.DTPicker_year1.OptionValue) Then
     
    'Filtre [user]---------
    ElseIf Me.DTPicker_user11.Value < Me.DTPicker_user12.Value Then
     
    'Filtre [user]---------
     ElseIf Me.DTPicker_user11.Value > Me.DTPicker_user12.Value Then
     
    End If

    Code complet de Sub Filtrer_Selection_Click() :
    Code vba : 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 Filtrer_Selection_Click()
    Dim SQL As String
    Dim dtDateMin As Date, dtDateMax As Date
     
    Call GroupeDate_AfterUpdate
     
    ' **** ici il faut initialiser SQL ****
     
     SQL = "SELECT 
    [Liste_Produit].[Date_Releve],[Liste_Produit].[Num_produit_Frais],[Liste_Produit].[Designation_ar],[Liste_Produit].[Nom_Type_Produit_ar],[Liste_Produit].[APPORT],[Liste_Produit].[Prix_Min],[Liste_Produit].[Prix_Fréq],[Liste_Produit].[Prix_Max] FROM 
    [Liste_Produit] WHERE (([Liste_Produit].[Num_produit_Frais]) Is Not Null) "
     
    'Filtre [Jour]-----
    If (Me.GroupeDate = Me.DTPicker_Day1.OptionValue) Then
       SQL = SQL & " And 
    [Liste_Produit].[Date_Releve]=#" & Format(DTPicker_Day.Value, "mm/dd/yyyy") & "#"
     
    'Filtre [Mois]-----
    ElseIf (Me.GroupeDate = Me.DTPicker_Month1.OptionValue) Then
       dtDateMin = DateSerial(Year(DTPicker_Month.Value), Month(DTPicker_Month.Value), 1)
       dtDateMax = DateAdd("m", 1, dtDateMin) - 1
       SQL = SQL & " And 
    [Liste_Produit].[Date_Releve] between #" & Format(dtDateMin, "mm/dd/yyyy") & "#" & _
                                                        " And #" & Format(dtDateMax, "mm/dd/yyyy") & "#"
     
    'Filtre [Année]-----
    ElseIf (Me.GroupeDate = Me.DTPicker_year1.OptionValue) Then
       dtDateMin = DateSerial(Year(Me.DTPicker_year.Value), 1, 1)
       dtDateMax = DateSerial(Year(Me.DTPicker_year.Value), 12, 31)
       SQL = SQL & " And 
    [Liste_Produit].[Date_Releve] between #" & Format(dtDateMin, "mm/dd/yyyy") & "#" & _
                                                        " And #" & Format(dtDateMax, "mm/dd/yyyy") & "#"
     
    'Filtre [user]---------
    ElseIf Me.DTPicker_user11.Value < Me.DTPicker_user12.Value Then
       dtDateMin = Me.DTPicker_user11.Value
       dtDateMax = Me.DTPicker_user12.Value
       SQL = SQL & " And 
    [Liste_Produit].[Date_Releve] between #" & Format(dtDateMin, "mm/dd/yyyy") & "#" & _
                                                        " And #" & Format(dtDateMax, "mm/dd/yyyy") & "#"
     
    'Filtre [user]---------
     ElseIf Me.DTPicker_user11.Value > Me.DTPicker_user12.Value Then
       dtDateMin = Me.DTPicker_user12.Value
       dtDateMax = Me.DTPicker_user11.Value
       SQL = SQL & "And 
    [Liste_Produit].[Date_Releve] between #" & Format(dtDateMin, "mm/dd/yyyy") & "#" & _
                                                        " And #" & Format(dtDateMax, "mm/dd/yyyy") & "#"
     
    End If
     
    ' Ajout clause ORDER BY
    SQL = SQL & " Order by [Date_Releve] DESC;"
     
    Me.lstProduit.RowSource = SQL
    Me.lstProduit.Requery
    End Sub

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Grand merci pour vous!




  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    j'ai pas remarqué que après le filtrage il triple les enregistrement!!!
    Merci

  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
    Bonsoir,

    Les doublons que je vois viennent de la table SAISIE.
    Un même produit a été saisi à plusieurs dates.

    Par exemple si on prend le produit numéro 135.
    Sans filtrage on a:
    Code txt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Date_Releve Num_produit_Frais Designation_ar Nom_Type_Produit_ar APPORT	Prix_Min Prix_Fréq Prix_Max
    ----------- ----------------- -------------- ------------------- ------ -------- --------- --------
    18/02/2013  135               xxxxx          xxxxx               1600	500      500       500
    14/02/2013  135               xxxxx          xxxxx               900	500      500       500
    19/02/2013  135               xxxxx          xxxxx               1700	600      600       600
    Ce n'est donc pas le filtrage qui multiplie les enregistrements.
    C'est la requête Liste_Produit.

    Si on reste sur cet exemple, que voudrai-tu que ça affiche ?

    A+

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    si on reste sur cet exemple je veux afficher selon le choix date les données correspondants.
    par exemple:
    si je choisi le jour 18/02/2013 il m'affiche la ligne sa:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Date_Releve Num_produit_Frais Designation_ar Nom_Type_Produit_ar APPORT	Prix_Min Prix_Fréq Prix_Max
    ----------- ----------------- -------------- ------------------- ------ -------- --------- --------
    18/02/2013  135               xxxxx          xxxxx               1600	500      500       500
    si je choisi le jour 14/02/2013 IL m'affiche la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Date_Releve Num_produit_Frais Designation_ar Nom_Type_Produit_ar APPORT	Prix_Min Prix_Fréq Prix_Max
    ----------- ----------------- -------------- ------------------- ------ -------- --------- --------
    14/02/2013  135               xxxxx          xxxxx               900	500      500       500
    Donc tous est relié au choix de date que ce soit jour, mois, année ou par intervalle date

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

    Si il n'y a plus de problème de filtrage par date, merci de cliquer sur le bouton [Résolu] pour clore cette discussion.
    (Voir ici (section 4.12) si besoin)

    Cordialement.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Merci

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/11/2012, 15h53
  2. Probleme code source python, poker
    Par petard1994 dans le forum Général Python
    Réponses: 8
    Dernier message: 08/10/2012, 17h24
  3. [CKEditor] FCKeditor => probleme code source insertion image
    Par kakahn dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 04/05/2007, 11h57
  4. Code source pour rechercher des fichiers Mp3 sur le disque
    Par specta61 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/02/2007, 19h49

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