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 :

Faire des recherches multiples


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Par défaut Faire des recherches multiples
    Bonsoir, je voudrais avoir un userform avec des champs de recherches (panneaux déroulant en mode liste) qui donne un résultat dans un très grand champs listbox1.
    Il n'y a pas d'ordre à les remplir. On peut en laisser plusieurs vides (cela veut dire on prend toutes les valeurs), voir en mettre plusieurs.
    Je trouve que ce sera plus propre avec le second formulaire et les personnes qui n'ont pas au minimum la version 2016 ne peuvent pas s'en servir.


    Pouvez-vous m'aider pour rendre la listbox1 fonctionnel avec les champs de recherche multiple.

    1ère difficulté:
    je voulais savoir si on peut séparer un texte d'une cellule en plusieurs champs de recherche.
    Dans la feuille "table", j'ai nommé un tableau "TableauCategorie". Il y a un {"";"R4/R5";"R6/D7";"D8/D9";"P"} (photo présente).
    J'ai dans certains menus déroulants affichés les groupes de catégorie.
    Peut-on faire : si la catégorie est vide, on prend toutes les catégories, si il y a R4/R5, on prend dans les résultats les valeurs de R4 et les valeurs dans R5 et si pas de "/", on prend la valeur affichés.


    2ème difficulté:
    J'ai réussi à avoir toutes les cases comme je voulais sauf pour Club. Comment faire pour ajouter une case vide en premier lieu. Peut être qu'il vaut mieux utilisé une autre méthode que additem (en gros, j'ai environ 140 lignes qui vérifie).

    Je ne suis vraiment pas doué mais je trouve beaucoup de chose sur internet pour m'aider. Je copie beaucoup de chose donc je sais que je suis loin d'avoir un truc optimisé.

    J'ai essayé d'utiliser la fonction Frame comme vu sur le site de JB mais j'ai du mal. J'ai des propriétés de mal paramétrées.

    3ème difficulté:
    Est ce possible de faire la frame avec 2 lignes de texte? En gros avoir la ligne 3 et 4 affiché dans la Frame qui scrool en même temps.
    Mes en-têtes sont sur 2 lignes.

    Merci de venir m'aider. Je demande pas non plus les fichiers totalement fait mais de bonne piste déjà.

    Cordialement Nicolas.
    Images attachées Images attachées    
    Fichiers attachés Fichiers attachés

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Par défaut
    Bonsoir, je viens de résoudre le point 2 et 3.

    Pour le point 2 j'ai changé de méthode qui est plus rapide normalement puis ajouter un additem "", 0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ''''''''''''''''''
    Set f = Sheets("joueurs")
      Set mondico = CreateObject("Scripting.Dictionary")
      a = f.Range("C5:C" & f.[A65000].End(xlUp).Row)   ' tableau a(n,1) pour rapidité
      For i = LBound(a) To UBound(a)
        If a(i, 1) <> "" Then mondico(a(i, 1)) = ""
      Next i
      '--avec tri
      temp = mondico.keys
     
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.ComboClub.List = temp
        ComboClub.AddItem "", 0
    '''''''''''''''''''''''''
    Pour le point 3, je suis passé par un tableau fixe avec des limitations de largeur sur chaque colonne du tableau.

    Comment faire pour associé le tableau avec tous les champs? Je sais que le tableau devra varié avec la fonction change mais après je ne sais pas trop.

    Et je voudrais ajouter si on fait un double clic sur un texte, on ouvre la modification du joueur sélectionné.

    Nicolas.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    1ère difficulté:
    je voulais savoir si on peut séparer un texte d'une cellule en plusieurs champs de recherche.
    Dans la feuille "table", j'ai nommé un tableau "TableauCategorie". Il y a un {"";"R4/R5";"R6/D7";"D8/D9";"P"} (photo présente).
    J'ai dans certains menus déroulants affichés les groupes de catégorie.
    Peut-on faire : si la catégorie est vide, on prend toutes les catégories, si il y a R4/R5, on prend dans les résultats les valeurs de R4 et les valeurs dans R5 et si pas de "/", on prend la valeur affichée.
    Que veut dire "on prend" ?
    Est-ce que c'est parce que tu veux mettre un filtre quelque part? Si oui, utilises l'enregistreur de macro pour connaître le code qui permet de filtrer un tableau (et d'enlever tous les filtres, càd prendre en compte toutes les catégories).

    En ce qui concerne le R4/R5, tu peux utiliser la fonction Split. Cela te renverra une liste avec chacune des catégories à prendre en compte. Par exemple :
    te renvoie R4, et
    te renvoie R5.

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Par défaut
    Merci pour la réponse.

    Je prend note de la fonction split.

    Ce que je veux dire, c'est un champ vide signifie que toutes les valeurs du champs peuvent être affiché.

    Exemple, si je choisis en gros aucun champs, je vois toutes les valeurs dans le listbox.
    Si je met le club AMCB, je vois plus que 8 personnes.

    Si je choisi un nouveau champs de recherche Sexe par Homme, je passe à 5 personnes. Les femmes disparaissent du listbox.

    Si je retire un champ comme Homme (champs vide), je repasse à 8 personnes.

    Chaque champs de recherche ajouter doit faire diminuer le tableau.

    C'est comme sur la page joueurs, quand je clic sur AMCB, Homme, on affiche que ces champs là combiné ensemble dans le listing.

    Je viens de penser à une solution comme:
    Private Sub UserForm_Initialize() pour afficher toutes les valeurs (par défaut à chaque ouverture, aucun critère n'est choisi
    et tous les champs représentés par un removeitem (ou autre solution plus rapide).

    Je dis pas que c'est une bonne solution. Sans doute plus simple à faire dans l'autre sens.

    J'avais oublié aussi de récupérer les couleurs de remplissage des cellules.
    Le champs Forfait me sert à dire que c'est la couleur rouge dans le nom du joueurs qui prouve qu'il est forfait. Code exploité comme ça dans la feuille joueurs.

    J'ai changé aussi l'userform frmsaisie en passant presque tous les additem en fonction dico. J'ai retrouvé une super rapidité. Que c'est ouf la différence.
    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
     
    ''''''''''''''''''
    'ancien code
    'Rempli le panneau déroulant des clubs déjà présent dans le tableau des joueurs
    With Sheets("joueurs")
     
    'Boucle sur les cellules de les noms des clubs pour alimenter le ComboBox
    For Each Cell In .Range("Tjoueurs[Club]")
        If Cell <> "" Then
               cboClub = Cell
            'remplissage sans doublon
            If cboClub.ListIndex = -1 Then _
                cboClub.AddItem Cell
                cboClub = "" 'effacer le club affiché
                Trier cboClub, True  ' si alphabétique
            End If
    Next Cell
    End With
     
    ''''''''''''''''''
    'nouveau code
    Set f = Sheets("joueurs")
      Set mondico = CreateObject("Scripting.Dictionary")
      a = f.Range("Tjoueurs[Club]")   ' tableau a(n,1) pour rapidité
      For i = LBound(a) To UBound(a)
        If a(i, 1) <> "" Then mondico(a(i, 1)) = ""
      Next i
      '--avec tri
      temp = mondico.keys
     
      Call Tri.Tri(temp, LBound(temp), UBound(temp))
      Me.cboClub.List = temp
    '''''''''''''''''''''''''
    J'avais déjà utilisé ce code hier mais l'userform recherche donc j'ai décidé d'optimisé aussi l'autre userform qui en avait besoin.

  5. #5
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Exemple, si je choisis en gros aucun champs, je vois toutes les valeurs dans le listbox.
    Si je met le club AMCB, je vois plus que 8 personnes.
    Si je choisi un nouveau champs de recherche Sexe par Homme, je passe à 5 personnes. Les femmes disparaissent du listbox.
    Si je retire un champ comme Homme (champs vide), je repasse à 8 personnes.
    Chaque champs de recherche ajouter doit faire diminuer le tableau.
    C'est comme sur la page joueurs, quand je clic sur AMCB, Homme, on affiche que ces champs là combiné ensemble dans le listing.
    Je vois que ta BDD est un tableau, tu peux donc utiliser les filtres. A chaque fois que tu sélectionnes un champ dans une listbox, tu ajoutes le filtre équivalent au tableau. Dans le listing final, tu ne fais apparaître que les lignes visibles. Pour cela utilises la propriété :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1:A100").SpecialCells(xlCellTypeVisible)
    N'oublie pas d'enlever tous les filtres quand tu sors de ton userform.

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Par défaut
    Merci beaucoup pour la réponse.
    Je viens de rajouté les filtres à tous les champs.

    Mais je ne vois pas trop le code pour affiché les lignes visible dans la listbox.

    C'est possible de prendre le tableau filtrés avec le rowsources? C'est pour utiliser le nom des colonnes directement (columnHeads a True).
    Et en gardant les couleurs des cellules.

    Sinon si je met en label et que je dois scroller la listbox pour tout voir, ca va tout décaler.

    Edit: j'ai trouvé pour afficher le formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ListBox1.RowSource = Range("Tjoueurs").SpecialCells(xlCellTypeVisible).Address
    Je pense que j'ai pu tout résoudre. Je vais voir pour ajouter plusieurs possibilité pour le classement.
    Sur le segment, on peut prendre plusieurs classement, je vais voir si je peux faire la même chose.
    J'avais vu comment faire sur boisgontierjacques qui est membre du forum.

    Je le remercie aussi pour tous les ressources qu'il nous transmet.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Faire des recherches dans plusieur Feuilles
    Par edpth dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/11/2009, 00h21
  2. faire des recherches sur un pdf en utilisant javacript
    Par dobbmay dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/03/2009, 10h02
  3. Réponses: 1
    Dernier message: 17/10/2007, 10h55
  4. [XPATH] génération d'un xpath pour faire des recherches dans un xml
    Par Spaceman Spiff dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/06/2007, 18h18
  5. Que faut il utiliser pour faire des recherches dans LDAP?
    Par kabouns dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 04/08/2006, 15h24

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