Combobox et suppresion de ligne
Bonsoir à tous,
Je cherche à supprimer des lignes selon le(s) choix fait(s) à l'aide des comboboxes de l'usf :
1. si on ne choisit que la localisation, ne seront supprimées que les lignes pour lesquelles la localisation ne correspond pas
2. si on choisit la localisation et le bureau, on supprime les lignes ne correspondant pas à ces 2 choix
3. enfin si les 3 combobox sont remplies, on supprime les lignes ne respectant pas le choix fait.
J'ai besoin de votre aide, je n'y arrive pas... Le code que j'ai écrit ne fonctionne pas...
Merci beaucoup,
Bonne soirée,
Amicalement
Bonjour
Bonne année
Pourquoi utilises tu les données de la feuille "Base" pour effacer des lignes dans la feuille "Feuil1" ?
Il risque de ne pas y avoir concordance
Exemple France - 324 - Patron1
A tester
Bonsoir Banzai64,
Bonne année à toi aussi et à tous tes proches
Merci beaucoup pour ton aide !
Pourquoi utilises tu les données de la feuille "Base" pour effacer des lignes dans la feuille "Feuil1" ?
En fait, dans mon projet, les 2 feuilles sont dans 2 classeurs différents ! La Feuil1 est issue d'une extraction de données, la feuille "Base" est dans un fichier contenant le reste de mon projet. Je les ai regroupées ici pour simplifier ma demande.
J'ai modifié ton code ainsi :
Option Explicit
Dim Ws As Worksheet
Private Sub CbbBureau_Change()
Dim Mondico As Object
Dim J As Long
Me.CbbPatron.Clear
If Me.CbbBureau.ListIndex = -1 Then Exit Sub
Set Mondico = CreateObject("Scripting.Dictionary")
With Me.CbbPatron
.Clear
For J = 3 To Ws.Range("H" & Rows.Count).End(xlUp).Row
If Ws.Range("F" & J) Like Me.CbbLocalisation And _
Ws.Range("G" & J) Like Me.CbbBureau Then
Mondico(Ws.Range("H" & J).Value) = ""
End If
Next J
If Mondico.Count > 0 Then
.List = Mondico.keys
If .ListCount = 1 Then .ListIndex = 0
End If
End With
End Sub
Private Sub CbbLocalisation_Change()
Dim Mondico As Object
Dim J As Long
Me.CbbBureau.Clear
Me.CbbPatron.Clear
If Me.CbbLocalisation.ListIndex = -1 Then Exit Sub
Set Mondico = CreateObject("Scripting.Dictionary")
With Me.CbbBureau
.Clear
For J = 3 To Ws.Range("G" & Rows.Count).End(xlUp).Row
If Ws.Range("F" & J) Like Me.CbbLocalisation Then
Mondico(Ws.Range("G" & J).Value) = ""
End If
Next J
If Mondico.Count > 0 Then
.List = Mondico.keys
If .ListCount = 1 Then .ListIndex = 0
End If
End With
End Sub
Private Sub CommandButton1_Click()
' Entrer
Dim J As Long
For J = Ws.Range("F" & Rows.Count).End(xlUp).Row To 3 Step -1
If Not Ws.Range("F" & J) Like Me.CbbLocalisation & "*" And _
Not Ws.Range("G" & J) Like Me.CbbBureau & "*" And _
Not Ws.Range("H" & J) Like Me.CbbPatron & "*" Then
Rows(J).Delete
End If
Next J
Init_ComBo_Localisation
End Sub
Private Sub UserForm_Initialize()
Set Ws = Sheets("Feuil1")
Init_ComBo_Localisation
End Sub
Sub Init_ComBo_Localisation()
Dim Mondico As Object
Dim J As Long
Me.CbbBureau.Clear
Me.CbbPatron.Clear
Set Mondico = CreateObject("Scripting.Dictionary")
With Me.CbbLocalisation
.Clear
For J = 3 To Ws.Range("F" & Rows.Count).End(xlUp).Row
Mondico(Ws.Range("F" & J).Value) = ""
Next J
If Mondico.Count > 0 Then
.List = Mondico.keys
If .ListCount = 1 Then .ListIndex = 0
End If
End With
End Sub
afin de ne conserver que les lignes remplissant les critères entrés dans les comboboxes.
J'aurais une autre requête : parfois, j'aurais besoin de ne conserver que les lignes contenant la même localisation (dans ce cas seule CbbLocalisation est renseignées). Et parfois, celles contenant la même localisation et le même bureau (CbbLocalisation et CbbBureau sont remplies, CbbPatron est vide)... C'est possible ?
Merci encore et tous mes voeux !
Bonne soirée,
Amicalement
Bonsoir
Si je comprends bien tu enlèves les lignes qui ne correspondent pas aux choix faits
Fichier de test à vérifier
Bonjour Banzai64,
Merci beaucoup !! C'est parfait, exactement ce que je cherchais !
Merci mille fois,
Bonne journée !