Filtre élaboré

ivan27

XLDnaute Occasionnel
Bonsoir à tous et merci d'avance pour votre aide.

J'ai un onglet "BD" comprenant une base de données.
Sur un second onglet "FILTRE", j'ai des critères de recherches sur une ou plusieurs colonnes.
Je souhaite afficher le résultat sur un troisième onglet en recopiant intégralement les lignes concernées.

Mes recherches sur le forum sont restées vaines.

Dans l'attente de vous lire,

Cdlt,

Ivan
 

Pièces jointes

  • BD.xlsx
    10.7 KB · Affichages: 57
  • BD.xlsx
    10.7 KB · Affichages: 59
  • BD.xlsx
    10.7 KB · Affichages: 63

naru31

XLDnaute Nouveau
Re : Filtre élaboré

Salut,
En espérant que c'est ce que tu voulais (voir ton tableau excel modifié ci joint), voici les modifications que j'ai apporté dans VBA :cool: :

=> ThisWorkbook

Code:
Option Explicit
Private Sub Workbook_Open()
    Sheets("BD").Select
    With Worksheets("BD")
        If .FilterMode = True Then .ShowAllData 'permet de désactiver tous les filtres
    End With
End Sub

=>Module1

Code:
Option Explicit
Sub Extract()
      
    'Déclaration des variables
    Dim A 'index
    Dim B 'véhicule
    Dim C 'couleur
    Dim D 'marque
    Dim E 'pollution
    Dim F 'date
    
    '   Initialisation des variables
    A = Sheets("FILTRE").Range("A2").Value
    B = Sheets("FILTRE").Range("B2").Value
    C = Sheets("FILTRE").Range("C2").Value
    D = Sheets("FILTRE").Range("D2").Value
    E = Sheets("FILTRE").Range("E2").Value
    F = Sheets("FILTRE").Range("F2").Value
        
    'Initialisation
    Sheets("RESULTAT").Select
    Columns("A:F").Select
    Selection.Delete Shift:=xlToLeft
    Sheets("BD").Select
    If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
    
    'Filtres
    If A <> "" Then ActiveSheet.Range("$A$1:$F$1048576").AutoFilter Field:=1,    
       _Criteria1:=A
    If B <> "" Then ActiveSheet.Range("$A$1:$F$1048576").AutoFilter Field:=2, 
       _Criteria1:=B
    If C <> "" Then ActiveSheet.Range("$A$1:$F$1048576").AutoFilter Field:=3, 
       _Criteria1:=C
    If D <> "" Then ActiveSheet.Range("$A$1:$F$1048576").AutoFilter Field:=4, 
       _Criteria1:=D
    If E <> "" Then ActiveSheet.Range("$A$1:$F$1048576").AutoFilter Field:=5,    
       _Criteria1:=E
    If F <> "" Then
    Sheets("FILTRE").Range("F2").Select
    Selection.NumberFormat = "General"
    Sheets("BD").Select
    Columns("F:F").Select
    Selection.NumberFormat = "General"
    ActiveSheet.Range("$A$1:$F$1048576").AutoFilter Field:=6, Criteria1:=F
    End If
    
    'Extract
    Columns("A:F").Select
    Selection.Copy
    Sheets("RESULTAT").Select
    Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("A1").Select
    
End Sub
 

Pièces jointes

  • BD.xlsm
    23.6 KB · Affichages: 107
  • BD.xlsm
    23.6 KB · Affichages: 105
  • BD.xlsm
    23.6 KB · Affichages: 114

ivan27

XLDnaute Occasionnel
Re : Filtre élaboré

Bonjour à tous et merci pour vos réponses.

C'est exactement ce que je cherchais à réaliser.

Les 2 méthodes fonctionnent, cependant, j'ai une erreur à l'ouverture du fichier de naru31 et le temps de recherche / affichage semble plus long qu'avec la méthode de Jacques.

Je me permet de préciser ma demande initiale :

Je souhaiterais interroger la BD par l'intermédiaire d'un formulaire et afficher le résultat dans une listbox avec coloration d'une ligne sur deux tel que le formulaire présent sur le site de Jacques : http://boisgontierjacques.free.fr/fichiers/Formulaire/ListBoxSimul.xls

Merci

Ivan
 

ivan27

XLDnaute Occasionnel
Re : Filtre élaboré

Merci JB,

Je me permets de revenir à la charge car quant il s'agit de vba, j'ai 2 mains gauches....

Est-il possible de placer sur UserForm1, des combobox récupérant sans doublon, les données de la feuille BD afin de sélectionner depuis ce formulaire et d'envoyer à la feuille FILTRE les critères de sélection avant que les données ne soient récupérées dans la listbox ?

J'ai essayé de m'en sortir seul mais sans succès.

Ivan
 

stephi

XLDnaute Nouveau
Re : Filtre élaboré

bonjour

je me joins à vous et je trouve ton code, BOISGONTIER, très sympa par contre j ai testé avec la date seule comme critère et ça ne fonctionne pas .

Serait il possible d'avoir en plus dans ce champs date > ou < pour gérer des périodes et là ce serait le top.

merci

stephi
 

stephi

XLDnaute Nouveau
Re : Filtre élaboré

salut BOISGONDIER et merci.

Donc sur excel 2007 ce que j aimerai est impossible '( embètant car faire des recherches date par date est vraiment fastidieux) et sur excel 2003 c est possible.

évidemment je suis en 2007 donc hic....

stephi
 

Statistiques des forums

Discussions
312 747
Messages
2 091 605
Membres
105 007
dernier inscrit
adla