Recherche par listView avec combobox

Signaler
Messages postés
2
Date d'inscription
mercredi 27 juin 2012
Statut
Membre
Dernière intervention
1 juillet 2012
-
Messages postés
2
Date d'inscription
mercredi 27 juin 2012
Statut
Membre
Dernière intervention
1 juillet 2012
-
Bonjour,

J'ai un problème concernant mon code pour remplir ma listview à partir de deux ComboBox successifs.

C'est à dire que je souhaite que la première ComboBox me remplisse ma listview par une première sélection puis en selectionnant mon deuxième choix affiner ma recherche.

Al'heure actuelle ca va faire 3 semaines que je cherche, que je change mon code en espérant que je trouve mais rien.

Voila le dernier code que j'ai trouvé s'il ne convient pas du tout et que cela prendrait trop de temps à m'expliquer pour vous (je n'oublie pas que vous êtes des bénévoles) dite le moi en me précisant pourquoi çà ne va pas car je suis vraiment désespéré.

Je pense que cela viens du début du code de mes combobox car c'est ce que je comprend le moins.(certains code font une partie listview??)

Merci d'avance pour tous conseils que vous pourrez m'apporter


Code VBScript :'---Prépare les entêtes des tableaux et remplit les liste des comboBox
Private Sub Userform_initialize() ' A l'ouverture du fichier
Dim DerL As Long
With ThisWorkbook.Worksheets("SUJETS")
DerL = .Range("A65536").End(xlUp).Row
TabTemp = .Range(.Cells(2, 1), .Cells(DerL, 10)).Value
.Range("A1").Sort Key1:=.Range("A2"), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
With Sheets("liste") 'Prend en compte l'onglet "liste"
Me.service.List = .Range("A2:A" & .Range("A65536").End(xlUp).Row).Value
Me.TypeFormation.List = .Range("C2:C" & .Range("C65536").End(xlUp).Row).Value
End With
With Me.ListView1 'Vide la listview au cas ou il restera quelquechose
.ListItems.Clear
With .ColumnHeaders 'Prepare les entêtes des Colonnes
.Clear
.Add , , "Référence ", 70
.Add , , "Titre", 70
.Add , , "Date Début", 50
.Add , , "Temps de Formation", 50
.Add , , "Descriptif", 150
End With
End With
End Sub
Private Sub Service_Change()
If Me.service.Value = "" Then Exit Sub ' si service non remplit sortir de la boucle
If ResultatParService.TypeFormation.Value = "" Then Exit Sub
TotalCol = 0 ' dans ce cas indiquer que le résultat est nul

With Me.ListView1
.ListItems.Clear
.CheckBoxes = True
.FullRowSelect = True
.Gridlines = True
.LabelEdit = 1
.View = lvwReport

For L = 1 To UBound(TabTemp, 1) 'si au contraire la comboBox "service" est remplit
If TabTemp(L, 2) = Me.service.Value Then

.ListItems.Add , , TabTemp(L, 1)
X = .ListItems.Count
.ListItems(X).ListSubItems.Add , , TabTemp(L, 2)
.ListItems(X).ListSubItems.Add , , TabTemp(L, 3)
.ListItems(X).ListSubItems.Add , , TabTemp(L, 4)
.ListItems(X).ListSubItems.Add , , TabTemp(L, 5)
X = X + 1
End If
Next
End With

With Me.TxtTotal 'remplissage de la textBox qui calcul combien de résultat trouvé
.Value = ListView1.ListItems.Count - 0
End With

End Sub
Private Sub TypeFormation_Change()
If ResultatParService.TypeFormation.Value = "" Then Exit Sub ' dans ce cas indiquer que le résultat est nul
Me.TypeFormation.Clear

TotalCol = 0 ' dans ce cas indiquer que le résultat est nul

With Me.ListView1
.ListItems.Clear
For L = 1 To UBound(TabTemp, 1)
If TabTemp(L, 2) Me.service.Value And TabTemp(L, 4) Me.TypeFormation.Value Then

.ListItems.Add , , TabTemp(L, 1)
X = .ListItems.Count
.ListItems(X).ListSubItems.Add , , TabTemp(L, 2)
.ListItems(X).ListSubItems.Add , , TabTemp(L, 3)
.ListItems(X).ListSubItems.Add , , TabTemp(L, 4)
.ListItems(X).ListSubItems.Add , , TabTemp(L, 5)
X = X + 1
End If
Next L
End With

With Me.TxtTotal 'remplissage de la textBox qui calcul combien de résultat trouvé
.Value = ListView1.ListItems.Count - 0
End With

End Sub

4 réponses

Messages postés
14737
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 novembre 2020
148
Bonjour,

Tu dis coder en VB6 (classement du message), tu cherches une coloration VBS, pour un code qui est visiblement du VBA (UserForm), je change le classement.

Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).

Une fois le code remis en forme, je regarderais.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,
Je pense que cela viens du début du code de mes combobox car c'est ce que je comprend le moins.

et je pense, moi, que tu veux mettre la charrue avant les boeufs, avec, pour résultat, des choses pour le moins étranges
Cette ligne de code, déjà (et par exemple) :
.Range("A1").Sort Key1:=.Range("A2"), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Tiens ! commente-nous la ... rien que le fait de la commenter devrait t'aider à comprendre pourquoi je le montre du doigt !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Toujours préférer travailler avec l'évènement Click d'une combobox ou d'une listbox, plutôt qu'avec l'évènement Change.
C'est encore plus prudent en ce qui concerne une combobox, qui comprend une zone de texte, modifiable par l'utilisateur et qui déclenche l'évènement Change !
L'article cliqué d'une combobox nommée service :
- a pour index : service.listindex
- si aucun article n'a été sélectionné, cet index = - 1
- la valeur sélectionnée correspondant à cet index (si <> -1) est donc :
service.list(service.listindex)
Tu n'es certes pas obligé de suivre cette recommandation, mais je te l'aurais faite (la prudence est en développement toujours essentielle).
J'attendrai, pour le reste, que tu aies présenté ton code indenté et entre balises codes.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
2
Date d'inscription
mercredi 27 juin 2012
Statut
Membre
Dernière intervention
1 juillet 2012

Alors je ne sais pas quoi vous dire à part que je suis vraiment désolé.Je ne sais pas où me mettre car ucfoutu m'avait déjà dis que je n'étais pas sur le bon sujet alors je l'avais déplacé mais je me suis encore trompée. Je n'ai pas d'excuses. Veuillez me pardonner.

Pour le code que Ucfoutu me demande d'expliquer et bah je ne peux pas c'est justement une des parties que je ne comprend pas et qui comme je le pressentais sont certainement à l'origine de mon problème de code.


Je dirait (pour tenter de vous montrer que je ne viens pas vers vous pour avoir la réponse tous cru )que c'est pour la mise en page de ma listview
.Range("A1").Sort Key1:=.Range("A2"), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom


Je dirais Orientation = centré
range = Ou se mettre pour commencer a écrire dans la listview
Sort KEy je ne vais pas mentir je ne sais pas du tout
Order = ordre de succession des résultats par ligne s'affichent de façon successifs vers le bas
Header = Hauteur des colonnes
OrderCustom je ne sais pas
MatchCase = je ne sais pas encore

Voila avant que vous me demandiez je ne comprend pas non plus :
With ThisWorkbook.Worksheets("SUJETS") 
DerL = .Range("A65536").End(xlUp).Row 
TabTemp = .Range(.Cells(2, 1), .Cells(DerL, 10)).Value


et
.CheckBoxes = True 
.FullRowSelect = True 
.Gridlines = True 
.LabelEdit = 1 
.View = lvwReport 

For L = 1 To UBound(TabTemp, 1) 'si au contraire la comboBox "service" est remplit 


Voila je peux comprendre que cela vous désespére....

C'est certainement pour cela que j'ai du mal a comprendre le dernier message de ucfoutu car si je viens vers vous c'est pour tenir compte de vos successions car je peux comprendre que des fois (comme ici certainement) vous vous arrachez les cheveux en voyant les codes de débutants comme moi)

Voila comme demandé j'ai mis mon code dans le bon format je l'espère.

J'espère ne pas vous avoir découragé de m'aider. bonne soiréé


:'---Prépare les entêtes des tableaux et remplit les liste des comboBox 
Private Sub Userform_initialize() ' A l'ouverture du fichier 
Dim DerL As Long 
With ThisWorkbook.Worksheets("SUJETS") 
DerL = .Range("A65536").End(xlUp).Row 
TabTemp = .Range(.Cells(2, 1), .Cells(DerL, 10)).Value 
.Range("A1").Sort Key1:=.Range("A2"), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom 
End With 
With Sheets("liste") 'Prend en compte l'onglet "liste" 
Me.service.List = .Range("A2:A" & .Range("A65536").End(xlUp).Row).Value 
Me.TypeFormation.List = .Range("C2:C" & .Range("C65536").End(xlUp).Row).Value 
End With 
With Me.ListView1 'Vide la listview au cas ou il restera quelquechose 
.ListItems.Clear 
With .ColumnHeaders 'Prepare les entêtes des Colonnes 
.Clear 
.Add , , "Référence ", 70 
.Add , , "Titre", 70 
.Add , , "Date Début", 50 
.Add , , "Temps de Formation", 50 
.Add , , "Descriptif", 150 
End With 
End With 
End Sub 
Private Sub Service_Change() 
If Me.service.Value = "" Then Exit Sub ' si service non remplit sortir de la boucle 
If ResultatParService.TypeFormation.Value = "" Then Exit Sub 
TotalCol = 0 ' dans ce cas indiquer que le résultat est nul 

With Me.ListView1 
.ListItems.Clear 
.CheckBoxes = True 
.FullRowSelect = True 
.Gridlines = True 
.LabelEdit = 1 
.View = lvwReport 

For L = 1 To UBound(TabTemp, 1) 'si au contraire la comboBox "service" est remplit 
If TabTemp(L, 2) = Me.service.Value Then 

.ListItems.Add , , TabTemp(L, 1) 
X = .ListItems.Count 
.ListItems(X).ListSubItems.Add , , TabTemp(L, 2) 
.ListItems(X).ListSubItems.Add , , TabTemp(L, 3) 
.ListItems(X).ListSubItems.Add , , TabTemp(L, 4) 
.ListItems(X).ListSubItems.Add , , TabTemp(L, 5) 
X = X + 1 
End If 
Next 
End With 

With Me.TxtTotal 'remplissage de la textBox qui calcul combien de résultat trouvé 
.Value = ListView1.ListItems.Count - 0 
End With 

End Sub 
Private Sub TypeFormation_Change() 
If ResultatParService.TypeFormation.Value = "" Then Exit Sub ' dans ce cas indiquer que le résultat est nul 
Me.TypeFormation.Clear 

TotalCol = 0 ' dans ce cas indiquer que le résultat est nul 

With Me.ListView1 
.ListItems.Clear 
For L = 1 To UBound(TabTemp, 1) 
If TabTemp(L, 2) Me.service.Value And TabTemp(L, 4) Me.TypeFormation.Value Then 

.ListItems.Add , , TabTemp(L, 1) 
X = .ListItems.Count 
.ListItems(X).ListSubItems.Add , , TabTemp(L, 2) 
.ListItems(X).ListSubItems.Add , , TabTemp(L, 3) 
.ListItems(X).ListSubItems.Add , , TabTemp(L, 4) 
.ListItems(X).ListSubItems.Add , , TabTemp(L, 5) 
X = X + 1 
End If 
Next L 
End With 

With Me.TxtTotal 'remplissage de la textBox qui calcul combien de résultat trouvé 
.Value = ListView1.ListItems.Count - 0 
End With 

End Sub