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 :

Choisir les filtres avant un recordset


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2020
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Choisir les filtres avant un recordset
    Bonjour à tous,

    J'ai effectué une requête SQL qui me retourne un recordset dans une feuille et j'affiche les X lignes avec 8 colonnes.

    Afin d'améliorer l'utilisation de ce tableau, j'aimerais avoir la possibilité de le filtrer la requête en fonction d'une colonne.



    J'imaginais un UserForm qui viendrait extraire uniquement le champ que je veux filtrer (dans mon cas une récurrence) et qui permettrais au final d’effectuer la requête SQL réduite.
    Dans ce style :
    Nom : 9K9aV.png
Affichages : 142
Taille : 6,7 Ko


    Je sèche un peu, j'aimerais donc avec des avis sur la façon de me lancer de cette fonctionnalité.
    C'est la première fois que je poste sur un forum, je suis d'habitude spectateur des discussions alors, je reste bien évidemment à votre disposition pour vous donner un maximum d'informations.

    Merci d'avance.

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Salut.

    Nous avons besoin de la structure de la base de données pour pouvoir t'aiguiller vers une solution, car il est impossible de déterminer comment cette récurrence a été modélisée dans la base...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2020
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Merci d'avoir pris du temps pour me répondre.

    Donc, pour commencer, c'est un fichier Excel avec du VBA, j'ai fait une connexion avec un ADODB à ma base de donnée. Ce qui me permet de faire des requêtes SQL et de récupérer le résultat à l'aide de recordset.

    Voici la partie FROM de ma requête, j'ai uniquement besoin de travailler sur ces tables ci-dessous.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    article 
    LEFT JOIN gamcon ON ((article.idart=gamcon.idart)) 
    LEFT JOIN gamcar ON ((gamcon.idqua=gamcar.idqua)) 
    LEFT JOIN unigen ON ((gamcar.iduni=unigen.iduni))
    LEFT JOIN fregam ON ((gamcar.idfre=fregen.idfre)) 
    LEFT JOIN resgen ON ((gamcar.idres=resgen.idres)) 
    LEFT JOIN famille ON ((gamcar.idfamille=fammes.idfamille)) 
    LEFT JOIN cargen ON ((gamcar.idcar=cargen.idcar))


    J'aimerais filtrer sur un champ fréquence dans la table fregam.


    J'avais pensé faire une première requête pour récupérer toutes les fréquences suivant certains filtres, afin d'ajouter des cases à cocher pour que l'utilisateur vienne choisir ses propres filtres.

    Cette solution me semble quand même assez farfelu et je suppose qu'il y a probablement d'autres solutions moins complexe ?

    Merci d'avance.

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Je ne vois pas trop comment tu pourrais faire autrement qu'une première requête pour récupérer les fréquences, puis une deuxième incluant les fréquences choisies. J'émets plus de réserves sur le fait de choisir les fréquences par cases à cocher car cela va t'obliger à devoir ajouter dynamiquement des contrôles. Perso, je m'orienterais plus vite vers une listbox multi-sélection.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2020
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Je n'avais pas pensé à cette option, comme quoi...
    Je pense que ça va effectivement simplifier ma démarche, merci.
    Je vais développer ça début de semaine prochaine, je reviendrais ici pour donner des nouvelles !

    Merci.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2020
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    J'ai un peu avancé sur le sujet et votre solution est effectivement beaucoup plus adapté à mon besoin, j'ai maintenant une nouvelle interrogation.

    J'affichais jusque-là, le résultat de mes requêtes à l'intérieur de cellules à l'aide d'un CopyFromRecordset:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("MENU").Range("C20").CopyFromRecordset rst
    J'aimerais donc savoir comment afficher/boucler le résultat de cette requête dans une listbox/msgbox ?

    Merci d'avance.

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Un adodb.Recordset expose la propriété GetRows qui renvoie un array (tableau VBA). Ce tableau est "inversé" ou transposé, c'est-à-dire que les lignes représentent les champs et les colonnes représentent les enregistrements.

    Les ListBox et combobox permettent d'être alimentés par des arrays:
    • ComboBox.List permet de recevoir un array bien formé (colonnes = champs et lignes = enregistrements)
    • ComboBox.Column permet de recevoir un array transposé, tel que le renvoie GetRows.



    Du coup, voici un code qui peut fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      Dim rs As ADODB.Recordset
     
      set rs = ...
      With UserForm1
        .ComboBox1.Column = rs.getRows
        .Show
      End With

    Idéalement, une bonne architecture de code décomposerait la manoeuvre en une fonction qui renvoie l'array, qui est alors utilisé pour alimenter le combobox ou le listbox.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    J'ai écrit 4 billets pour expliquer comment modéliser les interactions avec Access. Voici le lien de la discussion liée à ces billets, qui contient les liens vers le blog. En espérant que cela puisse t'aider.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2020
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    J'ai terminé cette partie de mon code grâce à ton aide. Celle-ci m'a été très précieuse et très appréciée.
    Je passe le sujet en résolu, merci beaucoup pour ton temps !

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

Discussions similaires

  1. Choisir les colonnes (champs) d'un état avant son affichage
    Par Stéph utilisateur d'acces dans le forum IHM
    Réponses: 11
    Dernier message: 11/06/2011, 10h10
  2. [JFileChooser][Audio] Ecouter les musiques avant de choisir
    Par speedster dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 14/09/2005, 00h36
  3. [VB.NET] Choisir les valeurs des items d'un combo box?
    Par Eithelgul dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/06/2004, 10h13
  4. Réponses: 4
    Dernier message: 18/08/2003, 09h53
  5. Ne prendre que les infos avant une certaine date??
    Par mythtvtalk.com dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/07/2003, 10h20

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