Coller resultats des filtres elabore

Lorsqu'il y a plusieurs filtres elabores a executer, y a t-il un truc pour coller le resultat du filtre en dessous du precedent resultat. La longueur des resultats varie constamment dans mon application.

Bonsoir,

Tu dois faire ton extraction à un endroit temporaire (toujours le même),

ensuite tu copie cette extraction en dessous de l'emplacement souhaité.

Amicalement

Claude

salut Claude, ton idee est tres bonne, mais comment trouve l'emplacement souhaite, est-ce que je dois trouver la premiere ligne vide de la destination final avant de copier l'extraction.

j'ai essaye ce code dont je suis fier ; il execute 5 filtres elabores et pointe la premiere ligne vide apres chaque filtre, mais ca gruge pas mal de temps et je ne sais pas comment coller ce code a ton idee.

un gros merci pour ton support!

Sub Macro1()

' Macro1 Macro

' Macro enregistrée le 2011-12-05 par michel

For A = 1 To 5

Cells(6, 27).Value = A

Range("A1:I1625").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _

("V1:V2"), CopyToRange:=Range("K1:S1"), Unique:=False

'trouve la premiere ligne vide , colonne 11

Range("k1").Activate

While ActiveCell <> ""

ActiveCell.Offset(1, 0).Activate

Wend

Next A

End Sub

re,

tu extrait en Range("K1:S1")

copie l'extraction K2:S... et dernière ligne d'un coup

Dans la boucle "A", il faudrait changer le critère V1:V2

c'est quoi Cells(6, 27) ?

Claude

cells (6,27), c'est la cellule qui contient la ligne de formule a aplliquer a un tableau. apres quoi, je lance 1 filtre elabore pour retenir seulement les lignes qui correspondent ex.: les lignes qui contiennent "banane". Ces lignes vont contenir le resultat des formules que j'ai applique au tableau. Donc, lorsque le vba met 1 dans cette cellule, les formules de la ligne 1 s'appliquent au tableau. Ensuite je fais 1 filtre elabore de ce tableau.

Il y a 5 passe donc 5 filtres elabores que je veux enligner un au dessous de l'autre.


dans mon fichier "exemple", v1 v2 correspond aux cellules de la colonne 22, ligne 1 et 2.

Tu es un peu plus avance que moi en vba LOL, je ne sais pas trop quoi faire avec tes instructions.

32exemple.xls (16.00 Ko)

re,

Je ne comprends pas ce que tu veux faire avec les filtres !

----- Principe de base -----

un filtre élaboré comprend 3 éléments

1) une base de données (BDD qui peut contenir des milliers de lignes)

2) une plage de critères (2 lignes), où l'on choisi ce que l'on veut extraire

3) une plage d'extraction

ces 3 éléments doivent avoir les mêmes en-têtes

Dans ton exemple, où sont situés ces 3 éléments ?

Pour moi, le critère est "GR" colonne U (1,2,3,4,5), les autres colonnes ligne 2 restent vides

désolé, c'est pas suffisamment clair

Claude

MILLES EXCUSE, je sais que ca ne dois pas etre evident, regarde le nouveau fichier.

Tu tappe un nombre de 1 a 5 dans la cellule verte et la ligne de formule equivalente se retrouve a la ligne 1 et 2 au dessus.Ces formules sont applique dans tout le tableau des premieres colonne. On fait ensuite un filtre elabore de ce tableau vers la section en mauve, avec comme critere ligne2 colonne 15. Ce qui permet d'extraire toute ces lignes du tableau 1, avec le resultat des formules applique au tableau.

Ce que je veux faire, c'est 5 passe , soit toute les lignes de formules du tableau en rose. Le resultat des 5 filtres elabores doivent se cumuler dans le tableau en mauve.

Si tu trouve ca trop lourd, je comprendrais! merci Claude pour les efforts!

29exemple.zip (7.31 Ko)

re,

Pas besoin de formules RECHERCHEV avec un filtre,

si j'ai bien compris, clique le bouton "Filtre"

tu comprendras mieux le principe des filtres en boucle

Sub Filtre()
Dim Lg&, i%
    Lg = Range("g" & Rows.Count).End(xlUp).Row + 1
        'Application.ScreenUpdating = False
        Range("g2:L" & Lg).ClearContents    'efface
    For i = 1 To 5
        '--- filtre ---
        Range("n2") = i                     'critère
        Range("n5:s14").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
        Range("n1:n2"), CopyToRange:=Range("n16:s16"), Unique:=False

        '--- copie extraction à la suite colonne "G" ---
        Range("n17:s17").Copy
        Range("g65536").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
    Next i
End Sub

Amicalement

Claude

57capucin-filtre.zip (21.37 Ko)

c'est tres interessant sauf que les criteres doivent provenir de la colonne "donnees", ex. BANNE pour la passe 1

OLIVE pour la passe 2

etc...

et la plage d'extraction, les colonnes 1 a 6, afin de faire ressortir toute les lignes de ce tableau avec "BANANE pour la passe 1

"OLIVE" pour la passe 2

C'est pour cela que dans un premier temps, j'extrait avec la fonction recherchev les formules a appliquer a chaque passe!

Par contre le fait que les donnees se cumulent dans la section en mauve, c'est parfait pour moi.

On devrait alors se trouver avec un tableau avec plusieur occurence de "banane",olive, citron ...

Merci pour ta patience, Claude!

Bonjour,

Visiblement, on ne parle pas de la même chose !

pas sûr que ce soit un filtre qu'il te faut.

Fais 2 feuilles Avant et Après macro,

je me rendrais mieux compte.

à te relire

Claude

je suis a un cheveux de reussir. J'utilise =nbval(L1C11) et la cellule pointe me renvoi le nbre de ligne du tableau de destination du filtre elabore, tu connais surement. Comment puis-je inserer cette valeur dans le code du filtre elabore: ... CopyToRange:=Range(K1S1"), autrement dit, remplacer K1S1 par quelque chose comme K&Nbval(L1C11);S&NBVAL(L1C11). J'ai essaye toute sorte de syntaxe mais ca ne marche pas.

Sub Macro1()

'

' Macro1 Macro

' Macro enregistrée le 2011-12-05 par michel

For A = 1 To 5

Cells(6, 27).Value = A

Range("A1:I1625").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _

("V1:V2"), CopyToRange:=Range("K1:S1"), Unique:=False

Next A

End Sub

Bonjour Claude (j'ignore quel heure est-il chez vous). J'avance et je fais ca simple car le vba n'est pas ma force. Peux tu me dire qu'est ce qui ne vas pas dans ma syntaxe: (K est un numero de colonne et B est une variable qui contient le nbre de ligne du tableau) . J'ai teste B et c'est bon.

CopyToRange:=Range(("K"& B):("S"& B))

Sub Macro1()

'

' Macro1 Macro

For A = 1 To 5

'lit le nombre de colonnes du resultat du filtre d'apres la formule de la cellule nbval(L1C10)

B = Cells(1, 10).Value

Cells(6, 27).Value = A

Range("A1:I1625").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _

("V1:V2"), CopyToRange:=Range(("K"& B):("S"& B)), Unique:=False

Next A

End Sub

Salut le forum

Merci de faire usage des BBC codes et de lire La charte du Forum

Plus particulièrement le Bouton Code :

Range ("K" & B & ":S" & B)

Mytå

Merci Myta, ta syntaxe fonctionne! je n'aurais pas trouve!

Je vais suivre tes conseils par rapport au site!

Ma macro plante lorsqu'elle execute le 2 ieme filtre elabore d'une serie de 5. Le message d'erreur est: Nom de champ introuvable ou inc orecte dans la plage d'extraction. Vois tu un erreur dans mon code?

P.S. Comment fonctionne le bouton code?

Sub Macro2()

'macro qui execute 5 filtres elabores et place les resultats les uns au desous des autres

For A = 1 To 5

'lit le nbre de colonnes du resultat du filtre d'apres la formule de la cellule: NBVAL(L1C11:L1000C11)

'afin d'enligner les 5 tableaux de destination les uns au dessous des autres

B = Cells(1, 10).Value

'ecrit ce nombre dans une autre cellule (test)

Cells(2, 10).Value = B

Cells(6, 27).Value = A

Range("A1:I1625").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _

("V1:V2"), CopyToRange:=Range("K" & B & ":S" & B), Unique:=False

Next A

End Sub

Re le forum

Capucin a écrit :

Comment fonctionne le bouton code?

Sélectionne le texte VBA à mettre en forme et appuie sur le bouton Code dans la barre.
Capucin a écrit :

Ma macro plante lorsqu'elle execute le 2 ieme filtre elabore d'une serie de 5

Normal, tu dois désactiver le filtre élaboré avant de lancer la deuxième requête.
ActiveSheet.ShowAllData

Mytå

Merci mytha!

Ma macro plante lorsqu'elle execute le 2 ieme filtre elabore d'une serie de 5. Le message d'erreur est: Nom de champ introuvable ou inc orecte dans la plage d'extraction. Vois tu un erreur dans mon code?

Sub Macro2()

'macro qui execute 5 filtres elabores et place les resultats les uns au desous des autres

     For A = 1 To 5

         'lit le nbre de colonnes du resultat du filtre d'apres la formule de la cellule:  NBVAL(L1C11:L1000C11)
          'afin d'enligner les 5 tableaux de destination les uns au dessous des autres

                       B = Cells(1, 10).Value

                         Cells(6, 27).Value = A

                        Range("A1:I1625").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _
                        ("V1:V2"), CopyToRange:=Range("K" & B & ":S" & B), Unique:=False

           Next A

Re le forum

Sans voir le fichier difficile de t'aider.

Mytå

le fichier contient des macro complementaire. Je me demande s'il est obligatoire que je genere une nouvelle entete a chaque fois que je veux coller une nouvelle destination d'un filtre elabore en dessous du precedent.

J'ai essaye la formule suivante pour essaye de regler mon probleme lors d'une 2ieme passe de filtre elabore.

Cette formule me renvoi le nbre de cellule non vide=1 alors que la colonne K contient plusieurs donne consecutives. "feuil1" est pourtant la feuille active. Si j'essai pour d'autres colonnes, les valeurs recu ne correspondent pas non plus. Y a t-il une erreur dans ma formule?

[code] E = Application.WorksheetFunction.CountA(Feuil1.Range("$K:K"))

 Cells(2, 2).Value = E

[/code]

Merci

Le probleme "plante a la 2 ieme passe d'un filtre elabore" a ete regle en recopiant l'entete du filtre apres chaque nouvelle passe (un filtre elabore doit connaitre les colonnes a filtre), juste au dessous de la destination de la passe precedente. Le but etait de pouvoir enligner la destination des 5 filtres les uns en dessous des autres.

Par ailleurs, j'avais un probleme en employant "Application.WorksheetFunction.COUNTA(sheet(1).range(A:A)" que j'ai trouve sur le net. le compte n'etait pas pris sur la feuille 1 , je ne sais pas pourquoi! la formule suivante fonctionne avec la feuille active:

Application.WorksheetFunction.CountA(Range("K:K"))

Merci de votre support, c'est aprecie!

Sub Macro2()

'macro qui execute 5 filtres elabores(5 criteres different) et place les resultats les uns au desous des autres

Cells(1, 10).Value = 1

'valeur de depart pour B: "1"
B = 1

For a = 1 To 5

 'le contenu de cette celule renvoi des criteres different pour chaque passe du filtre elabore
    Cells(6, 27).Value = a

 'filtre elabore:
 Range("A1:I1625").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _
       ("V1:V2"), CopyToRange:=Range("K" & B & ":S" & B), Unique:=False

 'compte le nombre de ligne non vide du tableau. Sera applique dans la formule plus haut afin de
 'pointe la premiere ligne vide pour la passe suivante du filtre elabore

 B = Application.WorksheetFunction.CountA(Range("K:K"))

  Cells(1, 10).Value = B

  'recopie l'entete du filtre pour la passe subsequente

    Range("K1:S1").Select
    Selection.Copy
    Range("K" & B & ":S" & B).Select
    ActiveSheet.Paste

Next a

End Sub
Rechercher des sujets similaires à "coller resultats filtres elabore"