begin process at 2012 02 13 08:11:55
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBA

 > EXCEL VBA - FILTRER LE CONTENU D'UNE LISTVIEW

EXCEL VBA - FILTRER LE CONTENU D'UNE LISTVIEW


 Information sur la source

Note :
9 / 10 - par 4 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :VBA Classé sous :excel, vba, listview, filtre Niveau :Initié Date de création :05/10/2007 Vu / téléchargé :19 028 / 1 651

Auteur : lesly_lodin

Ecrire un message privé
Site perso
Commentaire sur cette source (49)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voici une petite démo qui vous permettra de filtrer "on the fly" le contenu d'une listview, en sélectionnant au préalable le champ sur lequel le filtre doit être appliqué. Enjoy !

Source

  • 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
  • '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
  • 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
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

    '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
                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

 Conclusion

Vous pouvez modifier cette source à volonté pour pouvoir la personnaliser. Toute question ou suggestion est la bienvenue.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • VBA_Filtered_ListView.xlsTélécharger ce fichier [Réservé aux membres club]222 720 octets

Télécharger le zip


 Sources de la même categorie

Source avec Zip GESTION PERSONNEL par oudlarbi
Source avec Zip Source avec une capture CALENDRIER EN VBA POUR EXCEL 2010 par nounou94
Source avec Zip Source avec une capture MANIPULER LES FENETRES ENFANT D'EXCEL par bigfish_le vrai
Source avec Zip Source avec une capture COLLECTION ID par Le Pivert
Source avec Zip Source avec une capture VBA MASQUE DE SAISIE NUMÉRIQUE par acive

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture TOURS DE HANOI (JEU) SOUS EXCEL (VBA) par rtoukkys
METTRE EN FORME DU TEXTE WORD DEPUIS EXCEL EN VBA par phanoulevoyou
Source avec Zip Source avec une capture [VBA VB6] FORCER L'OUVERTURE D'UN COMBOBOX par lermite222
Source avec Zip Source avec une capture [VBA] EXCEL - DÉMO - TIRER 1, 2 OU 3 DÉS + APIS par lermite222
Source avec Zip Source avec une capture DEMINEUR SOUS EXCEL par rtoukkys

Commentaires et avis

Commentaire de klhsri le 27/10/2007 18:01:19 10/10

Excellent !
Je me forme à VBA (excel notamment)
Excellent code et directement utile pour toute appli de gestion
Merci

Commentaire de 7ric le 13/11/2007 10:46:14

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

Commentaire de lesly_lodin le 13/11/2007 13:30:24

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

Commentaire de 7ric le 13/11/2007 13:51:28

OK merci beaucoup
Cédric

Commentaire de card le 26/05/2008 14:06:44

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

Commentaire de lesly_lodin le 28/05/2008 21:14:09

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.

Commentaire de card le 29/05/2008 16:23:19

Salut
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

Commentaire de card le 29/05/2008 16:32:47

J'ai rien dit .....
je me suis seulement gourré de colonne c'est la 2
merci ça marche super

Commentaire de Aegidius le 22/06/2008 01:32:19 9/10

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.

Commentaire de platon1977 le 04/08/2008 13:18:42

comment supprimer les logos de la liste? svp

Commentaire de lesly_lodin le 04/08/2008 13:34:20

BONJOUR,

Dans la ligne de code n° 53, il suffit de retirer les deux derniers paramètres : ["Key" & iRnd] et ["Key" & iRnd].

Cdlt

Commentaire de platon1977 le 04/08/2008 13:47:48

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.

Commentaire de lesly_lodin le 04/08/2008 14:00:11

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.

Commentaire de HAMDANEABDELKADER le 20/10/2008 10:32:24

Salut,
Ton code est formidable.
Comment faire pour filtrer une liste en fonction de deux date (DateBetween)
Date du debut et date du Fin

Commentaire de lesly_lodin le 20/10/2008 11:10:41

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.

Commentaire de HAMDANEABDELKADER le 20/10/2008 15:56:01

Merci infiniment, je vais essayer ça.

Commentaire de HAMDANEABDELKADER le 20/10/2008 16:40:39

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

Commentaire de HAMDANEABDELKADER le 26/10/2008 19:20:59

Quelqu'un peut répondre à mon méssage du 20/10/2008 à 16:40:39
SVP.
Merci d'avance

Commentaire de PCPT le 26/10/2008 19:41:08 administrateur CS

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 ...

Commentaire de HAMDANEABDELKADER le 27/10/2008 09:20:46

ve n'arrive pas comment vous remerciez Lesly_Lodin, PCPT pour cette aide.
j'ai trés bien compris.
merci encore.


Commentaire de lesly_lodin le 27/10/2008 10:52:50

Désolé pour le retard dans ma réponse HAMDANEABDELKADER, j'étais un peu pris cette fin de semaine.

Merci d'avoir pris le relai PCPT ;oD

Bonne semaine à tous.

Commentaire de HAMDANEABDELKADER le 27/10/2008 10:58:27

Je souhaite le bonheur à vous tous.

Commentaire de HAMDANEABDELKADER le 27/10/2008 19:42:21

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.

Commentaire de lesly_lodin le 28/10/2008 13:07: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).

Bon courage.

Commentaire de HAMDANEABDELKADER le 28/10/2008 16:45:10

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.

Commentaire de chapata le 04/12/2008 22:31:12

un seul mot : SUPER !

Commentaire de lesly_lodin le 05/12/2008 11:54:43

Merci Chapata.
De quoi me remotiver ;oD

Commentaire de diaz42 le 03/04/2009 15:29:35

merci pour ce code

Commentaire de lesly_lodin le 03/04/2009 17:07:19

De rien.

Je suis heureux de constater que ce vieux snippet rend toujours service.

Bon WE

Commentaire de robinsdesforets le 12/10/2009 06:28:52 7/10

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 .

Commentaire de lesly_lodin le 12/10/2009 12:03:13

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.

Commentaire de robinsdesforets le 12/10/2009 19:04:24

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.

Commentaire de lesly_lodin le 12/10/2009 19:22:43

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.

Commentaire de robinsdesforets le 12/10/2009 19:39:24

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,      

Commentaire de fredo97893 le 18/10/2009 09:57:04

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

Commentaire de fredo97893 le 18/10/2009 11:38:43

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é.)

Commentaire de robinsdesforets le 18/10/2009 21:44:22

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...

Commentaire de robinsdesforets le 20/10/2009 23:17:47

Bon les Pros sont en vacances ?
Ou mon problème est insurmontable? (post du 18/10 à 21h44)

Commentaire de lesly_lodin le 21/10/2009 09:42: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

Commentaire de robinsdesforets le 21/10/2009 20:59:35

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.

Commentaire de robinsdesforets le 30/10/2009 20:25:45

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?  

Commentaire de robinsdesforets le 07/11/2009 08:14:53

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?

Commentaire de shinpoo7 le 11/01/2010 00:08:57 10/10

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 !

Commentaire de lesly_lodin le 12/01/2010 16:39:42

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

Commentaire de Le Pivert le 28/01/2010 17:38:57

Félicitation LESLY_LODIN pour sur ce programme et j'ai une solution pour SHINPOO7:
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

Commentaire de Gekco le 28/04/2010 23:33:49

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é

Commentaire de hotus25 le 12/07/2010 10:31:11

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.

Commentaire de planetesud le 06/04/2011 16:53:31

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

Commentaire de massi le 10/07/2011 20:08:39

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Vba Excel filtre de doublons [ par rvw68 ] BonjoursJ'ai une plage de données contenant des Nr d'emplacements. une autre dans laquelle j'attribue les emplacements à des personnes. Je veux avoir filtre excel en VBA [ par jimmyc ] Je debute dans la programmation VBA. Dans une feuille Excel filtrée je voudrais récupérer le nombre d'élément et les différents éléments contenu dans VBA Excel : Filtre personnalisé avec 3 conditions [ par hachebe ] Bonjour,Sous Excel, je souhaite activer un filtre automatique personnalis&#233; (selection.autofilter) avec 3 valeurs possibles. Est-ce possible ? Filtre auto vba 6.3 Excel 2007 [ par helpvb ] Bonjour J aurais besoin du code vba6.3 afin d'activer un filtre sur la 1ere ligne de ma feuille Excel 2007 Je précise cette feuille est protégée et l VBA Excel - Voir première page d'un PDF [ par Tenanio ] Bonjour à tous,J'ai créé une base recensant tous les fichiers d'un répertoire avec leur adresse. Ce ne sont que des .pdf et j'aimerais que lorsque l'o bordure cellule vba excel [ par antoine_ferard ] bonjour,- je développe en vba sous excel.- je rempli une cellule de la manière suivante : Sheets(strSheetName).Range("A1") = "salut"ma question : quel lire les caractere d'une cellule excel en VBA [ par faucheuse ] Bien le bonjours amis programeurs et programmeuzesAlors voila j'aimerais lire les une cellule d'excel caractère par caractè transposer une formule excel en vba? [ par Fabian123 ] Bonjour!voilà, j'ai une formule dans mon fichier excel (elle me permet de faire une moyenne)ma question est-il possible de la retranscrire en vba (ai Aide pour VBA excel URGENT [ par tatoom95 ] Bonjour,J'aurais souhaité savoir si quelqu'un pouvait m'aider.Je suis en master 1 Finance et  Mercredi matin le 2 Avril, j'ai un controle sur VBA. L'o Vba Excel: rechercher une valeur à partir d'une textbox [ par biloute91 ] Bonjour,je souhaite rechercher une valeur inscrite dans une TextBox , dans une plage de données située dans une feuille du classeur et pouvoir ainsi d


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales