Ne pas afficher certaines lignes dans la listbox

Bonjour à tous,

Dans le formulaire de recherche, j'ai des boutons pour n'afficher que les modèles de motos auxquelles correspondent les pièces.

Dans l'exemple suivant, je voudrais que quand je sélectionne la " 650E " que la ligne qui correspond au 400 / 500 E ne s'affiche pas.
Pour cela, j'ai un champ " 650 E " , colonne X (c'est un hasard que ce soit cette colonne là) que j'ai rempli avec un X majuscule dans le Tableau1, onglet Honda,

Dans mon code pour le bouton " 650 E ", cela sélectionne la colonnes AH qui contient les " cyl_650 " ET la colonne BE pour les " typ_E ", car malheureusement pour moi, les 500 GL et 650 C ont ce régulateur.

regulateur 01

Dans le formulaire " RechercherHonda

" , le code pour ce bouton est le suivant :

Private Sub OptionButton650E_Click()
     If OptionButton650E.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 33).Value = "650"
               .Cells(1, 56).Value = "E"
          End With
          UserForm_Initialize
     End If
End Sub

Je ne sais pas comment m'y prendre pour faire en sorte que lorsqu'il y a un " X " dans la colonne X, donc la numéro 24, de la ligne que celle-ci ne s'affiche pas.
NB : comme ce champ dans d'autres cas contiendra du texte, je ne peux exclure les lignes où ce champ en contiendra. Ce champ peut être vide aussi.

Comme j'en ai deux ou trois combinaisons dans le même cas, j'appliquerai la même méthode.
Merci d'avance de votre aide éclairée.

Je crois que j'ai trouvé.

J'ai mis ça, mais si quelqu'un pouvait me confirmer que la syntaxe est correcte, cela me rassurerait.

Private Sub OptionButton650E_Click()
     If OptionButton650E.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 33).Value = "650"
               .Cells(1, 56).Value = "E"
            ' exclu les lignes où un X est dans le champ de saisi de la vue des 650 E
               .Cells(1, 23).Value = "<>X"
          End With
          UserForm_Initialize
     End If
End Sub

Merci d'avance

Salut papicx

Voici le fichier avec le code allégé et modifié

Pour info, il est inutile de mettre du code derrière chaque Option Button puisqu'il y a un module de classe existant qui peut servir à ça également

A+

Merci JExceL2fr,

Merci beaucoup, je vais regarde ça.

Par contre, je ne comprends pas ce que tu veux dire. Qu'as tu remarqué qui ne va pas dans mon fichier, et surtout où ?

il est inutile de mettre du code derrière chaque Option Button puisqu'il y a un module de classe existant qui peut servir à ça également

A+

Salut Patrice,

Dans le code de ton USF "RechercherHonda", toutes ces lignes

Private Sub OptionButton400B_Click()         ' sélectionne les réponses si ces 2 conditions sont vraies
     If OptionButton400B.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 30).Value = "400"
               .Cells(1, 53).Value = "B"
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton400Cb_Click()
     If OptionButton400Cb.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 30).Value = "400"
               .Cells(1, 54).Value = "C"
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton400E_Click()
     If OptionButton400E.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 30).Value = "400"
               .Cells(1, 56).Value = "E"
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton500A_Click()
     If OptionButton500A.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 32).Value = "500"
               .Cells(1, 52).Value = "A"
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton500B_Click()
     If OptionButton500B.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 32).Value = "500"
               .Cells(1, 53).Value = "B"
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton500Ca_Click()
     If OptionButton500Ca.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 32).Value = "500"   '32 au lieu de 33
               .Cells(1, 54).Value = "C"
               .Cells(1, 39).Value = "<>"    ' colonne AN, cellule non vide, TextBox500Ca, numéro de la vue et de la pièce sur les microfiches Honda
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton500Cb_Click()
     If OptionButton500Cb.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 32).Value = "500"
               .Cells(1, 54).Value = "C"
               .Cells(1, 21).Value = "<>"    ' colonne V, cellule non vide, TextBox500Cb, numéro de la vue et de la pièce sur les microfiches Honda
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton500Da_Click()
     If OptionButton500Da.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 32).Value = "500"
               .Cells(1, 55).Value = "D"
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton500E_Click()
     If OptionButton500E.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 32).Value = "500"
               .Cells(1, 56).Value = "E"        ' correction papicx 20/07/2026 il y avait 56 et "G"
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton500GL_Click()
     If OptionButton500GL.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 32).Value = "500"
               .Cells(1, 57).Value = "G"
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton500T_Click()
     If OptionButton500T.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 58).Value = "500 T"
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton500Z_Click()         ' sélectionne les réponses si ces 2 conditions sont vraies
     If OptionButton500Z.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 32).Value = "500"
               .Cells(1, 49).Value = "Z"
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton650C_Click()
     If OptionButton650C.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 33).Value = "650"
               .Cells(1, 54).Value = "C"
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton650E_Click()
     If OptionButton650E.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 33).Value = "650"
               .Cells(1, 56).Value = "E"
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton650GL_Click()
     If OptionButton650GL.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 33).Value = "650"
               .Cells(1, 57).Value = "G"
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButton650T_Click()
     If OptionButton650T.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
               .Cells(1, 59).Value = "650 T"
          End With
          UserForm_Initialize
     End If
End Sub

Private Sub OptionButtonAucunType_Click()
     If OptionButtonAucunType.Value = True Then
          With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
               .ClearContents
          End With
          UserForm_Initialize
     End If
End Sub

Peuvent être remplacées (si j'ai bien compris le principe) par le code suivant dans le module de classe "ClasseOptionButton"

Private Sub Opt_Click()
  Dim sCyl As String, sType As String, sMoto As String
  Dim ColC As Long, ColT As Long, ColM As Long
  Opt.BackColor = &H80FFFF                ' couleur jaune si actif
  If Opt.Value = True Then
    If Opt.Caption = "aucun type particulier" Then
      With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
      .ClearContents
      End With
      ' Relancer la mise à jour de l'USF
     Call RechercherHonda.MàJ_USF
     ' On sort
     Exit Sub
    End If
    ' Sinon récupérer les infos
    sCyl = Left(Opt.Caption, 3)
    sType = Trim(Mid(Opt.Caption, 4, Len(Opt.Caption) - Len(sCyl)))
    sMoto = sCyl & " " & sType
    ' Trouver la colonne de la moto
    ColC = NumCol("cyl_" & sCyl) - 1
    If ColC = 0 Then
      MsgBox "Impossible de trouver la cylindrée : " & sCyl, vbCritical, "ATTENTION ..."
      Exit Sub
    End If
    ColT = NumCol("typ_" & Left(sType, 1)) - 1
    If ColT = 0 Then
      MsgBox "Impossible de trouver le type : " & sType, vbCritical, "ATTENTION ..."
      Exit Sub
    End If
    ColM = NumCol(sMoto) - 1
    If ColM = 0 Then
      MsgBox "Impossible de trouver la moto : " & sMoto, vbCritical, "ATTENTION ..."
      Exit Sub
    End If
    With Range("Tableau1").ListObject.HeaderRowRange.Offset(-1)
      .ClearContents
      .Cells(1, ColC).Value = sCyl
      .Cells(1, ColT).Value = sType
      .Cells(1, ColM).Value = "<>"
    End With
    ' Relancer la mise à jour de l'USF
    Call RechercherHonda.MàJ_USF
  End If
End Sub

J'espère que ce sera plus clair

A+

Rechercher des sujets similaires à "pas afficher certaines lignes listbox"