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

Access Discussion :

Fenêtre de sélection paramétrée (et de requétage) collossale en Access 2003...


Sujet :

Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut Fenêtre de sélection paramétrée (et de requétage) collossale en Access 2003...
    Bonjour,

    Je vous écris aujourd'hui pour vous poser une question.

    J'ai un gros formulaire permettant de faire des recherches sur un grand nom de ceritère en Access 2003 et dans certains cas les critères sont basés sur la présence ou non de dates (dans la combo de sélection je dois avoir le choix en tand q'utilisateur entre "oui" et "non").

    Grosso modo, ma base traite d'incidents dont l'utilisateur doit piovoir saisir des dates ("date de prise en compte" d'une part et "date de traitement" d'autre part). Je récupère déjà la reqsuète paramétrée en fonction des valeurs saisies dans les combos de mon formulaire (inutile de vous dire que la requète va être énorme (et donc difficile à débuguer et certainement encore plus à mantenir). Est il possible de trouver une autres solution ?

    Un autre problème c'est que je me demande si il serrait possible d'avoir des instructions conditionnelles dans une requète ? Par exemple quelquechose d'équivalent au "IIF" en VB ?

    Ma troisième question porte sur le fait que l'utilisateur ai sélectionné ou non tel ou tel critère dans les différentes combo Box ?

    Efin j'aiune quatrième question. J'avoue que j'ai un trou de mémoire. Voilà la souci : c'est que dans les critères de sélection, il y a deuix plages de dates ? Comment les représenter ? Est ce par l'instruction "between" ou quelquechose comme ça ? Je ne me rappelle plus et l'aide n'est pas installée ici, ce qui ne facilite rien.

    A final celà va sans doute donner quelquechose de très lourd...

    Par avance je vous remercie car là pour ainsi dire, je sèche un peut.

    Pour illustrer mon propos, je vous soumets la maquette de cet écran un tantinet démoniaque.

    Merci d'avance.

    A très bientôt.

    Marco.

  2. #2
    Expert éminent sénior
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    slt,

    Tu peux générer le code SQL en VBA puis l'affecter à ta zone de liste ou ton formulaire de visualisation (je vois pas bien ce que c'est).
    Le tutoriel de cafeine peut t'être utile :
    http://cafeine.developpez.com/access...echerchemulti/

    Pour le IIF et le Between ben oui ça marche à priori, y a qu'à tester.

    Pour les dates je t'invite à utiliser le sinarf date chooser :
    http://sinarf.developpez.com/access/outils/datechooser/
    ou mon module de fenêtre de saisie :
    http://arkham46.developpez.com/artic...utboxplus/doc/
    C'est tout de suite plus agréable de pouvoir choisir la date sur un calendrier.

    Bye.

  3. #3
    Membre régulier Avatar de Rcanada
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 130
    Points : 123
    Points
    123
    Par défaut
    Pour ta requete, tu n'as qu'a la stocker dans un string, et à rajouter à l'aide de " if(not isnull(champs) ) then ..." les arguments de la clause WHERE au fur et à mesure en concaténant. Ensuite, il ne te reste plus qu'a utiliser une queryDef pour executer ta requête.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    Bonjour,

    Merci pour toutes ces réponses. Je suis en train de les mettre en application en ce momment même.

    Sinon, j'ai fais quelques essais avec le IIF, mais apparemment ça ne marche pas chez moi, toujours sur cette même requète.

    J'aimerais savoir si il est possible d'insérer une condition sur une valeur ramenée par SQL.

    Par exemple j'ai une date et dans le cas ou celle ci ne ramène pas de valeur, je veux que le résultat soit "Non" (et "Oui" dans le cas contraire). Pour vous donner une idée un peut plus précise, comme il s'agit d'une gestion d'incidents, si il y a une date de prise en compte celà signifie que l'incident a été pris en compte...

    J'ai également une autre question. Je ne sais pas si il est possible de paramétrer le chemin d'accès à une base Access à partir d'une application Access ? Si oui comment celà peut iol être réalisé ?

    Voici le genre de paramètre que j'ai essayé de réntrer dans le générateur d'expression dans le QBE de Access (à la ligne critères) :
    =IIf(Incident.DatAnalyseNational<>CDate(0),"Oui","Non")
    avec "Expr1[Analyse]" à la ligne "champs". Quelle peut être mon erreur ?

    En fait je comptais m'aider de celà pour générer mon expressioon SQL et la remettre ensuite dans mon code VBA.

    Merci de votre aide à tous.

    A très bientôt.

    Marco.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    SAlut,

    Ouf ça y est je crois que je tiens enfin ma requète SQL avec paramètres, conditions sur des expressions et tout et tout.

    La voici in extenso :

    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
     
    SELECT Incident.NumIncident, Incident.DatIncident, Incident.CompteRendu, Site.Site, Site.Ville, Ville.Region, Incident.TypIncident
    FROM (((Ville INNER JOIN (Site 
    INNER JOIN Incident ON Site.Site = Incident.NumSite) ON Ville.Ville = Site.Ville) 
    INNER JOIN ReqEstAnalyse ON Incident.NumIncident = ReqEstAnalyse.NumIncident) 
    INNER JOIN ReqEstVisible ON Incident.NumIncident = ReqEstVisible.NumIncident) INNER JOIN ReqEstTraiteNationalement ON Incident.NumIncident = ReqEstTraiteNationalement.NumIncident
    WHERE (((Incident.NumIncident)=[Formulaires]![Form_FrmListeDesIncidents]![CboNumIncident].[Value]) 
    AND ((Incident.DatIncident)>=[Formulaires]![Form_FrmListeDesIncidents]![TxtDateDebutIncident].[Value]) 
    AND ((Site.Site)=[Formulaires]![Form_FrmListeDesIncidents]![CboSite].[Value]) 
    AND ((Site.Ville)=[Formulaires]![Form_FrmListeDesIncidents]![CboVille].[Value]) 
    AND ((Ville.Region)=[Formulaires]![Form_FrmListeDesIncidents]![CboRegion].[Value]) 
    AND ((Incident.TypIncident)=[Formulaires]![Form_FrmListeDesIncidents]![CboRegion].[Value]) 
    AND ((Incident.Typologie)=[Formulaires]![Form_FrmListeDesIncidents]![CboTypologie].[Value]) 
    AND ((Incident.DateAnalyse)>=[Formulaires]![Form_FrmListeDesIncidents]![TxtDateDebutTraitement].[Value]) 
    AND ((ReqEstAnalyse.EstAnalyse)=[Formulaires]![Form_FrmListeDesIncidents]![CboAnalyse].[Value]) 
    AND ((ReqEstVisible.EstVisible)=[Formulaires]![Form_FrmListeDesIncidents]![CboMiseEnVisibilité].[Value]) 
    AND ((ReqEstTraiteNationalement.EstTraiteNationalement)=[Formulaires]![Form_FrmListeDesIncidents]![CboTraiteNationalement].[Value])) 
    OR (((Incident.DatIncident)<=[Formulaires]![Form_FrmListeDesIncidents]![TxtDateFinIncident].[Value]) 
    AND ((Incident.DateAnalyse)<=[Formulaires]![Form_FrmListeDesIncidents]![TxtDateFinTraitement].[Value]));
    Pour simplifier un peut la seule et unique solution que j'ai trouvé c'est de créer des vues (les tables préfixées : "Req..." dans le texte ci-dessus).

    Par contre je ne suis pas totalement sur de moi concernant la partie ou on a des intervalles de dates dans la requète (date d'incident et date de résolution). Qui peut m'aider sur ce dernier point et me dire ce qu'il pense de cette requète ?

    Qu'est ce que vous en pensez ?

    A très bientôt.

    Marco.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    Bonsoir,

    Au final après une bonne journée de bataille avec le code. Je pense que je peux dire que je vois le bout du tunnel.

    La procédure qui permet de créer la requète de sélection est terminée je pense et marche (peut-être y aura t il de la mise au point mais bon). Si jamais vous voyez des choses qui vous choquent surtout n'hésitez pas.

    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
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
     
    Public Function FctRefreshQuery(ByVal StrRegion As String, ByVal StrDroits As String) As Boolean
    Dim SQL             As String
    Dim SQLWhere        As String
    Dim BoolPresent     As Boolean
    Dim db              As DAO.Database
    Dim rs              As DAO.Recordset
        On Error GoTo ErrHandler
        FctRefreshQuery = False
        Form_FrmListeDesIncidents.Requery
        BoolPresent = False
     
        '1 - > Entête de la requète
        '**************************
        SQL = "SELECT Incident.NumIncident, Incident.DatIncident, Incident.CompteRendu, Site.Site, Site.Ville, Ville.Region, Incident.TypIncident" & _
            " FROM (((Ville INNER JOIN (Site INNER JOIN Incident ON Site.Site = Incident.NumSite) ON Ville.Ville = Site.Ville) INNER JOIN ReqEstAnalyse ON Incident.NumIncident = ReqEstAnalyse.NumIncident) INNER JOIN ReqEstVisible ON Incident.NumIncident = ReqEstVisible.NumIncident) INNER JOIN ReqEstTraiteNationalement ON Incident.NumIncident = ReqEstTraiteNationalement.NumIncident"
     
        '2 - > Corps de la requète
        '*************************
        If Not IsNull(Form_FrmListeDesIncidents.CboNumIncident.Value) Then
           SQL = SQL & "WHERE Incident.NumIncident = '" & Form_FrmListeDesIncidents.CboNumIncident.Value & "' "
           BoolPresent = True
        End If
     
        If Not IsNull(Form_FrmListeDesIncidents.CboSite.Value) Then
            If BoolPresent Then
                SQL = SQL & " AND "
            Else
                SQL = SQL & " WHERE "
            End If
           SQL = SQL & "Site.Site = '" & Form_FrmListeDesIncidents.CboSite.Value & "' "
           BoolPresent = True
        End If
     
        If Not IsNull(Form_FrmListeDesIncidents.CboVille.Value) Then
            If BoolPresent Then
                SQL = SQL & " AND "
            Else
                SQL = SQL & " WHERE "
            End If
           SQL = SQL & "Site.Ville = '" & Form_FrmListeDesIncidents.CboVille.Value & "' "
           BoolPresent = True
        End If
     
        If Not IsNull(Form_FrmListeDesIncidents.CboRegion.Value) Then
            If BoolPresent Then
                SQL = SQL & " AND "
            Else
                SQL = SQL & " WHERE "
            End If
           SQL = SQL & "Ville.Region = '" & Form_FrmListeDesIncidents.CboRegion.Value & "' "
           BoolPresent = True
        End If
     
        If Not IsNull(Form_FrmListeDesIncidents.CboTypologie.Value) Then
            If BoolPresent Then
                SQL = SQL & " AND "
            Else
                SQL = SQL & " WHERE "
            End If
           SQL = SQL & "Incident.Typologie = '" & Form_FrmListeDesIncidents.CboTypologie.Value & "' "
           BoolPresent = True
        End If
     
        If Not IsNull(Form_FrmListeDesIncidents.CboTypIncident.Value) Then
            If BoolPresent Then
                SQL = SQL & " AND "
            Else
                SQL = SQL & " WHERE "
            End If
           SQL = SQL & "Incident.TypIncident = '" & Form_FrmListeDesIncidents.CboTypIncident.Value & "' "
           BoolPresent = True
        End If
     
        If Not IsNull(Form_FrmListeDesIncidents.TxtDateDebutIncident.Value) Then
            If BoolPresent Then
                SQL = SQL & " AND "
            Else
                SQL = SQL & " WHERE "
            End If
           SQL = SQL & "Incident.DatIncident >= #" & Form_FrmListeDesIncidents.TxtDateDebutIncident.Value & "# "
           BoolPresent = True
        End If
     
        If Not IsNull(Form_FrmListeDesIncidents.TxtDateFinIncident.Value) Then
            If BoolPresent Then
                SQL = SQL & " AND "
            Else
                SQL = SQL & " WHERE "
            End If
           SQL = SQL & "Incident.DatIncident <= #" & Form_FrmListeDesIncidents.TxtDateFinIncident.Value & "# "
           BoolPresent = True
        End If
     
        If Not IsNull(Form_FrmListeDesIncidents.TxtDateDebutTraitement.Value) Then
            If BoolPresent Then
                SQL = SQL & " AND "
            Else
                SQL = SQL & " WHERE "
            End If
           SQL = SQL & "Incident.DateAnalyse <= #" & Form_FrmListeDesIncidents.TxtDateDebutTraitement.Value & "# "
           BoolPresent = True
        End If
     
        If Not IsNull(Form_FrmListeDesIncidents.TxtDateFinTraitement.Value) Then
            If BoolPresent Then
                SQL = SQL & " AND "
            Else
                SQL = SQL & " WHERE "
            End If
           SQL = SQL & "Incident.DateAnalyse >= #" & Form_FrmListeDesIncidents.TxtDateFinTraitement.Value & "# "
           BoolPresent = True
        End If
     
        If Not IsNull(Form_FrmListeDesIncidents.CboStatut.Value) Then
            If BoolPresent Then
                SQL = SQL & " AND "
            Else
                SQL = SQL & " WHERE "
            End If
           SQL = SQL & "Incident.Statut = '" & Form_FrmListeDesIncidents.CboStatut.Value & "' "
           BoolPresent = True
        End If
     
        If Not IsNull(Form_FrmListeDesIncidents.CboAnalyse.Value) Then
            If BoolPresent Then
                SQL = SQL & " AND "
            Else
                SQL = SQL & " WHERE "
            End If
            SQL = SQL & "((ReqEstAnalyse.EstAnalyse)='" & Form_FrmListeDesIncidents.CboAnalyse.Value & "')"
           BoolPresent = True
        End If
     
        If Not IsNull(Form_FrmListeDesIncidents.CboAnalyse.Value) Then
            If BoolPresent Then
                SQL = SQL & " AND "
            Else
                SQL = SQL & " WHERE "
            End If
            SQL = SQL & "((ReqEstVisible.EstVisible)='" & Form_FrmListeDesIncidents.CboMiseEnVisibilité.Value & "') "
           BoolPresent = True
        End If
     
        If Not IsNull(Form_FrmListeDesIncidents.CboAnalyse.Value) Then
            If BoolPresent Then
                SQL = SQL & " AND "
            Else
                SQL = SQL & " WHERE "
            End If
            SQL = SQL & "((ReqEstTraiteNationalement.EstTraiteNationalement)='" & Form_FrmListeDesIncidents.CboTraiteNationalement.Value & "'))"
           BoolPresent = True
        End If
     
        '3 - > Gestion de la visualisation en fonction des droits/région d'origine de la personne
        '****************************************************************************************
        If StrDroits <> CstAdmin Then
        'L'administreateur a une vue globale quelquesoit la région d'origine
            If BoolPresent Then
                SQL = SQL & " AND "
            Else
                SQL = SQL & " WHERE "
            End If
            SQL = SQL & " (((Incident.Statut)='" & "Public" & "')) OR (((Ville.Region)='" & StrRegion & "'))"
        End If
        BoolPresent = True
        SQL = SQL & " ;"
     
        '4 - > Execution de la requète
        '*****************************
        Form_FrmListeDesIncidents.LstResultQuery.RowSource = SQL
     
        Set rs = CurrentDb.OpenRecordset(SQL, DB_OPEN_DYNASET)
        Form_FrmListeDesIncidents.LstResultQuery.RowSourceType = "Table/Query"
        '5 - > Remplissage du ListView
        '*****************************
        Set Form_FrmListeDesIncidents.LstResultQuery.Recordset = rs
     
    ExitHandler:
        Set rs = Nothing
        Exit Function
     
    ErrHandler:
        MsgBox Err.Description, vbExclamation, CstAppName
        FctRefreshQuery = False
        Resume ExitHandler
     
    End Function
    J'ai essayé de mettre en pratique tous les bons conseils que vous avez pu me donner et de les tourner à ma sauce. Les tutoriaux m'auront été particulièrement profitables. Je vais continuer dès demain à en tirer parti puisque en cliquand sur une ligne dans le ListView que je viens de remplir, je dois ouvrir un formulaire avec toutes les infos et les champs accessibles ou non selon le niveau de privilège de la personne et le fait que les informations concernent ou non sa région. Mais ceci est une autre histoire.

    Bonne soirée à tous.

    A bientôt.

    Marco.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    Bonjour,

    Je ne sais pas si mon code est trops parfait ou si il n'inspire pas les commentaires, mais j'aurais une autre question.

    Comment faire pour exporter depuis une zone de liste access vers excel ?

    Par avance je vous remercie.

    Marco et son p'tit train train quotidien.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    Bonjour,

    Je ne sais pas si mon code est trops parfait ou si il n'inspire pas les commentaires, mais j'aurais une autre question.

    Comment faire pour exporter depuis une zone de liste access vers excel ?

    Par avance je vous remercie.

    Marco et son p'tit train train quotidien.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 481
    Points : 165
    Points
    165
    Par défaut
    Bonjour,

    Je ne sais pas si mon code est trops parfait ou si il n'inspire pas les commentaires, mais j'aurais une autre question.

    Comment faire pour exporter depuis une zone de liste access vers excel ?

    Par avance je vous remercie.

    Marco et son p'tit train train quotidien.

Discussions similaires

  1. Fenêtre de sélection d'un fichier
    Par Lazarey dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 25/09/2008, 17h45
  2. Fenêtre demandant des paramètres en batch
    Par irouni dans le forum Langage
    Réponses: 5
    Dernier message: 17/12/2007, 16h32
  3. Comment ouvrir une fenêtre de sélection de fichier ?
    Par flyjodel dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 22/11/2007, 22h25
  4. Réponses: 2
    Dernier message: 08/10/2007, 11h09
  5. Requête sélection paramétrée
    Par gentoo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/01/2007, 15h30

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