Liste déroulante & Autofilter VBA

Liste déroulante & Autofilter VBA - VB/VBA/VBS - Programmation

Marsh Posté le 16-05-2013 à 12:18:28    

Bonjour à tous :)
 
Tout d'abord je tiens à préciser que je suis très mauvais en ce qui concerne VBA et j'espère que quelqu'un aura une solution à mon problème :)
 
Mon problème est le suivant :  
 
A l'aide de listes déroulantes et de la fonction auto-filter, je souhaite affiner une base de données (cf. Onglet Index du fichier excel) pour que seules celles qui m'intéressent puissent s'afficher.  
 
J'ai trouvé sur le net une formule qui m'a permis d'appliquer le premier filtre qui est le mois :  
 
 
Private Sub Worksheet_Change(ByVal Target As Range)
 
If Target.Address = "$D$2" Then
    Dim Lig As Long, Critère As String
    Lig = ActiveSheet.Cells(Rows.Count, 9).End(xlUp).Row
    Critère = Target.Value
     
    ActiveSheet.Range("$O$4:$O$" & Lig).AutoFilter Field:=1, Criteria1:=Critère
End If
End Sub
 
 
une fois ce filtre appliqué, j'aimerai appliquer un deuxième filtre comme la date par exemple. Cependant je ne sais pas comment faire.
 
 
Voilà un lien vers le fichier (onglet "Index) : http://www.fichier-xls.fr/2013/05/ [...] acro-test/
 
Merci pour votre aide !!  :D  
 
 

Reply

Marsh Posté le 16-05-2013 à 12:18:28   

Reply

Marsh Posté le 16-05-2013 à 12:37:55    

Mince, le lien exact est le suivant :  
 
http://xls.lu/C41p/

Reply

Marsh Posté le 16-05-2013 à 14:08:33    

 
           Bonjour.           Où je me trouve, je ne peux télécharger par raison de sécurité …
 
           Par contre, tu pourrais adapter le code suivant situé obligatoirement dans le module de la feuille des données à filtrer :

Code :
  1. Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  2.     Etat = ThisWorkbook.Saved
  3.     If Not Me.AutoFilterMode Then [B1:D1].AutoFilter
  4.     If Target > "" And Not Intersect(Me.AutoFilter.Range, Target) Is Nothing Then
  5.         Cancel = True
  6.         If Target.Row = 1 Then
  7.             If Me.FilterMode Then Me.ShowAllData
  8.             [A1].Select
  9.         Else
  10.             P = InStr(Trim(Target), " " )
  11.             P = IIf(Me.AutoFilter.Filters(Target.Column - 1).On Or P = 0, Len(Target), P - 1)
  12.             Target.AutoFilter Target.Column - 1, Left(Target, P) & "*"
  13.         End If
  14.         ActiveWindow.ScrollRow = 2
  15.     End If
  16.     ThisWorkbook.Saved = Etat
  17. End Sub


          Quelques explications :
 

  • Ligne n°3           :   s'il n'y a pas de filtre, ils sont automatiquement créés sur les colonnes B à D.
  • Ligne n°5           :   seul est géré le double clic pour une cellule non vide de ces colonnes.
  • Ligne n°8 & 9     :   si le double clic est dans la première ligne (celles des titres des colonnes) alors le filtrage est annulé.
  • Ligne n°13 à 15  :   filtre la colonne vis à vis de la cellule double cliquée en fonction du premier mot puis de l'intégralité de la cellule …


         Aide pour une instruction particulière :   positionner le curseur dessus puis appuyer sur la touchehttp://www.developpez.net/forums/images/smilies/f1.gif!


Message édité par Marc L le 17-05-2013 à 01:13:22
Reply

Marsh Posté le 16-05-2013 à 14:49:45    

Merci pour ta réponse.  
 
En fait je souhaiterai reprendre la même forme que la première formule que j'ai posté, mais en ayant la possibilité de rajouter une deuxième liste déroulante.
 
Malheureusement je ne comprends pas grand chose au langage VBA.
 
Merci en tout cas d'avoir pris le temps de me répondre ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed