rss
vba excel filtre / listbox ...
par ludivine
 Fil de Discussions
Statut : Non résolu
jeudi 24 août 2006 à 12:43:39
Bonjour,
Débutante sur vba excel, je rencontre pas mal de pb malgré de nombreuses recherches sur internet.

Je voudrais afficher le contenu SANS DOUBLONS d'une colonne dans une liste déroulante sur formulaire, sachant que les valeurs à afficher ne commencent qu'à la ligne 3 (j'ai réussi mais les doublons eux sont tjs là!)

Je voudrais également créer un code pour enlever les filtres de toutes les colonnes sauf la colonne 1 de ma feuille. (sans avoir à faire 1 ligne de code pour chaque colonne)

Quelqu'un peut-il m'aider? Dur, dur de tatonner... lol

Merci d'avance
Ludivine
Configuration: windows/excel97 et + /vb 6
Répondre à ludivine  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Armojax, le jeudi 24 août 2006 à 13:34:08 Fil de Discussions
Bonjour Ludivine,

Pour virer les doublons dans la colonne "A" à partir de la ligne 3 :
Dim CelluleCourante As Range
Dim CelluleSuivante As Range
  
Set CelluleCourante = Range("A3")
Do While Not IsEmpty(CelluleCourante)
  Set CelluleSuivante = CelluleCourante.Offset(1, 0)
  If CelluleSuivante.Value = CelluleCourante.Value Then
    CelluleCourante.EntireRow.Delete
  End If
  Set CelluleCourante = CelluleSuivante
Loop
Si tu ne veux pas détruire tes doublons, mais seulement ne pas les afficher, tu peux t'inspirer de ça, ou travailler sur une autre colonne provisoire dans laquelle tu auras copié les données.
EntireRow supprime la ligne entière. L'enlever pour ne virer que la cellule.

Pour les filtres :
ActiveSheet.AutoFilterMode = False
Columns("A:A").AutoFilter
Répondre à Armojax

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lulu37, le jeudi 24 août 2006 à 15:34:17 Fil de Discussions
Bonjour Armojax,
Merci pour ta réponse, cependant je ne me suis peut etre pas bien exprimée :
en fait j ai une feuille avec une base de données
le but est d accéder aux données par formulaires (pour simplifier la recherche)

la listbox dans formulaire, c'est pour filtrer la colonne A, donc afficher la liste des valeurs de la colonne A sans les doublons (pour la visualisation...), ils sélectionnent et ça retourne la valeur dans le filtre auto

dans l'autre procédure (filtres), j'ai fait :
Selection.AutoFilter Field:=2
Selection.AutoFilter Field:=3
Selection.AutoFilter Field:=4
...
pour pas toucher au filtre de ma colonne A qui doit restée filtrée, tout en conservant la possibilité d'accéder aux filtres de la feuille ...
ca marche bien sûr, mais il doit y avoir + court lol

??
Ludivine
Répondre à lulu37

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Armojax, le jeudi 24 août 2006 à 15:59:19 Fil de Discussions
Re, ludivine,

OK. Essaie ça, à mettre dans la macro Initialize de ton UserForm. Adapte les paramètres :
- Lig : n° de la première ligne de données
- Col : colonne des données
- ListBox1 : remplacer éventuellement par le nom de ta ListBox.
Private Sub UserForm_Initialize()

  Dim Lig               As Long
  Dim Col               As String
  Dim ValeurCourante    As String
  Dim ValeurPrécédente  As String
  
  Lig = 3
  Col = "A"
  ValeurPrécédente = ""
  ValeurCourante = Cells(Lig, Col).Value
  Do While ValeurCourante <> ""
    If ValeurCourante <> ValeurPrécédente Then
      ListBox1.AddItem ValeurCourante
    End If
    Lig = Lig + 1
    ValeurPrécédente = ValeurCourante
    ValeurCourante = Cells(Lig, Col).Value
  Loop
  
End Sub
Pour les filtres, ce que je t'ai donné ne marche pas ? Ça supprime tous les filtres, et ça réinstalle celui de la colonne "A".
Répondre à Armojax

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lulu37, le vendredi 25 août 2006 à 10:07:45 Fil de Discussions
Bonjour,

Ca ne marche pas snif ... dur pour un vendredi !
J'ai du zappé quelque chose c'est sûr, mais je ne comprend rien à la première partie de ton code, du coup si je dois adapter, c'est pas gagné.

Bref, pour la listbox, à l'origine, j'avais bien la liste de mes données ... seulement en ayant donné le nom de l
Répondre à lulu37

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Armojax, le vendredi 25 août 2006 à 10:31:16 Fil de Discussions
Pas sniff, ludivine... !

Ci-dessous un exemple :
http://cjoint.com/?izkDwEfevP

A l'ouverture du classeur la Listbox s'affiche automatiquement.
Regarde le code du UserForm...
Répondre à Armojax

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lulu37, le vendredi 25 août 2006 à 12:03:12 Fil de Discussions
ok, Ca ne peut pas marcher dans mon cas, les doublons ne se suivent pas forcément, à moins de faire un tri à l'ouverture...

pour les filtres, (j'ai pas pu finir tt à l heure), j'ai bien noté ton code pour + tard, mais je t'explique :
les utilisateurs sélectionnent une valeur de ma listbox (celle qui pose pb) la valeur est renvoyée sur le filtre de la col A, je ne veux pas qu'ils aient la main sur ce filtre, mais sur les autres si...
du coup si je réinitialise le filtre, la valeur n'y sera plus, à moins qu'elle puisse être réinjectée...
N'oublies pas que je suis une débutante, mais alors une vraie de vraie !
Répondre à lulu37

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Armojax, le vendredi 25 août 2006 à 17:07:56 Fil de Discussions
Désolé ludivine, mais ma FreeBox est restée en rade pendant 3 heures. Bon, 3 h en 2 ans c'est pas une catastrophe, mais bon...

Donc je te mets un nouveau classeur ici :
http://cjoint.com/?izrcMmdFXA

Je vois un peu mieux ce que tu veux faire.
Le formulaire ne se lance pas au démarrage. Tu peux faire <CTRL+MAJ+M>.
Tu pourras paramétrer la macro Initialize selon tes propres besoins. J'utilise la colonne "Z" pour y copier les données de la colonne "A" et les trier pour alimenter la ListBox.

Quand on clique dans la liste, on filtre les données correspondantes. Dans la commande j'ai mis le paramètre VisibleDropDown à False, ce qui cache la petite "flèche en bas" du filtre. Tu peux le mettre à True (ou l'enlever, c'est la valeur par défaut) si tu veux.

A suivre, sans doute...
Répondre à Armojax

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lulu37, le mardi 29 août 2006 à 17:33:58 Fil de Discussions
coucou

ca avait l'air de fonctionner à un moment donné...mais là je ne comprend plus rien
j'ai inséré un nouveau formulaire, selon réponse, le formulaire avec listbox en question doit s'afficher, mais ça me fait une erreur d'exe '13', j'ai l'impression qu'il n'aime l'initialisation....

es tu sûr qu'il n'y a pas moyen de compléter plus simplement (sans initialisation) la propriété rowsource de la listbox avec un paramètre en plus pour n'afficher qu'une seule fois les memes valeurs (paramètre que je ne connais pas bien sûr...)

??
Répondre à lulu37

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lulu37, le mardi 29 août 2006 à 17:37:02 Fil de Discussions
j'entends par là, compléter rowsource = plagededonnéesNommée
après je sais pas ...
Répondre à lulu37

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Armojax, le mardi 29 août 2006 à 18:03:05 Fil de Discussions
A priori, l'erreur VBA "13" est Incompatibilité de type. Peut-être du texte qui serait utilisé comme du numérique par exemple, ou quelque chose comme ça...?
Si tes données sont stables pendant que tu utilises tes macros, on peut effectivement préparer la liste de la ListBox à l'open du classeur, plutôt qu'à l'Initialize du formulaire. Dans ce cas, il faut que tu tries tes données et que tu construises une plage où les doublons sont éliminés. Ensuite tu utilises effectivement la propriété RowSource pour se référer à cette plage.
Répondre à Armojax

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lulu37, le mardi 29 août 2006 à 18:15:16 Fil de Discussions
à ce moment là, je pense que je vais créer une plage de données, avec valeurs uniques, qui sera source d'alim pour ma colonne de données
et alimenter ma listbox par le nom de la plage
ca me parait etre plus simple (sauf si nouvelle entrée pour celui qui fait les modifs de la base de données, quoique...), qu'en penses tu?
Répondre à lulu37

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Armojax, le mardi 29 août 2006 à 18:54:05 Fil de Discussions
Essaie cette macro, à lancer à l'ouverture de ton classeur. Elle crée la liste triée sans doublons dans une feuille spéciale que j'appelle Param (pas la peine de créer la feuille, ça se fait tout seul si elle n'existe pas), et lui donne un nom. Tout est recalculé à chaque ouverture du classeur. Le nom de la plage est PlageListBox (tu changes tout ce que tu veux...).
Et dans les propriétés de ta ListBox, tu peux mettre le nom de cette plage dans RowSource.
Sub PrepaListe()

  Dim Lig_Deb           As Long
  Dim DerLig            As Long
  Dim Col               As String
  Dim Feuille           As String
  Dim CelluleCourante   As Range
  Dim CelluleSuivante   As Range
  Dim FF                As Worksheet
  
  ' PARAMETRES A ADAPTER
  '----------------------------------------------------------------------------
  Lig_Deb = 3         ' n° de la première ligne de données filtrées
  Col = "A"           ' colonne de données filtrées
  Feuille = "Feuil1"  ' nom de la feuille de données
  '----------------------------------------------------------------------------
  
  Application.ScreenUpdating = False
  
  On Error Resume Next
    Worksheets("Param").Activate
    If Err.Number = 9 Then
      Worksheets.Add
      ActiveSheet.Name = "Param"
    End If
  On Error GoTo 0
  
  Sheets("Param").Cells.ClearContents
  Set FF = Sheets(Feuille)
  DerLig = FF.Cells(65536, Col).End(xlUp).Row
  
  FF.Range(Col & Lig_Deb & ":" & Col & DerLig).Copy
  Cells(1, 1).Select
  ActiveSheet.Paste
  Selection.Sort Key1:=Range("A1"), _
                       Order1:=xlAscending, _
                       Header:=xlNo
  Application.CutCopyMode = False
  
  Set CelluleCourante = Range("A1")
  Do While Not IsEmpty(CelluleCourante)
      Set CelluleSuivante = CelluleCourante.Offset(1, 0)
      If CelluleSuivante.Value = CelluleCourante.Value Then
          CelluleCourante.EntireRow.Delete
      End If
      Set CelluleCourante = CelluleSuivante
  Loop
  
  On Error Resume Next
    ActiveWorkbook.Names("PlageListBox").Delete
  On Error GoTo 0
  DerLig = Range("A65536").End(xlUp).Row
  ActiveWorkbook.Names.Add Name:="PlageListBox", _
                           RefersToR1C1:="=Param!R1C1:R" & DerLig & "C1"
  
  Application.ScreenUpdating = True

End Sub

Répondre à Armojax

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lulu37, le mercredi 30 août 2006 à 11:06:58 Fil de Discussions
Bonjour Armojax !
merci pour ta réponse, cependant je n'ai pas testé.
En fait, j'ai fait ce que j'ai décrit dans mon dernier message.
J'ai créé ma liste exhaustive (valeurs uniques) dans une feuille cachée / Validation des données sur la colonne des données (valeurs multiples)
ce qui me permet finalement de controler la saisie (les valeurs sont tout le temps les mêmes (quand meme 1 petit bouton en + pour ajouter 1 valeur si nécessaire avec visu feuil cahée...), c'est plus sur pour la suite des événements...
En prime ma listbox sur formulaire est reliée à la plage nommée de ma feuille cachée, donc tout est bon et sans doublons du coup!
J'espère seulement que d'utiliser la validation de données ne risque pas de faire planter le tout... (ca m'est déjà arrivé sur un autre fichier y a quelque temps de cela...snif)
Merci encore, dans d'autres circonstances, je ne manquerais pas d'utiliser ton code
Bonne journée
Ludivine
Répondre à lulu37

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lulu37, le mercredi 30 août 2006 à 11:12:05 Fil de Discussions
Ah si, juste une dernière petite question !
Comment je peux afficher une flèche pour dérouler ma listbox comme une liste déroulante ? (suis je claire?...)
Pour l'instant, j'ai deux petites flèches haut et bas à droite de ma listbox, et les valeurs restent affichées seulement à l'intérieur. Mais je voudrais n'avoir qu'une flèche bas et qd clique, que toute la liste s'affiche...
Répondre à lulu37

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Armojax, le mercredi 30 août 2006 à 13:59:27 Fil de Discussions
Au lieu d'une ListBox, tu peux utiliser un ComboBox. Beaucoup de propriétés sont identiques, et ça ne devrait pas être compliqué à transposer. Tu auras une liste déroulante, et tu pourras déterminer le nombre d'items visibles d'un coup avec la propriété ListRows.

Et pour répondre à ton item n° 13 ci-dessus : la macro que j'ai fournie fait à peu près ce que tu as mis en place : elle recalcule automatiquement, dans une feuille à part, une plage que tu peux passer à RowSource. Tu peux l'exécuter à chaque ouverture du classeur si ça change tout le temps, ou seulement quand c'est le moment...
Répondre à Armojax

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lulu37, le mercredi 30 août 2006 à 15:30:14 Fil de Discussions
la combobox c'est nickel
a+
Répondre à lulu37

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Homer, le mercredi 27 février 2008 à 15:57:19 Fil de Discussions 
bonjour,
j'ai consu une zone de liste via Excel "données/validation" dans la colonne A. et de la même manière une deuxième zone de liste dans la colonne B. Or mon patron me demande quand on selectionne une valeur de la colonne A il faut que la colonne B affiche seulement les données correspondantes à cette valeur dans la colonne B.


Exemple:
zone de liste colonne A: "a;b;c;d;e"
zone de liste colonne B: "aa;ab;ac;ad;af;ba;bb;bc;bd..."

le souhait:
qd on selectionne dans la colonne A : la valeur "a"
alors la zone de liste de la colonne B affiche seulement les valeur qui commence par a : {aa;ab;ac;ad;af}
et non la liste totale puisque j'en ai 12000 valeur et l'utilisateur se perd vraiment.


Merci d'avance de votre collaboration.
Répondre à Homer
Discussions pertinentes trouvées dans le forum
07/06 18h30[VBA, Excel] Valeur listboxProgrammation07/06 20h052
01/07 18h09[VBA] EXCEL : filtre DATEProgrammation04/07 13h145
31/07 09h37[VBA EXCEL] Filtrer des lignesProgrammation01/08 00h441
25/07 10h43[VBA Excel] Filtres automatiquesProgrammation26/07 12h263
Plus de discussions sur « vba excel filtre / listbox ... » Discussion en cours Discussion fermée Problème résolu
Logiciels pertinents trouvés dans les téléchargements
Télécharger Thunderbird 2.0.0.14Thunderbird - ThunderBird est le client de messagerie développé dans le cadre du projet Mozilla.org. Il s'agit d'un des client de...Catégorie: Courrier électronique
Licence: Open Source
Télécharger Excel Viewer 2003Excel Viewer - Avec Microsoft Office Excel Viewer 2003, vous pouvez ouvrir, afficher et imprimer des classeurs Excel (fichiers XLS ), même...Catégorie: Tableur
Licence: Freeware/gratuit
Télécharger DS Monkey Audio - Filtre APE 1.00DS Monkey Audio - Filtre APE - Le format MonkeysAudio (extension *.ape) est un format de compression audio lossless (sans pertes) permettant de réduire la...Catégorie: Plugins audio
Licence: Freeware/gratuit
Télécharger K9 Web Protection 1.0K9 Web Protection - K9 Web Protection est un logiciel de contrôle parental permettant de contrôler et de limiter les accès à Internet de son...Catégorie: Contrôle parental
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « vba excel filtre / listbox ... »
Répondre
Titre du message :
Votre pseudo:
Votre email :
Message: 
  •  
  •  
Options: Recevoir les réponses par mail.
 

Aide