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

Macros et VBA Excel Discussion :

Requête SQL et plusieurs champs pour les critères [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 5
    Par défaut Requête SQL et plusieurs champs pour les critères
    Bonjour,

    Ayant beaucoup naviguer sur developpez.net pour apprendre le VBA, je suis hélas confronté à un problème dont je n'arrive pas cette fois à trouver une solution... je m'explique :
    J'utilise un fichier excel qui est connecté en DAO à une base Access. Tout fonctionne impecc, mais...

    J'ai dans une feuille Excel 7 champs ayant chacun une liste déroulante puis un bouton macro "Filtre".
    1-Date
    2-Domaine
    3-Secteur
    4-Département
    5-Site
    6-Métier
    7-Nature

    Comme je l'ai dit, chaque "cellule" possède une liste déroulante avec des valeurs pré-définis
    Le but étant de choisir une valeur dans chaque cellule souhaité pour faire un filtre et afficher le résultat de la requête SQL dans un tableau excel.

    Actuellement, si la personne renseigne les 7 cellules, une requête qui fonctionne correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     Domaine = Range("B2").Value
     Scteur = Range("B3").Value
     Departement = Range("B4").Value
     Site = Range("B5").Value
     Metier = Range("B6").Value
     Cntrat = Range("B7").Value
     
     Date1 = Range("B1").Value
     Date2 = DateSerial(Year(Date1), Month(Date1), 1)
     
     
     
    sSQL = "SELECT * FROM TableA WHERE [Col1]= '" & Domaine & "'AND [Col2]= '" & Scteur & "' AND [Col3]= '" & Departement & "' AND [Col4]= '" & Site & "' AND [Col5]= '" & Metier & "' AND [Col6]= '" & Cntrat & "' AND [Col7] BETWEEN format('" & Date2 & "','dd/mm/yyyy') AND format('" & Date1 & "','dd/mm/yyyy');"
    Le problème dans cette requête c'est que je ne prends absolument pas en compte si l'utilisateur renseigne la cellule 1 et 7 et laisse les autres vides... ce qui devrait me sortir le résultat en fonction de la date et de la nature... même process pour toutes les manipulations avec ce "filtre".

    J'ai commencé à chercher d'autres solutions mais en vain....
    C'est pourquoi je fais mon bapteme sur developpez.net et demande de l'aide car je sèche terriblement.

    Toute piste est la bienvenue

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Si je comprends bien, certaines valeurs peuvent être vides et tu voudrais faire la requête sur les valeurs choisies seulement, c'est ça ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 5
    Par défaut
    Oui c'est exactement ça !

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Tu pourrais essayer quelque chose comme ceci
    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
        sSQL = "SELECT * FROM TableA "
        If Domaine <> "" Then sSQL = sSQL & "WHERE [Col1]= '" & Domaine & "' "
        If Scteur <> "" Then
            If InStr(1, sSQL, "WHERE") > 0 Then
                sSQL = sSQL & "AND [Col2]= '" & Scteur & "' "
            Else
                sSQL = sSQL & "WHERE [Col2]= '" & Scteur & "' "
            End If
        End If
        If Departement <> "" Then
            If InStr(1, sSQL, "WHERE") > 0 Then
                sSQL = sSQL & "AND [Col3]= '" & Departement & "' "
            Else
                sSQL = sSQL & "WHERE [Col3]= '" & Departement & "' "
            End If
        End If
        If Site <> "" Then
            If InStr(1, sSQL, "WHERE") > 0 Then
                sSQL = sSQL & "AND [Col4]= '" & Site & "' "
            Else
                sSQL = sSQL & "WHERE [Col4]= '" & Site & "' "
            End If
        End If
        If Metier <> "" Then
            If InStr(1, sSQL, "WHERE") > 0 Then
                sSQL = sSQL & "AND [Col5]= '" & Metier & "' "
            Else
                sSQL = sSQL & "WHERE [Col5]= '" & Metier & "' "
            End If
        End If
        If Cntrat <> "" Then
            If InStr(1, sSQL, "WHERE") > 0 Then
                sSQL = sSQL & "AND [Col6]= '" & Cntrat & "' "
            Else
                sSQL = sSQL & "WHERE [Col6]= '" & Cntrat & "' "
            End If
        End If
        If Date1 <> "" Then
            If InStr(1, sSQL, "WHERE") > 0 Then
                sSQL = sSQL & " AND [Col7] BETWEEN format('" & Date2 & "','dd/mm/yyyy') AND format('" & Date1 & "','dd/mm/yyyy') "
            Else
                sSQL = sSQL & "WHERE [Col7] BETWEEN format('" & Date2 & "','dd/mm/yyyy') AND format('" & Date1 & "','dd/mm/yyyy') "
            End If
        End If
     
        'Debug.Print sSQL  si tu veux voir le résultat

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 5
    Par défaut
    N'étant plus au boulot je vais essayer ça dès le petit matin !
    Je ne connaissais pas du tout "instr" et c'est exactement ce type de raisonnement que je souhaitais mettre en place.
    Si j'ai bien compris la fonction "instr" va permettre d'analyser la requête SQL et si elle contient "where" alors.. sinon rajoute "And"...
    Mais que signifie le "1" ? (Pour la première valeur trouvée ?)

    En tout cas, je pense que ça répond exactement à mon besoin et pour une fois j'ai hâte de voir le résultat demain 😂.

    Je te remercie par avance de ton aide et de ta rapidité !
    Je te confirmerai ça demain matin. 😀

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Tu as bien compris: Instr (In String) recherche un mot, une lettre ... dans une chaîne et retourne la position trouvée, sinon 0.
    Le 1 est facultatif, mais désigne la position du premier caractère à être lu.

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

Discussions similaires

  1. [AC-2010] Critères sur champs pour les formulaires
    Par btks59 dans le forum IHM
    Réponses: 7
    Dernier message: 11/08/2011, 15h04
  2. Réponses: 1
    Dernier message: 04/07/2011, 22h35
  3. Réponses: 2
    Dernier message: 02/02/2008, 23h38
  4. Récupérer les valeurs d'une requête SQL dans un champs html SELECT
    Par tamiii dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/11/2007, 14h27
  5. requête SQL avec plusieurs critères de sélection
    Par gailup dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/06/2007, 09h44

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