Macro permettant de faire un filtre

Bonjour

Je veux faire un filtre sur une colonne d'une feuille excel. Puis, je veux que le résultat de chaque filtre soit mi ( une espece de copier/coller) dans une autre feuille

Bonjour,

Énoncé trop vague pour envisager une réponse. Si tu veux pas faire l'effort d'être clair je vois pas pourquoi nous en ferions pour toi... Un petit fichier exemple correspondant à ton original serait, comme toi, le bienvenu.

ThauThème a écrit :

Bonjour,

Énoncé trop vague pour envisager une réponse. Si tu veux pas faire l'effort d'être clair je vois pas pourquoi nous en ferions pour toi... Un petit fichier exemple correspondant à ton original serait, comme toi, le bienvenu.

De fait.... il n'y pas de devin/medium ici

Bonjour

Pour mieux expliquer mon besoin, j'aurai souhaiter uploader mon fichier. Je ne trouve l'option pour le faire. comment faire ??

Re,

Juste en-dessous de la fenêtre de réponse il u a deux onglet : Options et Ajouter des fichiers joints...

Voici ce que je veux automatiser via mon fichier template ci-joint:

1- sur la feuille 1, j'active le filtre sur la colonne "serveur"

2- sur la colonne "serveur", je filtre un élement de la colonne (exemple w15000101kav08/119501)

3- le résultat, je fais un copier/coller vers une autre feuille ( exemple feuille 2)

merci d'avance

22template.zip (34.00 Ko)

Bonsoir le fil, bonsoir le forum,

En pièce jointe ton fichier modifié avec des macros en 3 étapes :

• Étape 1 dans le composant ThisWorkbook

À l'ouverture du classeur une liste de validation de données est créée en A1 de l'onglet Feuil2, contenant tous les serveurs de la colonne Z de l'onglet Feuil1, avec le code ci-dessous :

Private Sub Workbook_Open()
Module1.Liste 'lance la procédure [Liste] du module [Module1]
End Sub

Puis dans le composant Module1

Public O As Worksheet 'déclare la variable O (Onglet)
Public PL As Range 'déclare la variable PL (PLage)

Public Sub Liste()
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
Dim NC As Byte 'déclare la variable NC (Nombre de Colonnes)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim L As String 'déclare la variable L (Liste)

Set O = Sheets("Feuil1") 'définit l'onglet O
Set PL = O.Range("A1").CurrentRegion 'définit la plage PL
TC = PL 'définit le tableau de celluiles TC
NL = UBound(TC, 1) 'définit le nombre de lignes NL du tableau de cellules TC
NC = UBound(TC, 2) 'définit le nombre de colonnes NC du tableau de cellules TC
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To NL 'boucle sur toutes les lignes I du tablaeu de cellules TC (en partant de la seconde)
    D(TC(I, 26)) = "" 'alimente le dictionnaire D avec la valeur ligne I colonne 26 (=> ccolonne Z) de TC
Next I 'prochaine ligne de la boucle
L = Join(D.keys, ",") 'définit la liste L avec la liste de éléments du dictionanire D sans doublon
With Sheets("Feuil2").Range("A1").Validation 'prend en compte la validation de données de la cellue A1 de l'onglet O
    .Delete 'efface une eventuelle ancienne validation de données
    .Add Type:=xlValidateList, Formula1:=L 'ajoute la liste L comme liste de validation de données
End With 'fin de la prose en compte de la validation de données de la cellue A1 de l'onglet O
End Sub

• Étape 2 dans le composant Feuil2(Feuil2)

Quand tu modifies ou efface le contenu de A1 dans l'onglet Feuil2, les anciennes valeurs sont effacées et les données correspondantes au filtre sont affichées, avec le code ci-dessous :

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim PLV As Range 'déclare la bariable PLV (PLage Visible)

If Target.Address <> "$A$1" Then Exit Sub 'si le changement a lieu ailleurs qu'en A1, sort de la procédure
Range("A3").CurrentRegion.ClearContents 'efface d'éventuelle ancienne données
If Target.Value = "" Then Exit Sub 'si A1 est effacée, sort de la procédure
'filtre l'onglet la 26 colonne de l'onglet O avec le contenu de A1 comme critère
O.Range("A1").AutoFilter Field:=26, Criteria1:=Target.Value
Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit la plage PLV (=la partie visible de la plage PL)
PLV.Copy Sheets("Feuil2").Range("A3") 'copy la plage PLV dans A3 de l'onglet "Feuil2"
O.Range("A1").AutoFilter 'supprime le filtre automatique de l'onglet O
End Sub

Étape 3 dans le composant Feuil2(Feuil2)

Quand tu rentres dans l'onglet Feuil2 (après avoir, par exemple, mis à jour la base de données avec un nouveau serveur), la mise à jour de la liste de validation en A1 de l'onglet Feuil2 est faite grâce au code :

Private Sub Worksheet_Activate()
Module1.Liste 'lance la procédure [Liste] du module [Module1]
End Sub

Pour l'utilisateur tout est transparent, il choisit un serveur dans la liste de la cellule A1 de l'onglet Feuil2 et les données s'affichent à partir de A3...

40obounou-v01.zip (44.06 Ko)

Impressionant Le code

Je ne sais pas ouvrir le zip; dommage

Re,

@Patrick, tu peux prendre le fichier d'Obounou, Template.xls et y copier les codes aux bons endroits et ça le fait...

C'est bizarre mais je ne sais jamais si tu te fous de ma gueule ou si t'es sincères. Dans les deux cas ça me fait marrer donc ce n'est pas bien grave.

hello all

Franchement, il est super ton code!!!!

Sauf que, ce que je veux c'est de créer automatiquement toutes les feuilles correspondant à chaque filtre. soit, le nombre de choix qu'on a en faisant filtre sur la colonne serveur.

Bonjour,

Un truc du genre :

16obounou-v01.xlsm (62.13 Ko)

Cdlt.

Bonjour

C'est super!!!

Merci beaucoup

Bonjour Jean Eric,

Le fichier que vous avez créé pour Obounou est exactement ce que je cherche sauf je veux qu'il créé des classeurs pour chaque filtre et non des onglets.

Pourriez vous m'aider svp?

Merci.

Manuel

Rechercher des sujets similaires à "macro permettant filtre"