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.
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 SubJe 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 SubMerci 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 SubPeuvent ê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 SubJ'espère que ce sera plus clair
A+