Filtre automatique des données sur VBA

Merci pour ta reponse donc si ma feuille s'appelait Dream

je met:

90 Workbooks.Open Filename:=Chemin & Fichier

100 Set WbBase = ActiveWorkbook

110 Set WsBase = WbBase.Sheets(Dream)

120 If WsBase.FilterMode = True Then WsBase.ShowAllData

juste pour m'assurer

merci

Bonjour

Tu me dis

zlam a écrit :

il me faut selection la feuille 1

Donc Set WsBase = WbBase.Sheets(1) suffit

Maintenant ta page s'appelle Dream mais on ne sait pas sa position

Donc pour sélectionner cette page utilises

Set WsBase = WbBase.Sheets("Dream")   ' Ne pas oublier les guillemets 

merci

j'essai

encore moi et le l'eternel probleme de mocro

j'ai adapter ma macro a mon fichier tout marche

mais;

mais on souhaiterai ne pas avoir toutes les periodes splitées dans le fichier comme on l'a Q1;Q2;Q3.... car ca fait trop de feuille dans le meme fichier car il y en a d'autres deja existantes evidement .

on veux plutot qu'une boite de dialogue aparaisse et me demande de choisir la periode a filtrer. puis une fois filtrées je puisse relance la macro qui me complete les données automatiquement .[

Bonjour

Je pense que tu t'amuses

Tu refuses la macro parce qu'elle te rajoutes 3 feuilles mais tu voudrais une autre macro qui ne rajouterai qu'une feuille

C'est pour tester ma patience ?

En tout cas j'abandonne, je passe la main

non pas du tout je ne teste pas ta patience je peux t'assurer que moi non ça m'amuse pas . c'est quelqu'un d'autre qui me le demande. en fait c'est pour mon boulot et on me demande ça c'est pas moi qui prends la décision.

et aussi c'est pas forcement que la macro ajoute une feuille mais ce serai plutôt une sorte de boite de dialogue. qu'on peut lancer.

je sais pas si tu voix ce que je veux dire;

Y a t'il une proposition a mon probleme?

Bonjour,

a present j'ai la conseille claire.

c'est meme que celle d'hier mais dit plus clairement je pense.

Voilà

1) faire une macro qui va generer une boite de dyalogue de tel sorte qu'on puisse :

Choisir le fichier voulu exemple ''Zlam sans macro"

Choisir le feuille voulu exemple Sheet1

Dans ce fichier choisir dans l'entete le mot ' Period'

Sachant que dans la colonne "Period" j'ai Q1,Q2,Q3,Q4

Ma boite de dialogue doit me permetttre de choisir la periode que je veux pour faire un fitre automatique qui ne prendra en compte que et uniquement la (les) periodes selectionnées (Q1,Q2,ou Q3 ou encore Q4)

Le but etant, meme par la suite on insert des colonnes dans mon fichier cela ne puisse pas casser ma macro.

Merci pour votre aide.

Bonjour,

je reviens avec mon probleme de macro

Voila ce que j'ai fais mais helas ca marche pas

pourriez vous me dire ce qui ne va pas

Merci

17ap-sans-macro.xlsx (15.80 Ko)
13ap.xlsm (28.52 Ko)

Bonjour

A tester

Merci beaucoup;

ca a l'air de fonctionner,

mais si je dois l'adapter a d'autres fichiers ce qui va etre le cas certainement , pouvez vous svp me mettre en couleur les elements que je dois changer

Cordialement.

Bonjour

Pour savoir quoi changer : Des commentaires dans le code

Merci

j'essaye des que je peux

Bonjour,

tout d'abaord merci,et ce que tu as fais c'est exactement ce que je veux .

J'ai effectué les modifications en rapport avec mon fichier et quand je clic sur la commandbutton1,

je choisi mon fichier et ma boite de dialogue s"affiche normalement. (heureux)

Mais dans ma zone de filtre, en 'colonne a filtrer j'ai juste 2013 qui apparait au lieu des differents elements de la ligne de titres et pour le filtre je n'est rien du tout.

Je suis allé dans Properties Windows pour changer le nom de la feuille "Sheet1" par "LL" car les informations que je desire (period) se trouvent dans la feuille que j'ai nomé" LL" par example. (sachant qu'il y'a plusieurs feuilles dans mon fichier choisi).

Ou peut etre dois-je inserer un nouveau code pour la recherche de la feuille concerné?

voila ce que j'ai fait en respectant les consignes.

Ai- je omis quelque chose?

Cordialement a tous

Option Explicit

Public WsBase As Worksheet

Public LaColonne As Integer

Public NomCritere As String

Sub Choix_Fichier()

Dim Fichier

Dim WbkSource As Workbook

NomCritere = ""

LaColonne = 0

ChDir ThisWorkbook.Path

Fichier = Application.GetOpenFilename("Fichier données (*.xlsx), *.xlsx")

If Fichier <> False Then

Application.ScreenUpdating = False

Set WbkSource = Workbooks.Open(Fichier)

Set WsBase = WbkSource.Sheets(1)

ThisWorkbook.Activate

Application.ScreenUpdating = True

UserForm1.Show ' Attention ne pas ouvrir en mode non Modal ( 0 ou vbModeless)

If LaColonne <> 0 And NomCritere <> "" Then

Filtre

End If

WbkSource.Close savechanges:=False

End If

End Sub

Sub Filtre()

Dim Nblg As Long

Dim Ws As Worksheet

Dim NbCl As Integer

Set WbBase = ActiveWorkbook

Application.ScreenUpdating = False

Set Ws = ActiveSheet

' **************************************************************************************

' N1 et N2 sont des cellules situées en dehors du tableau de la page contenant le bouton

' **************************************************************************************

Ws.Range("AC1") = WsBase.Cells(2, LaColonne)

Ws.Range("AC2") = NomCritere

With WsBase

If .FilterMode = True Then .ShowAllData

Nblg = .Cells(Rows.Count, LaColonne).End(xlUp).Row

' *********************************

' Le 2 indique la ligne des titres

' *********************************

NbCl = .Cells(6, Columns.Count).End(xlToLeft).Column

End With

If FeuilleExiste(ThisWorkbook, NomCritere) = False Then

ThisWorkbook.Sheets.Add(after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)).Name = NomCritere

End If

With ThisWorkbook.Sheets(NomCritere)

.Cells.Clear

' **************************************************************************************

' A2 correspond à la 1ère cellule de la ligne des titres

' N1 et N2 sont des cellules situées en dehors du tableau de la page contenant le bouton

' **************************************************************************************

WsBase.Range(WsBase.Range("A6"), WsBase.Cells(Nblg, NbCl)).AdvancedFilter _

Action:=xlFilterCopy, criteriarange:=Ws.Range("AC1:AC2"), copytorange:=.Range(.Range("A1"), .Cells(1, NbCl))

End With

With Ws

' **************************************************************************************

' N1 et N2 sont des cellules situées en dehors du tableau de la page contenant le bouton

' **************************************************************************************

.Range("AC1:AC2").ClearContents

.Select

End With

End Sub

Function FeuilleExiste(WkB As Workbook, Nom As String) As Boolean

On Error Resume Next

FeuilleExiste = WkB.Sheets(Nom).Name <> ""

On Error GoTo 0

End Function

Bonjour

zlam a écrit :

Ai- je omis quelque chose?

A première vue non

Tu le sauras en exécutant la macro

Ci-joint les fichiers.

J'ai certainement omis quelque chose.

Je pense que vous aurez une meilleurs vision de ce que j'ai fait.

j'ai modifier le userform

et le Modal1

et Duma

de facon a ce que je puisse choisir la feuille à filtrer; colomme a filtrer et le filtre( les differentes periodes Q1 Q2 Q3 et Q4) si on choisisait "Preiod" comme colonne.

Merci d'avance .

Cordialement à tous

j'ai exécuté mais ça ne fonctione pas

Bonsoir

Il faut reprendre à chaque fois la macro

A tester

Quand je choisi la feuille m'importe laquelle j'ai ce message" run-time erreur 2147352571 (8002000):le type ne correspond pas"

et quand vous dites qu'il faut refaire la macro a chaque fois je ne comprends pas pourquoi.

Bonsoir

Je viens de refaire des tests et je n'ai pas de souci

Il faut refaire (reprendre) quasiment toute les macros car il faut intégrer la nouvelle donne (nom de la feuille) dans les macros

Voici une liste des macros retouchées

' ComboBox1_Change

' CommandButton1_Click(

' UserForm_Initialize

' ComboBox3_Change (nouvelle macro)

' Choix_Fichier

Rechercher des sujets similaires à "filtre automatique donnees vba"