Filtre élaboré complexe

  • Initiateur de la discussion Initiateur de la discussion nat54
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

nat54

XLDnaute Barbatruc
Bonjour,

Voici mon problème :

une feuille excel avec environ 1000 lignes présentée comme suit (en simplifié) :




Objectif : pouvoir consulter rapidement
- toutes les dépenses d'un code regate donné
- toutes les dépenses d'un code regate donné et d'un compte comptable donné
- toutes les dépenses d'un code regate donné, d'un compte comptable donné, d'un code action donné

En gros, avoir des listes modifiables "imbriquées"

Or je ne vois pas comment faire ?!?


ps : pour le moment j'ai une solution "bâtarde"
qui consiste à avoir une liste modifiable par critère
et un bouton associé à chaque type de recherche, avec le code automatique généré pour un filtre élaboré


MERCI DE VOTRE AIDE 🙂
 
Re : Filtre élaboré complexe

C'est vrai qu'on pourrait faire comme ca...
mais il n'y aurait pas un moyen de faire comme suit pour les critères (car les personnes l'utilisant sont débutantes en excel) :


afin d'avoir en fait un choix de critère bien précisé en haut de page
 
Re : Filtre élaboré complexe

salut nat54,

j'ai essayé par le biais d'une requête ODBC afin de bénéficier du SQL.
il y a aussi certainement moyen de faire via ODBC, avec un recordset, mais je n'ai pas encore trouvé...

inspire-toi de 2 fichiers joints :
 
Dernière édition:
Re : Filtre élaboré complexe

Euh ODBC... je connais pas
Pourrais-tu expliquer STP ?

Les DSN.. ca me dit vaguement qqch mais vraiment vaguement

Je regardais ton code là

et ca je comprends pas
DBQ=D:\Philippe\Developpements\TABLEAU.xls;DefaultDir=D:\Philippe\Developpements;DriverId=790;MaxBufferSize=2048;PageTimeout=5;"),
 
Dernière édition:
Re : Filtre élaboré complexe

ne regarde pas le code : c'est un essai infructueux !

regarde plutôt la feuille Feuil1, et fais un clic droit sur la cellule A2, puis modifier la requête.
j'ai créé cette liaison avec le menu Données\Données externes\Créer une requête
 
Dernière édition:
Re : Filtre élaboré complexe

voilà la requête que j'ai faite dans MS Query :

SELECT TableData.CodeRegate, Sum(TableData.MontantHT)
FROM `D:\Philippe\Developpements\TABLEAU`.TableData TableData
GROUP BY TableData.CodeRegate

sachant que j'ai sélectionné toutes les colonnes contenant des données, et nommé cette zone TableData.
 
Re : Filtre élaboré complexe

salut nat54,

Ca y est ! Je l'ai enfin retrouvé ce code.
Je ne sais pas si ça répond à ton souci, en terme de facilité de mise en oeuvre, mais c'est une solution possible 🙂 .

Code:
Public Sub DAOOpenISAMDatabase()
    Dim db          As DAO.Database
    Dim rst         As DAO.Recordset
    Dim wbBook      As Workbook
    Dim intChamp    As Integer
    Dim intN        As Integer
    Dim strSQL      As String
 
    On Error GoTo Err_
 
    ' création du classeur qui va recevoir le contenu du recordset
    Set wbBook = Workbooks.Add
    Windows.Arrange xlArrangeStyleHorizontal
 
    ' ouverture de la base Excel en lecture seule
    Set db = DBEngine.OpenDatabase("C:\Document\Mon Fichier.xls", True, True, "Excel 8.0;")
 
    '***************************************************************************************************************
    '***************************************************************************************************************
    ' création du recordset
 
    ' la requête doit bien sûr être adaptée à ta base et à tes besoins
    strSQL = "SELECT RiskFactorName FROM Base WHERE Activity='GAS' AND RiskFactorThreshold IS NOT NULL"
 
    ' ATTENTION ! ce type de RecordSet ne permet que la lecture
    Set rst = db.OpenRecordset(strSQL, dbOpenForwardOnly, dbReadOnly)
    '***************************************************************************************************************
    '***************************************************************************************************************
 
    ' écrire la requête dans la feuille Excel
    Range("A1").Value = strSQL
    Range("A1").Font.ColorIndex = 5
 
    ' écrire le nom des champs du RS
    intChamp = rst.Fields.Count
    For intN = 0 To intChamp - 1
        Cells(3, 1 + intN).Value = rst.Fields(intN).Name
    Next
    With Rows(3)
        .Font.Bold = True
        .Cells.HorizontalAlignment = xlHAlignCenter
    End With
 
    Range("A4").Select
    ActiveWindow.FreezePanes = True
 
    ' écrire les valeurs du RS
    Do Until rst.EOF
        For intN = 0 To intChamp - 1
            Cells(ActiveCell.Row, 1 + intN).Value = rst.Fields(intN).Value
        Next
        ActiveCell.Offset(1, 0).Select
        rst.MoveNext
    Loop
 
    ' fermer le RS
    rst.Close
    ' fermer la base
    db.Close
    'wbBook.Close savechanges:=False
    'wbBook.Saved = True
 
    Set db = Nothing: Set rst = Nothing: Set wbBook = Nothing
    Exit Sub
 
Err_:
    Debug.Print Err.Number, Err.Description
    Stop
    Resume
End Sub
 
[Résolu] Filtre élaboré complexe

Bonjour le forum,

Merci pour vos réponses
Je regarde la tienne Jocelyn ;wow bravo mais c'est complexe

même si j'ai trouvé une autre solution avec de l'aide via une macro en VBA

Code:
Sub Recherche()
Dim i As Integer     ‘ type de la donnée
i = 1500

Application.ScreenUpdating = False
On Error Resume Next
Range("A11:A" & i).RowHeight = 12.75         ‘ajuster toutes les lignes à la même hauteur
On Error GoTo 0

Crit = Range("A4")  ' critère centre courrier
If Crit <> "" Then
  For Each o In Range("A11:A" & i)
    If o <> Crit Then o.RowHeight = 0
  Next
End If

Crit = Range("B4") ' critère code action
If Crit <> "" Then
  For Each o In Range("E11:E" & i)
    If o.RowHeight > 0 And o <> Crit Then o.RowHeight = 0
  Next
End If

Crit = Range("C4")  ' critère type (charge, immo)
If Crit <> "" Then
  For Each o In Range("K11:K" & i)
    If o.RowHeight > 0 And o <> Crit Then o.RowHeight = 0
  Next
End If

Crit = Range("a7")   ' critère rubrique
If Crit <> "" Then
  For Each o In Range("H11:H" & i)
    If o.RowHeight > 0 And o <> Crit Then o.RowHeight = 0
  Next
End If

Crit = Range("b7")   ' critère sous-rubrique
If Crit <> "" Then
  For Each o In Range("i11:i" & i)
    If o.RowHeight > 0 And o <> Crit Then o.RowHeight = 0
  Next
End If

Crit = Range("c7")    ' critère libellé
If Crit <> "" Then
  For Each o In Range("j11:j" & i)
    If o.RowHeight > 0 And o <> Crit Then o.RowHeight = 0

Next
End If
End Sub

Les critères sont en haut de page.

Je parcours les lignes de mon tableau.
Si le contenu du critère est différent de la cellule
parcourue, alors on met la hauteur de ligne à 0 ce qui revient à masquer la ligne.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Z
Réponses
3
Affichages
2 K
Z
Réponses
14
Affichages
2 K
C
Réponses
3
Affichages
1 K
C
F
Réponses
14
Affichages
6 K
fred777
F
C
Réponses
5
Affichages
2 K
Cooralie
C
J
Réponses
4
Affichages
9 K
jeanlouis
J
B
Réponses
11
Affichages
2 K
P
Réponses
10
Affichages
22 K
philmascio
P
P
Réponses
1
Affichages
1 K
Pseudoto
P
Retour