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 :

Filtrage d'une Listbox VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut Filtrage d'une Listbox VBA
    Bonjour,

    J'ai créé une Listbox pour afficher des données dans un Userform.
    Je rempli ma Listbox avec la colonne A et lorsque je sélectionne un élément j'affiche les données des autres colonnes de la ligne correspondante. Si je sélectionne la donnée en A1 j'affiche dans la UserForm B1, C1, etc...
    ça fonctionne parfaitement.

    J'utilise une fonction Textbox_Change pour filtrer ma Listbox. Par exemple j'écris 2 lettres et la Listbox ne m'affiche que les données de la colonne A (en direct, sans passer par un bouton ou autres) qui contiennent ces 2 lettres.
    ça fonctionne parfaitement aussi.

    Le bug, c'est qu'après mon filtrage, lorsque je sélectionne une donnée j'ai l'erreur d'exécution 13 (type incompatible). Je n'arrive pas à comprendre. Avant le filtre, ça fonctionne, après le filtre j'ai cette erreur.

    Quelqu'un aurait une idée ?

    Merci d'avance.
    Pascal.

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Sans voir le code, c'est pas évident de t'aider.
    Tu es technicien de maintenance, si je te dis
    "Mon moteur marche pas, aidez moi"
    Je pense que pour pouvoir m'aider, tu vas avoir besoin d'informations supplémentaires, ben nous aussi

    Tu peux utiliser un point d'arrêt dans ton code (touche F9 pour le basculer), l'idéal étant de le placer avant la ligne qui plante. Ensuite, tu exécutes ton code, quand VBA va arriver sur le point d'arrêt , il va stopper l'exécution du code. A partir de la, tu peux regarder ce que contiennent les variables. Tu peux aussi placer des espions.
    Tu trouveras des infirmations ici.
    La touche F8 te permettra d'avancer pas à pas jusqu'à la ligne qui plante.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut Filtre listbox
    Salut Qwazerty,

    Apparemment mon code plante dès la lecture du premier textbox, le reste n'est pas lu :
    Lorsque ma listbox est remplie je peux sélectionner un élément. ça fonctionne tant que je ne filtre pas. (tous mes textbox s'affiche sur ma userform)
    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
    Private Sub ListBox1_Change()
    derlig = Range("A65536").End(xlUp).Row
    If ListBox1.ListIndex = -1 Then
     
        Exit Sub
    End If
    lig = ListBox1.List(ListBox1.ListIndex, 1)
    TextBox3.Value = Cells(lig, 1).Value
    TextBox11.Value = Cells(lig, 2).Value
    TextBox10.Value = Cells(lig, 3).Value
    TextBox6.Value = Cells(lig, 4).Value
    TextBox12.Value = Cells(lig, 5).Value
    TextBox4.Value = Cells(lig, 6).Value
    TextBox5.Value = Cells(lig, 7).Value
    TextBox13.Value = Cells(lig, 8).Value
    TextBox14.Value = Cells(lig, 9).Value
    TextBox15.Value = Cells(lig, 13).Value
    TextBox8.Value = Cells(lig, 11).Value
    TextBox9.Value = Cells(lig, 12).Value
    TextBox7.Value = Cells(lig, 10).Value
    End Sub
    Voici ma TextBox de filtre. Elle fonctionne bien mais dès que je sélectionne un élément dans la ListBox, ça plante direct à la textbox3 : incompatibilité de type.
    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
    Public Sub TextBox1_Change()
    derlig = Range("A65536").End(xlUp).Row
    If rma = True Then
        ListBox1.ListIndex = -1
        ListBox1.Clear
        For i = 2 To derlig
            If InStr(Cells(i, 1).Value, TextBox1.Value) > 0 Then ListBox1.AddItem Cells(i, 1).Value
        Next i
    End If
    If tc = True Then
    ListBox1.ListIndex = -1
    ListBox1.Clear
    For i = 2 To derlig
        If InStr(Cells(i, 4).Value, TextBox1.Value) > 0 Then ListBox1.AddItem Cells(i, 4).Value
    Next i
    End If
    If client = True Then
        ListBox1.ListIndex = -1
        ListBox1.Clear
        For i = 2 To derlig
            If InStr(Cells(i, 6).Value, TextBox1.Value) > 0 Then ListBox1.AddItem Cells(i, 6).Value
        Next i
    End If
    If produit = True Then
        ListBox1.ListIndex = -1
        ListBox1.Clear
        For i = 2 To derlig
            If InStr(Cells(i, 7).Value, TextBox1.Value) > 0 Then ListBox1.AddItem Cells(i, 7).Value
        Next i
    End If
    End Sub
    Je n'arrive pas à voir autre chose avec les astuces de débug. j'espère avoir donné un peu plus d'infos exploitable.

    Merci de votre aide.

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Par défaut
    Bonjour,

    Ta colonne 1 contient quoi ? quel type de données ?

    Est que ce n'est pas parce quelle contient un code d'erreur ou quelle est vide.

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Sur le code en lui même, quelques conseils
    • Renommer les composants du userform permet d'identifier rapidement de quoi il est question dans le code et donc facilite le débugueur
    • Il vaut mieux déclarer ses variables, ça a plein d'avantage (limite les risques de faute de frappe, par exemple). Pour ne pas oublier de le faire, il suffit d'ajouter tout en haut de chaque page de code "Option explicit".
    • Les appels à Cells, Range,... sans préciser la feuille et le classeur et selon moins source d'erreur et rend le code moi facile à suivre
      En ce qui me concerne j'utilise le plus souvent possible le codename de la feuille, comme ça on est sur de la feuille sur laquelle on travaille.
      Nom : 2015-01-18_134906.png
Affichages : 1819
Taille : 14,2 Ko
    • L'utilisation de tableaux structurés sur la feuille excel permet de simplifier/clarifier le code (Pierre fauconnier à fait des billets sur son Blog à se sujet). Un outil vraiment incontournable
    • VBA permet de faire des boucles, autant en profiter
      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
      Private Sub ListBox1_Change()
      Dim aCompo As MSForms.Control, aTxtBox As MSForms.TextBox
      Dim DerLig As Long, Lig As Long
       
          DerLig = Range("A65536").End(xlUp).Row
          If ListBox1.ListIndex <> -1 Then
              Lig = ListBox1.List(ListBox1.ListIndex, 1)
              'On boucle sur les controle du user form
              For Each aCompo In Me.Controls
                  'On regarde s'il s'agit d'un textbox
                  If TypeOf aCompo Is MSForms.TextBox Then
                      'On transtype
                      Set aTxtBox = aCompo
                      'On regarde le contenu de tag
                      If aTxtBox.Tag <> "" And IsNumeric(aTxtBox.Tag) Then
                          'On utilise la valeur de tag (qui contient la colonne correspondante dans le tableau
                          aTxtBox.Value = Feuil1.Cells(Lig, CInt(aTxtBox.Tag)).Value
                      End If
                  End If
              Next
          End If
          End If
      End Sub
      Ici il suffit de mettre dans la propriété tag de chaque textbox, le numéro de colonne correspondante. Il existe d'autre variante, en utilisant le nom des colonnes du tableau structuré par exemple...
      Tu peux aussi regarder du coté de propriété ControlSource du textbox (avec le textbox à Locked true si tu ne veux faire que de l'affichage)
      Également RowSource pour les listes.
    • Idem pour l'autre partie du code, autant mettre une variable pour la colonne est définir cette variable pour ensuite n'avoir qu'un seul code
      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
      Public Sub TextBox1_Change()
      Dim DerLig As Long
      Dim iCol As Integer
       
          DerLig = Range("A65536").End(xlUp).Row
          'On défini la colonne pointée en fonction des variables
          If Rma Then
              iCol = 1
          ElseIf Tc Then
              iCol = 4
          ElseIf Client Then
              iCol = 6
          ElseIf Produit Then
              iCol = 7
          End If
       
          'On regarde si une colonne est indiqué dans iCol
          If iCol > 0 Then
              ListBox1.ListIndex = -1
              ListBox1.Clear
              For i = 2 To DerLig
                  If InStr(Cells(i, iCol).Value, TextBox1.Value) > 0 Then ListBox1.AddItem Cells(i, iCol).Value
              Next i
          End If
      End Sub
    • J'avais réalisé des Modules de Classe permettant d'automatiser ce genre de liaison entre tableau structuré et composant d'un UserForm, tu trouveras un lien vers la discution dans ma signature. C'est peut-être un poile plus compliqué à mettre en oeuvre mais quasi plus de code VBA.


    Ceci dit tout ça ne résoudra pas ton problème.
    Si tu mets ton point d'arrêt sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TextBox3.Value = Cells(lig, 1).Value
    Et que tu places ta souris (ou un espion) sur Cells(lig, 1).Value, qu'est ce que ça te donne? Visiblement il n'arrive pas à transtyper tout seul le contenu de la cellule en chaine de caractère (string) pour le placer dans le TextBox.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut Suite
    Bonjour,

    Désolé pour le retard je ne me suis remis sur la macro qu'aujourd'hui.

    Pascal Lob, je n'ai que du texte dans mes cellules et aucunes n'est vide. Le filtre fonctionne, c'est vraiment au moment de la sélection, ça marche avant le filtre (en sélectionnant une ligne toutes mes données s'affichent dans la UserForm) et ça ne marche plus après.

    Qwazerty, je reconnais que mon code est bord*lique, je vais faire le ménage.
    Au niveau de l'espion, je comprends vaguement qu'il n'arrive pas à lire la méthode CurtargetY et CurY. Il me mets que le contrôle doit avoir un focus. Il me sort la fonction SetFocus à utiliser.

    Je me demande si je ne me suis pas lancé dans un truc trop compliqué pour un simple amateur.

    En tous les cas merci pou votre aide

    Pascal.

  7. #7
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Citation Envoyé par Pascalkimi Voir le message
    Au niveau de l'espion, je comprends vaguement qu'il n'arrive pas à lire la méthode CurtargetY et CurY. Il me mets que le contrôle doit avoir un focus. Il me sort la fonction SetFocus à utiliser.
    ??
    De quoi parles-tu? Je ne vois pas CurtargetY et CurY dans le code que tu fournis.

    Tu ne pourrais pas faire une version sans donnée sensible de ton fichier et le poster?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut Lisbox
    Salut Qwazerty,

    Voici le fichier en pièce jointe.
    Il y a 3 boutons que je n'ai pas encore programmé, le programme n'est pas terminé. "ouvrir le Word" qui ouvrira un Word comme son nom l'indique, "Répertoire" dans "renseigner la base" qui va créer un répertoire sur le disque et "répertoire" dans la recherche qui va aller ouvrir le répertoire en question. Donc c'est normal qu'il n'y ai rien encore.

    J'ai mis un maximum de commentaires pour que ce soit le plus clair possible, j'espère que c'est le cas.

    Sinon soit pas trop dur sur le code, je suis juste un amateur de base. Si tu es pro il va peut être te paraître ridicule ou au mieux non optimisé.

    Merci de ton aide.
    Pascal.
    Question Forum.xlsm

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Pour que ton code fonctionne, tu dois toujours placer le numéro de la ligne du tableau dans la seconde colonne du ListBox, y compris quand il n'y a pas de filtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub WordRecherche_Change() 'Recherche
    Dim DerLig As Long
        With Feuil3
            DerLig = .Cells(.Rows.Count, "A").End(xlUp).Row
            ListBox1.Clear
            For i = 2 To DerLig
                If InStr(.Cells(i, 5).Value, WordRecherche.Value) > 0 Then
                    ListBox1.AddItem .Cells(i, 5).Value
                    'Attention les index de liste commence à 0
                    ListBox1.List(ListBox1.ListCount - 1, 1) = i
                End If
            Next i
        End With
    End Sub
    En mode design (quand tu fais la construction de ton userform), dans les propriétés de la listbox, tu mets BoundCount à "2" et columnWidths à ";0 pt" (rien avant le ;, ça n'est pas une erreur, VBA mettra la plus grande valeur possible)


    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
    Private Sub ListeProduit_Change()
    Dim DerLig, i As Integer ' ne montrer que ce qui est filtré dans la listbox
     
    'Sheets("Base").Activate
    'Range("A1:I1").Select
    With Feuil3
        .Range("$A$1:$I$" & derligfichier).AutoFilter Field:=4, Criteria1:=ListeProduit.Value
     
        DerLig = .Cells(.Rows.Count, "A").End(xlUp).Row
     
        For i = 2 To DerLig 'remplissage de la listbox
            If Not Rows(i).Hidden Then
                ListBox1.AddItem .Cells(i, 5)
                ListBox1.List(ListBox1.ListCount - 1, 1) = i
            End If
        Next i
     
    End Sub
    J'ai aussi fait un essai avec les Modules de classe que j'avais réalisés pour gérer les interactions entre "base de données"(sous forme de tableaux structurés) et UserForm. En PJ.

    Quoi que tu fasses par la suite, je te conseille très fortement (aucune moquerie là dedans, on a tous débuté)

    • De supprimer toutes les .Activate, .Select, ActiveSheet,...
      Les feuilles et range n'ont pas besoin d'être active pour travailler dessus, seules les activation pour que l'utilisateur se retrouve devant une page ou une plage donnée devrait être utiliser (avec quelques rares autres cas)
    • Indenter ton code même si c'est un test
    • Pointer la feuille sur laquelle tu vas travailler
    • Mettre en place des tableaux structurés (indépendamment des module de classe, tu verras que tes données sont placées dans des tableaux structurés. Aide toi des tutos/billets de Pierre Fauconnier sur le sujet.
      Ça te simplifiera la vie à plusieurs égares, par exemple
      • Le TS (Tableau Structuré) te donnera la dernière ligne avec
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
         DerLig = Feuil3.ListObjects("Tab_Source").ListRows.count
        Code indicatif, à adapter, non testé
      • Dans ta procédure ListeGamme_Change, comme je l'ai fait dans mon code, tu pourras, avec les TS en place, utiliser directement le texte contenu dans le combobox pour pointer la colonne dans l'autre tableau
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Feuil3.ListObjects("Tab_Source").ListColumns(ListeGamme.value).index
        Code indicatif, à adapter, non testé. Te retournera directement l'index de la colonne ou tu devras prendre tes valeurs.
      • ....

    C'est quelques éléments te permettront déjà de faire un code plus rapide, plus clair et plus robuste

    [Edit]
    Tu as le tutoriel de Pierre sur les TS, tu y trouveras matière
    Modélisation des liaisons entre userform et table de données Excel (tableau structuré) - Contribuez (developpez.net)
    Ainsi que celui que vient de sortir Laurent_Ott sur une simplification de l'utilisation des TS à travers des outils
    [Toutes versions] [Tutoriel] Fonctions en VBA pour gérer les Tableaux Structurés d’Excel [Tutoriel] - Macros et VBA Excel (developpez.net)
    [/Edit]
    ++
    Qwaz
    Fichiers attachés Fichiers attachés

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut Filtre VBA
    Salut Qwazerty,

    ça marche nickel !
    ça me montre le chemin que j'ai encore à parcourir pour être simplement un amateur confirmé
    Un énorme merci pour ton travail et le temps que tu as consacré à ma demande. C'est génial qu'il y ait des gens comme toi

    Je vais suivre tes conseils et mettre plus la tête dans le code si je veux développer d'autres applications, les idées ça manque pas mais les connaissances si.

    Encore merci
    Pascal.

  11. #11
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut Listbox VBA
    Salut Qwazerty,

    J'ai encore un petit problème. J'utilise ta macro qui fonctionne nickel à l'exception d'une petite chose. Lorsque j'affiche la dernière ligne du tableau excel dans la Listbox après un filtrage les infos correspondantes ne s'affichent pas. C'est la seule ligne qui ne fonctionne pas. Avant le filtre ça s'affiche correctement. J'ai essayé de corriger mais sans succès.
    Je suis désolé de te solliciter une fois de plus après le travail que tu as déjà fait.

    En espérant que tu repasses par ici

    Merci d'avance.
    Pascal.

  12. #12
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Alors en fait il y a deux problèmes qui sont en fait issus de la même cause. Pour les corriger, il y a deux modifications à faire

    Quand le listBox est rempli, on navigue dans la "base de données" via MoveToRow(), le dernier appel est pour la ligne trois (dernière ligne de la base). On quitte ensuite la procédure mais le curseur est toujours sur la ligne 3.
    Donc lorsque tu sélectionnes tout de suite après (le problème n'apparait pas si tu sélectionnes d'abord la ligne 1 ou 2) la ligne 3, dans le code du module de classe (Cls_TSToDataFields - MoveToRow), les événements déclenchés normalement par un déplacement du curseur ne sont pas appelés (BeforeChange, AfterChange,....)... puisque qu'on pointe déjà la ligne 3... il n'y a pas de changement pour lui.

    Voici les deux modifications à apporter à ton code, elles consistent à forcer le curseur à pointer la ligne -1 (absence de ligne) quand aucune ligne n'est sélectionnée.

    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
    Private Sub FillListBox()
    Dim Crit_Titre As String, Crit_Produit As String
        'On défini les critères
        Crit_Produit = IIf(ListeProduit.Value = "", "*", ListeProduit.Value)
        Crit_Titre = "*" & WordRecherche.Value & "*"
     
        ListBox1.Clear
        For iRow = 1 To MyData_Base.DataFields.RowCount
            If MyData_Base.DataFields.MoveToRow(iRow) Then
                If (MyData_Base.DataFields.Field("Titre").DataValue Like Crit_Titre) And (MyData_Base.DataFields.Field("Produit").DataValue Like Crit_Produit) Then
                    ListBox1.AddItem iRow
                    ListBox1.List(ListBox1.ListCount - 1, 1) = MyData_Base.DataFields.Field("Titre").DataValue
                End If
            End If
        Next
        MyData_Base.MoveToRow -1
        MyData_Base.ClearCtrlsContents
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ListBox1_Change() 'Lorsqu'un élément est sélectionné dans la Listbox les données correspondantes s'affichent dans la userform
        If ListBox1.ListIndex <> -1 Then
            MyData_Base.MoveToRow ListBox1.List(ListBox1.ListIndex, 0)
        Else
            MyData_Base.MoveToRow -1
            MyData_Base.ClearCtrlsContents
        End If
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  13. #13
    Membre averti
    Homme Profil pro
    Technicien support automatisme
    Inscrit en
    Septembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien support automatisme

    Informations forums :
    Inscription : Septembre 2015
    Messages : 32
    Par défaut Filtre
    Salut Qwazerty,

    Encore merci pour ton aide, tout marche à merveille
    C'est génial !

    Pascal.

Discussions similaires

  1. [XL-2010] Transfert d'un dictionary dans une listbox ( VBA)
    Par omrsmiloud dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/03/2018, 19h58
  2. [XL-2007] modifier une valeur d'une listbox (VBA Excel)
    Par leyjah dans le forum Excel
    Réponses: 1
    Dernier message: 25/04/2013, 06h03
  3. [XL-2007] Modifier une valeur d'une listbox (VBA Excel)
    Par leyjah dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 22/04/2013, 18h32
  4. [Autocad] Insertion d'une ligne dans une listbox (VBA)
    Par stick25 dans le forum Général VBA
    Réponses: 8
    Dernier message: 18/03/2010, 11h56
  5. filtrage dans une listbox - VB6
    Par captainamerica75 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 29/05/2007, 15h45

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