cs_massi
Messages postés28Date d'inscriptionmardi 18 mars 2003StatutMembreDernière intervention31 janvier 2013 10 juil. 2011 à 20:08
Bonsoir
quelle technique de programmation excelent.
SVP,
comment compter nombre de lignes filtrées
afficher le résultat dans un label
encore bravo pour ce progamme qui va servir toutes les personnes utilisant excl (vba)
merci
planetesud
Messages postés6Date d'inscriptionmercredi 10 juin 2009StatutMembreDernière intervention14 octobre 2019 6 avril 2011 à 16:53
Bonjour,
J'ai trouvé ce code super, mais je ne suis pas sure que l'on puisse encore ajouter des commentaires à cet endroit, je tente quand même.
Je suis débutante XXL en VBA et j'ai un problème.
J'ai remplacé la listbox par une combobox et j'ai rajouté 2 autres combobox, de façon à ce que l'utilisateur puisse filtrer selon 2 critéres en selectionnant la colonne à filtrer à l'aide des combo 1 et 3.
Mon problème est le suivant, je n'arrive pas à alimenter ma listview en combinant les 2 filtres, une question similaire avait été posée par "Robindesforets" et la réponse avait été "Tu testes ensuite quel est le nombre de critères utilisé par l'utilisateur puis tu intègres chaque couple combobox CHAMP et combobox CRITERE dans un clause WHERE pour filtrer ta listview"
Je ne comprends pas ce que je dois faire.
Quelqu'un pourrait-il m'aider SVP ?
D'avance merci.
Sandrine
hotus25
Messages postés1Date d'inscriptionjeudi 18 décembre 2008StatutMembreDernière intervention12 juillet 2010 12 juil. 2010 à 10:31
Bonjour,
Tout d'abord je tiens à vous féliciter lesly_lodin car ce code est très utile!
Mais étant débutant j'ai un peu du mal à l'adapter à mon cas. Je souhaiterais que le filtre ne s'effectue pas sur le premier mot d'une phrase d'une colonne mais plutot sur n'importe quelle mot de la phrase.
Il faut modifier cette ligne je suppose If LCase$(Left$(oRng.Offset(0, iCol), Len(sFilter))) = LCase$(sFilter) Then
mais comment...
Merci pour toute aide.
cs_Gekco
Messages postés20Date d'inscriptionmercredi 24 mars 2010StatutMembreDernière intervention17 mai 2010 28 avril 2010 à 23:33
Bonjour,
Vraiment nickel de chez nickel ton code mais j'ai tout de même un petit soucis.
J'ai tenté tout bêtement d'adapter un peu en remplaçant ton textbox1 par une Combobox2 (puisque l'on est pas censé savoir parfois ce que l'on doit inscrire dans une textbox, bref). Seulement, j'obtiens des doublons. Alors pour les supprimer j'ai tenté ce code ci :
Private Sub ComboBox2_Change()
Call LVW_Fill(Trim$(ComboBox2.Text), ComboBox1.ListIndex)
End Sub
Private Sub ComboBox2_DropButtonClick()
'Variables locales
Dim iCnt2 As Integer
Dim i As Integer
Dim oRng2 As Excel.Range
Dim bAdd As Boolean
'Remplit la Combo
Set oRng2 = Feuil1.Cells(1, 1)
For iCnt2 = 1 To 800 '-- 800 lignes
For i = 0 To ComboBox2.ListCount - 1
If oRng2.Offset(iCnt2, 1).Text = ComboBox2.List(i) Then
bAdd = True
Exit For
End If
Next i
If bAdd = False Then ComboBox2.AddItem oRng2.Offset(iCnt2, 1)
Next iCnt2
End Sub
Mais ça ne marche pas bien et cela stop à la premiere donnée qu'il trouve en double. Comment puis-je régler cela au sein de ton code ?
Merci
PS: Sinon Bravo, il m'est d'une grande utilité
cs_Le Pivert
Messages postés7903Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention11 mars 2024137 28 janv. 2010 à 17:38
cs_lesly_lodin
Messages postés13Date d'inscriptionvendredi 13 octobre 2006StatutMembreDernière intervention12 janvier 2010 12 janv. 2010 à 16:39
Cher SHINPOO7,
Ce code "super nickel" que j'ai mis à la disposition des utilisateurs de CodeS-SourceS ne prétend pas être LA solution à un remplissage dynamique d'une ListView. C'est une ébauche de solution qui a le mérite de donner satisfaction à la demande initiale.
Je n'aime donc pas trop le terme "triche" qui dévalorise une solution qui fonctionne correctement. Libre à toi de l'optimiser et de nous en faire profiter. Je serai le premier à t'en féliciter.
Bien le bonjour de la Guadeloupe ;oD
shinpoo7
Messages postés1Date d'inscriptionvendredi 13 février 2009StatutMembreDernière intervention11 janvier 2010 11 janv. 2010 à 00:08
Bon OK le code est super nickel mais c'est un peu de la triche dans la mesure où la feuille est relue à chaque fois que le texte de la textbox1 change ! C'est pas dynamique !
Le titre devrait être "filtre sur les données d'une feuille de calcul et affichage dans une listview."
Je voudrais faire pareil avec les contacts de Outlook mais la connexion est lente. Je ne veux pas relire tous les contacts à chque fois !
Si quelqu'un a une idée ! Dommage qu'on puisse pas mettre la hauteur de ligne à 0 pour masquer celles qui sont filtrées !
robinsdesforets
Messages postés8Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention 7 novembre 2009 7 nov. 2009 à 08:14
Bon je désespére, tous le monde est en vacance ? (Post du 18/10/2009 21h:44
Une âme charitable pourse pencher sur mon problème?
robinsdesforets
Messages postés8Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention 7 novembre 2009 30 oct. 2009 à 20:25
Bonjour,
bon je relance mon post du 18/10/2009 à 21h44.
Estce que tous le monde est occupé ou ma demande est trop difficile?
Je suis certain que mon projet interesse beaucoup de personnes.
Alors envie d'avoir une notoriété ou je mets mon projet à la poubelle?
robinsdesforets
Messages postés8Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention 7 novembre 2009 21 oct. 2009 à 20:59
merci pour ta réponse (trop pro) mais là... je pense que je n'ai pas les compétences pour suivre tes explications.
Je séche...
je crois que je vais abandonner mon projet. Merci quand même à toi.
cs_lesly_lodin
Messages postés13Date d'inscriptionvendredi 13 octobre 2006StatutMembreDernière intervention12 janvier 2010 21 oct. 2009 à 09:42
Non les pros de VBA ne dorment pas , mais les temps sont durs et je n'ai que peu de temps à consacrer à ce blog. En bref tu as tout dit dans ta question :
1. A chaque fois que tu listes les champs à filtrer dans la combobox1 tu déclenches un remplissage de ta combobox2 à l'aide d'un "SELECT DISTINCT"
2. Tu testes ensuite quel est le nombre de critères utilisé par l'utilisateur puis tu intègres chaque couple combobox CHAMP et combobox CRITERE dans un clause WHERE pour filtrer ta listview
J'espère que cela t'aidera à avancer.
Bon développement.
Bon
robinsdesforets
Messages postés8Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention 7 novembre 2009 20 oct. 2009 à 23:17
Bon les Pros sont en vacances ?
Ou mon problème est insurmontable? (post du 18/10 à 21h44)
robinsdesforets
Messages postés8Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention 7 novembre 2009 18 oct. 2009 à 21:44
Bonjour,
Pour les pros de VBA, il est possible actuellement de filtrer "on the fly" le contenu de cette listview (merci à son auteur).
Mais serait il possible de la filtrer sur plusieurs critères.
je m'explique:
Il faudrait remplacer le TextBox1 existant par une ListBox1 alimenté par les données filltrées sans doublon de la combobox1.
La Listview serait alors partiellement filtrée par le choix de l'utilisateur.
Il faudrait créée ensuite un deuxième ComboBox qui alimenterait une deuxième Listbox2 (toujours alimenté sans doublon) pour un filtrage de nouveau "on the fly" de la Listview déjà filtrée par son premier choix. (Idem que la fonction filtre élaboré d'Excel sur plusieurs critères)
Je corse l'histoire, il me faut 5 comboboxs et 5 Listboxs pour que l'utilisateur trouve automatiquement dans la listview la(es) donnée(s) qu'il souhaite afin de les copier sur une autre feuille Excel.
J'avoue que je demande votre aide, je séche...
fredo97893
Messages postés2Date d'inscriptionmercredi 16 janvier 2008StatutMembreDernière intervention18 octobre 2009 18 oct. 2009 à 11:38
re-bonjour,
je souhaiterais que lorsque dans le combobox1 je selectionne DATE, que dans le textbox je ne mette que l'année et non la date entière afin de faire apparaitre dans la listview la liste de cette année. est ce possible. (Pour ce qui est de la question au dessus, j'ai trouvé.)
fredo97893
Messages postés2Date d'inscriptionmercredi 16 janvier 2008StatutMembreDernière intervention18 octobre 2009 18 oct. 2009 à 09:57
bonjour et merci pour ce petit prog.
J'aurai juste une petite question.
Pourquoi la listview n'affiche pas la dernière ligne écrite? N° commande 11077 n'apparait pas
merci de me répondre
robinsdesforets
Messages postés8Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention 7 novembre 2009 12 oct. 2009 à 19:39
Merci pour l'information, mais je veux faire un filtre automatique sur les entêtes de colonne de la listview qui serait déjà formaté par mon choix dans la listBox. En clair, je souhaite de ma BDD ( 60 colonnes, 8000 lignes) extraire des colonnes + données et faire ensuite un filtre automatique sur ces entêtes de colonnes pour qu'ensuite l'utilisateur sélectionne ses données afin de les les recopier sur une autre feuille excel.
Cordialement,
cs_lesly_lodin
Messages postés13Date d'inscriptionvendredi 13 octobre 2006StatutMembreDernière intervention12 janvier 2010 12 oct. 2009 à 19:22
Oui, pour cela il faudra disposer sur la Form cinq zones de texte (une par critère autorisé) ce qui limitera la requête à "au plus 5 critères".
Bon courage.
robinsdesforets
Messages postés8Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention 7 novembre 2009 12 oct. 2009 à 19:04
Merci pour ta réponse si rapide.
Mais j'ai oublié de te dire que je débute en VBA.
Selon toi, il semble donc possible de "formater" en dynamique sa listview avec une listbox avec l'attribut MultiSelect par l'événement change de la listBox.
Mais penses-tu qu'il est ensuite possible de filtrer cette base sur 5 critères ?
Un petit coup de pouce m'est indispensable pour démarrer.
Merci d'avance pour le temps que tu consacre aux autres.
cs_lesly_lodin
Messages postés13Date d'inscriptionvendredi 13 octobre 2006StatutMembreDernière intervention12 janvier 2010 12 oct. 2009 à 12:03
C'est réalisable, pour cela il suffit de créer ta ListBox avec l'attribut MultiSelect, puis de générer la ListView lors d'un clic sur une bouton de commande par exemple.
Bon développement.
robinsdesforets
Messages postés8Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention 7 novembre 2009 12 oct. 2009 à 06:28
bonjour, merci pour ce travail à tous.
je souhaite adapter ce code pour une BDD de 60 colonnes et 8000 lignes. je souhaite au lancement de l'userform que l'utilisateur selectionne par une listebox les entêtes de colonne qu'il souhaite afficher dans sa listview et qu'il puisse ensuite la filtrer au maximun sur 5 critères.
Cela est-il réalisable ou je demande l'impossible ?
le but pour moi étant ensuite de recopier sur une autre feuille excel ce que l'utilisateur aura sélectionné( 1 ou des lignes après son filtrage). Merci d'avance à tous .
cs_lesly_lodin
Messages postés13Date d'inscriptionvendredi 13 octobre 2006StatutMembreDernière intervention12 janvier 2010 3 avril 2009 à 17:07
De rien.
Je suis heureux de constater que ce vieux snippet rend toujours service.
Bon WE
diaz42
Messages postés12Date d'inscriptionmardi 24 février 2009StatutMembreDernière intervention 3 avril 2009 3 avril 2009 à 15:29
merci pour ce code
cs_lesly_lodin
Messages postés13Date d'inscriptionvendredi 13 octobre 2006StatutMembreDernière intervention12 janvier 2010 5 déc. 2008 à 11:54
Merci Chapata.
De quoi me remotiver ;oD
cs_chapata
Messages postés214Date d'inscriptionmercredi 2 février 2005StatutMembreDernière intervention 9 avril 20105 4 déc. 2008 à 22:31
salut,
je vais créer deux texteBox: la 1ère:= date du debut et la seconde:=date de la fin
et ensuite un boutton afficher qui contient ce code.
meci pour cette aide
je ne vous oublierez jamais.
cs_lesly_lodin
Messages postés13Date d'inscriptionvendredi 13 octobre 2006StatutMembreDernière intervention12 janvier 2010 28 oct. 2008 à 13:07
Cela provient de l'utilisation de la fonction OffSet. Dans la ligne "(CDate(oRng.Offset(i, j)) >= Dstart) And (CDate(oRng.Offset(k, l)) <= DEnd)" tu dois comparer une seule cellule à la borne Dstart et Dend.
Exemple : si la date est en colonne E on aura "(CDate(oRng.Offset(0, 4)) >= Dstart) And (CDate(oRng.Offset(0, 4)) <= DEnd)" où "oRng.Offset(0, 4)" décale le pointeur de 0 ligne et de 4 colonnes par rapport à la colonne de départ A (cf. Aide en ligne de OffSet).
Salut
vraiment desolé de t'embeter avec ça, j'ai pas le droit d'abondonner aussi facilement. J'ai essayé avec ça, rien à afficher.
-------------------------------------------------
Option Explicit
Private Sub TextBox1_Change()
Call LVW_Fill(Trim$(TextBox1.Text), ComboBox1.ListIndex)
End Sub
Private Sub UserForm_Activate()
Me.Caption = "Historique des commandes"
Set ListView1.Icons = ImageList1
Set ListView1.SmallIcons = ImageList1
Call CBO_Fill
Call LVW_Fill("", 0)
End Sub
Private Sub CBO_Fill()
'Variables locales
Dim iCnt As Integer
Dim oRng As Excel.Range
'Remplit la Combo
Set oRng = Feuil1.Cells(1, 1)
For iCnt = 0 To 13 '-- 14 colonnes
ComboBox1.AddItem oRng.Offset(0, iCnt)
Next iCnt
ComboBox1.ListIndex = 0
End Sub
Private Sub LVW_Fill(ByVal sFilter As String, ByVal iCol As Integer)
'Variables locales
Dim iCnt As Integer
Dim iRnd As Integer
Dim oRng As Excel.Range
Dim oItem As ListItem
Dim Dstart As Date, DEnd As Date, l As Date
Dim i As Variant, j As Variant, k As Variant
Dstart = #1/1/2006#
DEnd = #12/31/2006#
'Initialisation de la ListView
ListView1.ColumnHeaders.Clear
ListView1.FullRowSelect = True
ListView1.ListItems.Clear
ListView1.View = lvwReport
'Remplissage de la ListView
Set oRng = Feuil1.Cells(1, 1)
Do Until oRng.Offset(1, 0).Value = ""
'-- En-têtes
If oRng.Row = 1 Then
For iCnt = 0 To 13 '-- 14 colonnes
ListView1.ColumnHeaders.Add , , oRng.Offset(0, iCnt)
Next iCnt
'-- Données
Else
iRnd = Int((4 * Rnd) + 1)
' If LCase$(Left$(oRng.Offset(0, iCol), Len(sFilter))) = LCase$(sFilter) Then
If (CDate(oRng.Offset(i, j)) >= Dstart) And (CDate(oRng.Offset(k, l)) <= DEnd) Then
Set oItem = ListView1.ListItems.Add(, , oRng.Offset(0, 0), "Key" & iRnd, "Key" & iRnd)
For iCnt = 1 To 14 '-- 14 colonnes
oItem.ListSubItems.Add , , oRng.Offset(0, iCnt)
Next iCnt
End If
End If
Set oRng = oRng.Offset(1, 0)
Loop
End Sub
-----------------
Merci.
ve n'arrive pas comment vous remerciez Lesly_Lodin, PCPT pour cette aide.
j'ai trés bien compris.
merci encore.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 26 oct. 2008 à 19:41
HAMDANEABDELKADER ->lesly_lodin t'a répondu, et t'a indiqué le format => #mm/jj/aaaa#
forcément si tu saisies juste la STRING "#mm/jj/aaaa#", il n'y aura pas de filtre de date....
ps : "j'ai déclaré i,j,k,l as date"
1. bravo pour te relire, c'est impossible de savoir quoi sert à quoi
2. alors seul l est une DATE, le reste est VARIANT
dim dStart as date, dStop as date
dStart = #10/01/2008#
dStop = #10/31/2008#
If (cdate(oRng.Offset(i, j)) >= dStart) and (cdate(oRng.Offset(k, l)) <= dStop) then ...
j'ai déclaré i,j,k,l as date et j'ai introduit laligne:
If oRng.Offset(i, j) >= "#mm/jj/aaaa#" and oRng.Offset(k, l) <= "#mm/jj/aaaa#" then
il n'mz rien donner.
listView vide.
La procedure se fait on principe on créant deux textBox:
1- Date debut
2 Date fin
cs_lesly_lodin
Messages postés13Date d'inscriptionvendredi 13 octobre 2006StatutMembreDernière intervention12 janvier 2010 20 oct. 2008 à 11:10
Salut,
En ligne 52, il suffit de remplacer "If LCase$(Left$(oRng.Offset(0, iCol), Len(sFilter))) = LCase$(sFilter) Then" par "If oRng.Offset(i, j) >= #mm/jj/aaaa# and oRng.Offset(k, l) <= #mm/jj/aaaa#" où oRng.Offset(i, j) contient la date de début et oRng.Offset(k, l) contient la date de fin.
Bon courage.
Salut,
Ton code est formidable.
Comment faire pour filtrer une liste en fonction de deux date (DateBetween)
Date du debut et date du Fin
cs_lesly_lodin
Messages postés13Date d'inscriptionvendredi 13 octobre 2006StatutMembreDernière intervention12 janvier 2010 4 août 2008 à 14:00
Je n'ai pas beaucoup de temps devant mois ces jours-ci. Essaie de voir la documentation VBA sur la fonctionnalité AUTOFILTER de la WORKSHEET.
Bon courage.
Cdlt.
platon1977
Messages postés2Date d'inscriptionmercredi 26 octobre 2005StatutMembreDernière intervention 4 août 2008 4 août 2008 à 13:47
salut Lesly,
Merci pour le tuyau, il super ton code. encore une petite question
je suis entrain de l'adapter a une petite appli. Je rajoute des filtres : 4 en tout.
mes combo se remplissent nickel, la selction tourne bien sur le premier critère, mais bloque sur le deuxieme (ou du moin le critère 1 n'est plus pris en compte. as tu une idée.Stp ca m'aiderait beaucoup.
cs_lesly_lodin
Messages postés13Date d'inscriptionvendredi 13 octobre 2006StatutMembreDernière intervention12 janvier 2010 4 août 2008 à 13:34
BONJOUR,
Dans la ligne de code n° 53, il suffit de retirer les deux derniers paramètres : ["Key" & iRnd] et ["Key" & iRnd].
Cdlt
platon1977
Messages postés2Date d'inscriptionmercredi 26 octobre 2005StatutMembreDernière intervention 4 août 2008 4 août 2008 à 13:18
comment supprimer les logos de la liste? svp
Aegidius
Messages postés1Date d'inscriptiondimanche 22 juin 2008StatutMembreDernière intervention22 juin 2008 22 juin 2008 à 01:32
Bonsoir.
Je suis très très débutant en programmation...
et je n'arrive pas à l'adapter à mon fichier excel (5 colonnes avec titres).
Où taper le code ? L'interface est-elle à créer ?
A vous lire. Merci d'avance.
cs_card
Messages postés3Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention29 mai 2008 29 mai 2008 à 16:32
J'ai rien dit .....
je me suis seulement gourré de colonne c'est la 2
merci ça marche super
cs_card
Messages postés3Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention29 mai 2008 29 mai 2008 à 16:23
mais c'est pas mieux
si tu as une idée ...merci d'avance
cs_lesly_lodin
Messages postés13Date d'inscriptionvendredi 13 octobre 2006StatutMembreDernière intervention12 janvier 2010 28 mai 2008 à 21:14
Salut,
La fonction Rnd() est juste là à titre d'exemple. Dans ta colonne [Status], tu peux par exemple mettre la [Key] correspondant à l'image à afficher dans la [ListView1]. Cette [Key] est définie dans le contrôle [ImageList1]. Enfin, dans ton code, remplace ["Key" & iRnd] par [oRng.Offset(0, <no_col_status>).Value].
Bon développement.
Cordialement.
cs_card
Messages postés3Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention29 mai 2008 26 mai 2008 à 14:06
Salut
Super ce petit bout de code !!!
Pouvez vous m'aider ?
J'ai une colonne status et l'image doit changer en fonction du status
Comment faire puisque dans le code initial il ya un random sur les 4 images stockees dans la imagelist1
Merci d'avance
7ric
Messages postés2Date d'inscriptionlundi 14 avril 2003StatutMembreDernière intervention13 novembre 2007 13 nov. 2007 à 13:51
OK merci beaucoup
Cédric
cs_lesly_lodin
Messages postés13Date d'inscriptionvendredi 13 octobre 2006StatutMembreDernière intervention12 janvier 2010 13 nov. 2007 à 13:30
Il suffit de remplacer [Do Until oRng.Offset(1, 0).Value = ""] par [Do Until oRng.Value = ""] dans la partie "Remplissage de la ListView" de la procédure [LVW_Fill].
Cdlt
7ric
Messages postés2Date d'inscriptionlundi 14 avril 2003StatutMembreDernière intervention13 novembre 2007 13 nov. 2007 à 10:46
Excellent code effectivement.
Juste un petit problème:
Dans la feuille Excel, nous avons la dernière commande 11077.
Cette commande n'est pas reprise dans l'historique des commandes et ne pourra donc jamais être reprise.
Avez-vous pu corriger ce petit problème?
Merci d'avance,
Cédric
klhsri
Messages postés6Date d'inscriptionvendredi 19 octobre 2007StatutMembreDernière intervention 2 janvier 2009 27 oct. 2007 à 18:01
Excellent !
Je me forme à VBA (excel notamment)
Excellent code et directement utile pour toute appli de gestion
Merci
10 juil. 2011 à 20:08
quelle technique de programmation excelent.
SVP,
comment compter nombre de lignes filtrées
afficher le résultat dans un label
encore bravo pour ce progamme qui va servir toutes les personnes utilisant excl (vba)
merci
6 avril 2011 à 16:53
J'ai trouvé ce code super, mais je ne suis pas sure que l'on puisse encore ajouter des commentaires à cet endroit, je tente quand même.
Je suis débutante XXL en VBA et j'ai un problème.
J'ai remplacé la listbox par une combobox et j'ai rajouté 2 autres combobox, de façon à ce que l'utilisateur puisse filtrer selon 2 critéres en selectionnant la colonne à filtrer à l'aide des combo 1 et 3.
Mon problème est le suivant, je n'arrive pas à alimenter ma listview en combinant les 2 filtres, une question similaire avait été posée par "Robindesforets" et la réponse avait été "Tu testes ensuite quel est le nombre de critères utilisé par l'utilisateur puis tu intègres chaque couple combobox CHAMP et combobox CRITERE dans un clause WHERE pour filtrer ta listview"
Je ne comprends pas ce que je dois faire.
Quelqu'un pourrait-il m'aider SVP ?
D'avance merci.
Sandrine
12 juil. 2010 à 10:31
Tout d'abord je tiens à vous féliciter lesly_lodin car ce code est très utile!
Mais étant débutant j'ai un peu du mal à l'adapter à mon cas. Je souhaiterais que le filtre ne s'effectue pas sur le premier mot d'une phrase d'une colonne mais plutot sur n'importe quelle mot de la phrase.
Il faut modifier cette ligne je suppose If LCase$(Left$(oRng.Offset(0, iCol), Len(sFilter))) = LCase$(sFilter) Then
mais comment...
Merci pour toute aide.
28 avril 2010 à 23:33
Vraiment nickel de chez nickel ton code mais j'ai tout de même un petit soucis.
J'ai tenté tout bêtement d'adapter un peu en remplaçant ton textbox1 par une Combobox2 (puisque l'on est pas censé savoir parfois ce que l'on doit inscrire dans une textbox, bref). Seulement, j'obtiens des doublons. Alors pour les supprimer j'ai tenté ce code ci :
Private Sub ComboBox2_Change()
Call LVW_Fill(Trim$(ComboBox2.Text), ComboBox1.ListIndex)
End Sub
Private Sub ComboBox2_DropButtonClick()
'Variables locales
Dim iCnt2 As Integer
Dim i As Integer
Dim oRng2 As Excel.Range
Dim bAdd As Boolean
'Remplit la Combo
Set oRng2 = Feuil1.Cells(1, 1)
For iCnt2 = 1 To 800 '-- 800 lignes
For i = 0 To ComboBox2.ListCount - 1
If oRng2.Offset(iCnt2, 1).Text = ComboBox2.List(i) Then
bAdd = True
Exit For
End If
Next i
If bAdd = False Then ComboBox2.AddItem oRng2.Offset(iCnt2, 1)
Next iCnt2
End Sub
Mais ça ne marche pas bien et cela stop à la premiere donnée qu'il trouve en double. Comment puis-je régler cela au sein de ton code ?
Merci
PS: Sinon Bravo, il m'est d'une grande utilité
28 janv. 2010 à 17:38
Voici 2 sources qui feront peut_être son bonheur.
http://www.vbfrance.com/codes/LISTER-OUTLOOK-PARTIR-EXCEL_48091.aspx
http://www.vbfrance.com/codes/LISTVIEW_TRI_EXTENSIONS_50894.aspx
12 janv. 2010 à 16:39
Ce code "super nickel" que j'ai mis à la disposition des utilisateurs de CodeS-SourceS ne prétend pas être LA solution à un remplissage dynamique d'une ListView. C'est une ébauche de solution qui a le mérite de donner satisfaction à la demande initiale.
Je n'aime donc pas trop le terme "triche" qui dévalorise une solution qui fonctionne correctement. Libre à toi de l'optimiser et de nous en faire profiter. Je serai le premier à t'en féliciter.
Bien le bonjour de la Guadeloupe ;oD
11 janv. 2010 à 00:08
Le titre devrait être "filtre sur les données d'une feuille de calcul et affichage dans une listview."
Je voudrais faire pareil avec les contacts de Outlook mais la connexion est lente. Je ne veux pas relire tous les contacts à chque fois !
Si quelqu'un a une idée ! Dommage qu'on puisse pas mettre la hauteur de ligne à 0 pour masquer celles qui sont filtrées !
7 nov. 2009 à 08:14
Une âme charitable pourse pencher sur mon problème?
30 oct. 2009 à 20:25
bon je relance mon post du 18/10/2009 à 21h44.
Estce que tous le monde est occupé ou ma demande est trop difficile?
Je suis certain que mon projet interesse beaucoup de personnes.
Alors envie d'avoir une notoriété ou je mets mon projet à la poubelle?
21 oct. 2009 à 20:59
Je séche...
je crois que je vais abandonner mon projet. Merci quand même à toi.
21 oct. 2009 à 09:42
1. A chaque fois que tu listes les champs à filtrer dans la combobox1 tu déclenches un remplissage de ta combobox2 à l'aide d'un "SELECT DISTINCT"
2. Tu testes ensuite quel est le nombre de critères utilisé par l'utilisateur puis tu intègres chaque couple combobox CHAMP et combobox CRITERE dans un clause WHERE pour filtrer ta listview
J'espère que cela t'aidera à avancer.
Bon développement.
Bon
20 oct. 2009 à 23:17
Ou mon problème est insurmontable? (post du 18/10 à 21h44)
18 oct. 2009 à 21:44
Pour les pros de VBA, il est possible actuellement de filtrer "on the fly" le contenu de cette listview (merci à son auteur).
Mais serait il possible de la filtrer sur plusieurs critères.
je m'explique:
Il faudrait remplacer le TextBox1 existant par une ListBox1 alimenté par les données filltrées sans doublon de la combobox1.
La Listview serait alors partiellement filtrée par le choix de l'utilisateur.
Il faudrait créée ensuite un deuxième ComboBox qui alimenterait une deuxième Listbox2 (toujours alimenté sans doublon) pour un filtrage de nouveau "on the fly" de la Listview déjà filtrée par son premier choix. (Idem que la fonction filtre élaboré d'Excel sur plusieurs critères)
Je corse l'histoire, il me faut 5 comboboxs et 5 Listboxs pour que l'utilisateur trouve automatiquement dans la listview la(es) donnée(s) qu'il souhaite afin de les copier sur une autre feuille Excel.
J'avoue que je demande votre aide, je séche...
18 oct. 2009 à 11:38
je souhaiterais que lorsque dans le combobox1 je selectionne DATE, que dans le textbox je ne mette que l'année et non la date entière afin de faire apparaitre dans la listview la liste de cette année. est ce possible. (Pour ce qui est de la question au dessus, j'ai trouvé.)
18 oct. 2009 à 09:57
J'aurai juste une petite question.
Pourquoi la listview n'affiche pas la dernière ligne écrite? N° commande 11077 n'apparait pas
merci de me répondre
12 oct. 2009 à 19:39
Cordialement,
12 oct. 2009 à 19:22
Bon courage.
12 oct. 2009 à 19:04
Mais j'ai oublié de te dire que je débute en VBA.
Selon toi, il semble donc possible de "formater" en dynamique sa listview avec une listbox avec l'attribut MultiSelect par l'événement change de la listBox.
Mais penses-tu qu'il est ensuite possible de filtrer cette base sur 5 critères ?
Un petit coup de pouce m'est indispensable pour démarrer.
Merci d'avance pour le temps que tu consacre aux autres.
12 oct. 2009 à 12:03
Bon développement.
12 oct. 2009 à 06:28
je souhaite adapter ce code pour une BDD de 60 colonnes et 8000 lignes. je souhaite au lancement de l'userform que l'utilisateur selectionne par une listebox les entêtes de colonne qu'il souhaite afficher dans sa listview et qu'il puisse ensuite la filtrer au maximun sur 5 critères.
Cela est-il réalisable ou je demande l'impossible ?
le but pour moi étant ensuite de recopier sur une autre feuille excel ce que l'utilisateur aura sélectionné( 1 ou des lignes après son filtrage). Merci d'avance à tous .
3 avril 2009 à 17:07
Je suis heureux de constater que ce vieux snippet rend toujours service.
Bon WE
3 avril 2009 à 15:29
5 déc. 2008 à 11:54
De quoi me remotiver ;oD
4 déc. 2008 à 22:31
28 oct. 2008 à 16:45
je vais créer deux texteBox: la 1ère:= date du debut et la seconde:=date de la fin
et ensuite un boutton afficher qui contient ce code.
meci pour cette aide
je ne vous oublierez jamais.
28 oct. 2008 à 13:07
Exemple : si la date est en colonne E on aura "(CDate(oRng.Offset(0, 4)) >= Dstart) And (CDate(oRng.Offset(0, 4)) <= DEnd)" où "oRng.Offset(0, 4)" décale le pointeur de 0 ligne et de 4 colonnes par rapport à la colonne de départ A (cf. Aide en ligne de OffSet).
Bon courage.
27 oct. 2008 à 19:42
vraiment desolé de t'embeter avec ça, j'ai pas le droit d'abondonner aussi facilement. J'ai essayé avec ça, rien à afficher.
-------------------------------------------------
Option Explicit
Private Sub TextBox1_Change()
Call LVW_Fill(Trim$(TextBox1.Text), ComboBox1.ListIndex)
End Sub
Private Sub UserForm_Activate()
Me.Caption = "Historique des commandes"
Set ListView1.Icons = ImageList1
Set ListView1.SmallIcons = ImageList1
Call CBO_Fill
Call LVW_Fill("", 0)
End Sub
Private Sub CBO_Fill()
'Variables locales
Dim iCnt As Integer
Dim oRng As Excel.Range
'Remplit la Combo
Set oRng = Feuil1.Cells(1, 1)
For iCnt = 0 To 13 '-- 14 colonnes
ComboBox1.AddItem oRng.Offset(0, iCnt)
Next iCnt
ComboBox1.ListIndex = 0
End Sub
Private Sub LVW_Fill(ByVal sFilter As String, ByVal iCol As Integer)
'Variables locales
Dim iCnt As Integer
Dim iRnd As Integer
Dim oRng As Excel.Range
Dim oItem As ListItem
Dim Dstart As Date, DEnd As Date, l As Date
Dim i As Variant, j As Variant, k As Variant
Dstart = #1/1/2006#
DEnd = #12/31/2006#
'Initialisation de la ListView
ListView1.ColumnHeaders.Clear
ListView1.FullRowSelect = True
ListView1.ListItems.Clear
ListView1.View = lvwReport
'Remplissage de la ListView
Set oRng = Feuil1.Cells(1, 1)
Do Until oRng.Offset(1, 0).Value = ""
'-- En-têtes
If oRng.Row = 1 Then
For iCnt = 0 To 13 '-- 14 colonnes
ListView1.ColumnHeaders.Add , , oRng.Offset(0, iCnt)
Next iCnt
'-- Données
Else
iRnd = Int((4 * Rnd) + 1)
' If LCase$(Left$(oRng.Offset(0, iCol), Len(sFilter))) = LCase$(sFilter) Then
If (CDate(oRng.Offset(i, j)) >= Dstart) And (CDate(oRng.Offset(k, l)) <= DEnd) Then
Set oItem = ListView1.ListItems.Add(, , oRng.Offset(0, 0), "Key" & iRnd, "Key" & iRnd)
For iCnt = 1 To 14 '-- 14 colonnes
oItem.ListSubItems.Add , , oRng.Offset(0, iCnt)
Next iCnt
End If
End If
Set oRng = oRng.Offset(1, 0)
Loop
End Sub
-----------------
Merci.
27 oct. 2008 à 10:58
27 oct. 2008 à 10:52
Merci d'avoir pris le relai PCPT ;oD
Bonne semaine à tous.
27 oct. 2008 à 09:20
j'ai trés bien compris.
merci encore.
26 oct. 2008 à 19:41
forcément si tu saisies juste la STRING "#mm/jj/aaaa#", il n'y aura pas de filtre de date....
ps : "j'ai déclaré i,j,k,l as date"
1. bravo pour te relire, c'est impossible de savoir quoi sert à quoi
2. alors seul l est une DATE, le reste est VARIANT
dim dStart as date, dStop as date
dStart = #10/01/2008#
dStop = #10/31/2008#
If (cdate(oRng.Offset(i, j)) >= dStart) and (cdate(oRng.Offset(k, l)) <= dStop) then ...
26 oct. 2008 à 19:20
SVP.
Merci d'avance
20 oct. 2008 à 16:40
If oRng.Offset(i, j) >= "#mm/jj/aaaa#" and oRng.Offset(k, l) <= "#mm/jj/aaaa#" then
il n'mz rien donner.
listView vide.
La procedure se fait on principe on créant deux textBox:
1- Date debut
2 Date fin
20 oct. 2008 à 15:56
20 oct. 2008 à 11:10
En ligne 52, il suffit de remplacer "If LCase$(Left$(oRng.Offset(0, iCol), Len(sFilter))) = LCase$(sFilter) Then" par "If oRng.Offset(i, j) >= #mm/jj/aaaa# and oRng.Offset(k, l) <= #mm/jj/aaaa#" où oRng.Offset(i, j) contient la date de début et oRng.Offset(k, l) contient la date de fin.
Bon courage.
20 oct. 2008 à 10:32
Ton code est formidable.
Comment faire pour filtrer une liste en fonction de deux date (DateBetween)
Date du debut et date du Fin
4 août 2008 à 14:00
Bon courage.
Cdlt.
4 août 2008 à 13:47
Merci pour le tuyau, il super ton code. encore une petite question
je suis entrain de l'adapter a une petite appli. Je rajoute des filtres : 4 en tout.
mes combo se remplissent nickel, la selction tourne bien sur le premier critère, mais bloque sur le deuxieme (ou du moin le critère 1 n'est plus pris en compte. as tu une idée.Stp ca m'aiderait beaucoup.
4 août 2008 à 13:34
Dans la ligne de code n° 53, il suffit de retirer les deux derniers paramètres : ["Key" & iRnd] et ["Key" & iRnd].
Cdlt
4 août 2008 à 13:18
22 juin 2008 à 01:32
Je suis très très débutant en programmation...
et je n'arrive pas à l'adapter à mon fichier excel (5 colonnes avec titres).
Où taper le code ? L'interface est-elle à créer ?
A vous lire. Merci d'avance.
29 mai 2008 à 16:32
je me suis seulement gourré de colonne c'est la 2
merci ça marche super
29 mai 2008 à 16:23
Desolé de t'embeter avec ça ......
j'ai remplacé
Set oItem = ListView1.ListItems.Add(, , oRng.Offset(0, 0), "Key" & iRnd, "Key" & iRnd)
par
Set oItem = ListView1.ListItems.Add(, , oRng.Offset(0, 0), (oRng.Offset(0, 3).Value), (oRng.Offset(0, 3).Value))
mais c'est pas mieux
si tu as une idée ...merci d'avance
28 mai 2008 à 21:14
La fonction Rnd() est juste là à titre d'exemple. Dans ta colonne [Status], tu peux par exemple mettre la [Key] correspondant à l'image à afficher dans la [ListView1]. Cette [Key] est définie dans le contrôle [ImageList1]. Enfin, dans ton code, remplace ["Key" & iRnd] par [oRng.Offset(0, <no_col_status>).Value].
Bon développement.
Cordialement.
26 mai 2008 à 14:06
Super ce petit bout de code !!!
Pouvez vous m'aider ?
J'ai une colonne status et l'image doit changer en fonction du status
Comment faire puisque dans le code initial il ya un random sur les 4 images stockees dans la imagelist1
Merci d'avance
13 nov. 2007 à 13:51
Cédric
13 nov. 2007 à 13:30
Cdlt
13 nov. 2007 à 10:46
Juste un petit problème:
Dans la feuille Excel, nous avons la dernière commande 11077.
Cette commande n'est pas reprise dans l'historique des commandes et ne pourra donc jamais être reprise.
Avez-vous pu corriger ce petit problème?
Merci d'avance,
Cédric
27 oct. 2007 à 18:01
Je me forme à VBA (excel notamment)
Excellent code et directement utile pour toute appli de gestion
Merci