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 :

Recherche multi criteres -> comment renvoyer le n° de la ligne selectionnée ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut Recherche multi criteres -> comment renvoyer le n° de la ligne selectionnée ?
    Bonjour,


    Je cherche à utiliser et adapter à mon besoin la recherche multicritère présentée dans ce fichier qui me semble très pratique. (ce n'est pas moi qui ai conçu ce fichier)

    Lorsqu'on a trouvé le choix souhaité, le contenu des colonnes qui correspondent au choix sélectionné s'affiche dans les textbox textbox2 à textbox7, c'est parfait.

    Je cherche en vain à faire afficher / retourner le numéro de la ligne du tableau "BD" correspondant au choix sélectionné.
    Je n'y parviens pas , pouvez vous m'aider svp ?

    j'ai également remarqué que la recopie des données des colonnes dans les textbox2 à textbox7 ajoutait dans le contenu de ces textboxes un espace en début et fin, pour faire des comparaisons de valeurs dans la suite de mon code ça va me poser des problèmes, est ce possible de ne pas avoir ces espaces indésirables ?

    Merci à vous et bonne fin d'année à tous,
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Quel est la version de votre excel?

    Voici une proposition avec votre tableau convertit en tableau structuré, me dire si ça ne colle pas avec votre version d'excel.

    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
    Private Sub ListBox1_Click()
        For k = 0 To Ncol - 1
          Me("TextBox" & k + 2) = Me.ListBox1.Column(k)
        Next k
        DerLig = Sheets("BD").Range("Tableau1").Rows.Count
        With Sheets("BD").ListObjects("Tableau1").DataBodyRange.Columns(1)
            Set L = .Find(TextBox2.Text, LookAt:=xlWhole)
            If Not L Is Nothing Then
                Deb = L.Address
                Do
                    If Cells(L.Row, "B") <> TextBox3.Text Or Cells(L.Row, "C") <> TextBox4.Text Or Cells(L.Row, "D") <> TextBox5.Text Or Cells(L.Row, "E") <> TextBox6.Text Or Cells(L.Row, "F") <> TextBox7.Text Then
                        Set L = .FindNext(L)
                    Else
                        LRow.Caption = L.Row
                        Exit Sub
                    End If
                Loop While Not L Is Nothing And L.Address <> Deb
            End If
        End With
    End Sub
    Pièce jointe 611064

    Cdlt

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut
    Merci pour votre aide,

    J'utilise Office Professionnel Plus 2019

    Une erreur survient sur cette ligne, erreur d’exécution 2004 - erreur définie par l'application ou par l'objet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        DerLig = Sheets("BD").Range("Tableau1").Rows.Count
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    "Une erreur survient sur cette ligne, erreur d’exécution 2004 - erreur définie par l'application ou par l'objet"

    Evidemment, vous avez recopié le code sur le fichier d'origine alors que j'ai fourni le fichier prêt à l'emploi. j'avais converti votre tableau en tableau structuré afin que vous puissiez bénéficier des dernières avancées(qui commencent à dater) dans ce domaine.
    Vous utilisez la version 2019, donc pourquoi enregistrer le fichier au format .Xls au lieu de XLSm.
    Reprenez le fichier que j'ai fourni, faites les essais et dites-moi si vous avez toujours l'erreur.

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    A la lecture du code, je me permet quelques remarques en commentaire

    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
    Option Explicit 'Force le programmeur à déclarer toutes les variables
     
    'Il est préférable de déclarer les variables en précisant leur type,
    'sinon VBA utilise des variants et l'aide à la saisie est perdue (pas d'autocomplétion du code) entre autre.
    Dim Choix() As String, Rng As Range, Ncol As Integer  'f As Worksheet
     
    'Il n'est pas utile de déclarer une variable pour pointer une des feuilles du classeur
    'Un nom lui est déjà attribué d'office par VBA.
    'Dans ce classeur par exemple la feuille "DB" est connue sous le nom Feuil2 (modifiable dans les propriétés de la feuille, F4)
     
    Private Sub UserForm_Initialize()
    Dim TblTmp As Variant, i As Long, k As Long
       'Set f = Sheets("bd")
       'Il vaut mieux éviter [] pour pointer une cellule, ça force VBA à faire de l'interprétation de code, ce qui n'est pas utile
       'L'utilisation de Rows.count permet de rendre le code compatible entre différente version (Row est un long sur les version actuelle, plus un integer)
       Set Rng = feuil2.Range("a3", feuil2.Cells(feuil2.Rows.Count, "F").End(xlUp))
     
       'On met les valeur dans un tableau interne 
       TblTmp = Rng.Value
     
       'On mémorise le nombre de colonne
       'Bien qu'ici, il serait possible de retrouver cette valeur via Choix avec LBound et UBound
       Ncol = Rng.Columns.Count
     
       'Puisque la taille du tableau est connue, il vaut mieux le redimensionner en une seule fois.
       'Le but est de réduire l'écriture mais surtout d'éviter de morceler le tableau en mémoire
       'Chaque appelle à redim preserve réalloue un petit morceau d'espace mémoire, 
       'VBA doit donc naviguer un peu partout pour retrouver les espaces mémoire
       'Dans ce cas preserve, qui permet de conserver le contenu lors du redimensionnement, est retiré car n'est plus utile
       ReDim Choix(LBound(TblTmp) To UBound(TblTmp)) 'Preserve
     
       For i = LBound(TblTmp) To UBound(TblTmp)
         For k = LBound(TblTmp) To UBound(TblTmp, 2)
           Choix(i) = Choix(i) & TblTmp(i, k) & " * "
         Next k
       Next i
     
       Me.ListBox1.List = Rng.Value
    End Sub

    Sinon pour la question de qui à produit le code, je ne sais pas répondre mais sur le principe de la recherche multi-critères, je me souviens d'un BoisGonthier Jacques (ou nom approchant) qui produisait quelque chose comme ça.
    ++
    Qwaz

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut
    Malgré tout je n'arrive pas à afficher la ligne du nom sélectionné, lorsque j'entre 'dubois', il y a 2 réponses affichées.

    En cliquant sur l'une des deux, le Label LRow n'est pas mis à jour avec le numéro de la ligne correspondant au nom cliqué.

  7. #7
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Le problème vient du fait que vous insérez un espace dans les relevés pour construire la listbox.
    Remplacez la ligne suivante dans Private Sub UserForm_Initialize():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     choix(i) = choix(i) & TblTmp(i, k) & " * "
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     choix(i) = choix(i) & TblTmp(i, k) & "*"
    Cdlt

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut
    L'erreur 1004 se renouvelle, il semble que le Tableau1 ne soit pas défini, cependant je suis bien reparti de votre fichier (v1)

    Je viens d'enregistrer le fichier au format actuel acceptant les macro, pouvez vous regarder ce qui pose problème dans ce fichier s'il vous plait ?
    Fichiers attachés Fichiers attachés

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Il vous manque le tableau structuré.

    Sélectionner tout le tableau (de A2 à F18) puis aller dans le menu "Insertion", puis "Tableau". Cocher comme quoi votre sélection comporte des entêtes. Normalement il sera nommé Tableau1 par defaut.
    Tout devrait fonctionner ensuite

    ++
    Qwaz

  10. #10
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Je vous retourne votre fichier, j'ai simplement converti le tableau en tableau structuré et ça marche.
    Pièce jointe 611149

    Pièce jointe 611150

Discussions similaires

  1. Recherche Multi-criteres dans un formulaire
    Par valery17 dans le forum Access
    Réponses: 6
    Dernier message: 22/05/2006, 17h17
  2. [formulaire] recherche multi criteres
    Par Treuze dans le forum IHM
    Réponses: 3
    Dernier message: 10/01/2006, 11h36
  3. [Collections]Implémenter une recherche multi-critère performante
    Par ppaul127 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 29/12/2005, 15h38
  4. gui pour recherche multi critere
    Par komando dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 02/12/2005, 20h08
  5. Réponses: 14
    Dernier message: 15/06/2005, 14h14

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