Contrôler le résultat d’un filtre élaboré

  • Initiateur de la discussion Initiateur de la discussion apt
  • 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 !

apt

XLDnaute Impliqué

Bonsoir à tous,

Peut-on contrôler le résultat d’un filtre élaboré par VBA, en spécifiant par exemple l’emplacement de la copie (dans des zones différentes) ou le copiage de données selon des critères prédéfinis ?

Merci.
 
Re : Contrôler le résultat d’un filtre élaboré

Bonjour,


Voila, j'ai trouvé une macro de Denis Michon pour un filtre élaboré,
mais je ne sais pas si elle peut servir à résoudre mon problème.

Code:
'--------------------------------- 
Sub Filtre() 
 
    Dim Rg As Range, Rg1 As Range, DL As Long 
 
    With Worksheets("Feuil1") 
    'Plage sur laquelle s'effecture le filtre 
        Set Rg = .Range("A1:B" & .Range("B65536").End(xlUp).Row) 
    'Zone de critère 
        .Range("J1") = ""  'pour être sûr 
        .Range("J2").Formula = "=(A2=2006)*(B2=""s"")" 
    'Attribution d'un nom à la plage de critère 
        .Range("D1:D2").Name = "Crit" 
 
    'le filtre élaboré : 
        With Rg 
            .AdvancedFilter Action:=xlFilterInPlace, _ 
                            CriteriaRange:=Range("Crit") 
    'Définir la plage à copier 
            Set Rg1 = .Offset(1).Resize(.Rows.Count - 1). _ 
                      SpecialCells(xlCellTypeVisible) 
        End With 
 
    'Où copier le résultat du filtre 
        With Worksheets("Feuil2") 
    'Identifier la dernière ligne +1 de la plage A:A 
            DL = .Range("A:A").Find(What:="*", _ 
                                    LookIn:=xlFormulas, _ 
                                    SearchOrder:=xlByRows, _ 
                                    SearchDirection:=xlPrevious).Row + 1 
 
    'copier les données du filtre 
            Rg1.Copy .Range("A" & DL) 
        End With 
 
    'afficher toutes les données 
        .ShowAllData 
    End With 
    'Supprime le NOM de la zone de critère 
    Application.Names("Crit").Delete 
    'Libère la mémoire des objets 
    Set Rg = Nothing: Set Rg1 = Nothing 
End Sub 
'----------------------------------------


Je l'ai testé, mais ça na pas marché !!?

Et puis le filtre sur place va effacer tout les données source, ce qui n'est pas acceptable 😱

Peut-être, ça peut donner une idée à quelqu'un.

Merci.
 
Re : Contrôler le résultat d’un filtre élaboré

Bonjour à tous

je ne suis pas certain d'avoir compris :

voici une macro qui fait un filtre elabore de la feuille 1 et qui renvoie le resultat sur la feuille 2

Code:
Sub filtre()
    Sheets("Feuil2").Cells.Clear
    Sheets("Feuil1").Range("base").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Feuil1").Range( _
        "crit"), CopyToRange:=Sheets("Feuil2").Range("A1"), Unique:=False
End Sub

la plage base est la base de données à filtrer
la plage crit correspond aux criteres definis pour le filtre
 
Re : Contrôler le résultat d’un filtre élaboré

Bonjour Wilfried_42,


Ce que j'aimerais avoir, c'est avant de copier le résultat du filtre élaboré dans la Feuil2, je la parcours lignes par ligne (boucle), et à chaque fois je place une ligne répondant à une condition dans sa place respective.
Est-ce possible ?
 
Re : Contrôler le résultat d’un filtre élaboré

Bonjour à tous,

Voilà un code de staple1600, que je voulais modifier pour afficher dans MsgBox élément par élément pour voir ce qu'il contient comme valeur, mais une erreur est signalée :

Incompatibilité de type.

Les données :

A2: 10
A3:11
A4:aa10
A5 10bb
A6:12

Le code :


Code:
Sub suppr_FiltreElabore()
    Dim rF As Range
    With ActiveSheet
        .Range("C2").FormulaR1C1 = "=OR(COUNTIF(RC[-2],""10""),COUNTIF(RC[-2],""*10*""))"
        .Range("A1:A" & [A65536].End(xlUp).Row).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("C1:C2"), Unique:=False
        Set rF = .Range("_FilterDataBase")
        rF.Select
        MsgBox "rF.rows.count-1 = " & rF.Rows.Count - 1
    'rF.Offset(1, 0).Resize(rF.Rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        i = 1
        For Each c In rF
            'MsgBox "element " + i + " = " + c.Value
            i = i + 1
        Next c
        .ShowAllData
    '.Range("C2").Clear
    End With
End Sub

Merci d'avance

🙂
 
Dernière édition:
Re : Contrôler le résultat d’un filtre élaboré

Bonjour à tous.

Attention pour les filtres élaborés, il faut une Plage (type base de données), une zone de critère (en reprenant les en-têtes) et une zone extraction avec les en-têtes qui nous intéressent.

C'est assez simple mais complexe.

Le mieux est de chercher dans l'aide d'Excel pour bien comprendre son fonctionnement (c'est aussi une façon pour résoudre de nombreux problèmes sur Excel).

J'avais mis, il y a peu un exemple, je le cherche.

Voici le lien

https://www.excel-downloads.com/threads/au-secours.99244/
 
Dernière édition:
Re : Contrôler le résultat d’un filtre élaboré

Bonsoir MJ13,

Tu as raison sur les en-têtes, mais ce que je souhaiterais avoir et m'intéresse le plus, c'est comment accéder au résultat du filre élément par élément.

J'aimerais apporter des modifications sur le code de staple1600.

Merci.
 
Re : Contrôler le résultat d’un filtre élaboré

Bonjour APT


Dans ce cas, le filtre élaboré est-il la meilleure solution. Cela me paraît compliqué par rapport a ton exemple, à moins que ton exemple puisse être formaté différemment.

Sinon, il y aurait bien les TCDs qui pourrait répondre à ta question ou une macro que tu pourrais développer mais la ce serait du sur mesure car chaque cas est unique.

Pour ce qui est du code de staple1600, sans le fichier, c'est quand même difficile a solutionner.
 
Re : Contrôler le résultat d’un filtre élaboré

Bonsoir MJ13,

Tu as raison sur les en-têtes, mais ce que je souhaiterais avoir et m'intéresse le plus, c'est comment accéder au résultat du filre élément par élément.

J'aimerais apporter des modifications sur le code de staple1600.

Merci.

Bonsoir apt, MJ13,

Si j'ai bien compris, test ceci:

Code:
Sub test()
For Each resultat In Range("_FilterDataBase").SpecialCells(xlCellTypeVisible)
  MsgBox resultat.Value
Next
End Sub
 
Re : Contrôler le résultat d’un filtre élaboré

Bonsoir MJ13,

Bonjour APT

Dans ce cas, le filtre élaboré est-il la meilleure solution. Cela me paraît compliqué par rapport a ton exemple, à moins que ton exemple puisse être formaté différemment.

As-tu une idée ?

Sinon, il y aurait bien les TCDs qui pourrait répondre à ta question ou une macro que tu pourrais développer mais la ce serait du sur mesure car chaque cas est unique.

Les TCDs n'ont jamais eu de place dans ma tête. C'est défficile de les comprendre pour moi 🙄
 
Re : Contrôler le résultat d’un filtre élaboré

Bonsoir skoobi,

J'ai pu adapter ton code et ça marche surtout qu'il y'a affichage des cellules résultantes du filtre.

Pourquoi en remplaçant le "+" dans celle ligne :

Code:
[FONT=Verdana][FONT=Verdana]'----[/FONT]
[FONT=Verdana]MsgBox "élément " + i + " = " + c.Value[/FONT]
[FONT=Verdana]'----[/FONT][/FONT]

par "&" dans cette ligne du code en dessus, l'erreur disparaît :

Code:
[FONT=Verdana][FONT=Verdana]'----[/FONT]
[FONT=Verdana]MsgBox "élément " & i & " = " & c.Value [/FONT]
[FONT=Verdana]'----[/FONT][/FONT]

Merci.
 
Dernière édition:
Re : Contrôler le résultat d’un filtre élaboré

Bonjour,

pour concaténer du texte, il faut utiliser "&".
"+" est à utiliser dans des opérations (addition de variable numérique par exemple).

Edit:
exemple:

Code:
a = 1
b = 2
MsgBox "a + b = " & a + b
 
Dernière édition:
- 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

Réponses
16
Affichages
508
Retour