IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Appliquer un filtre dans un VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2019
    Messages : 119
    Par défaut Appliquer un filtre dans un VBA
    Bonjour a tous;

    Je cherche a enregistrer un une feuille de mon classeur en pdf, mais avec le particularités d'appliquer un filtre sur mon colonne L comportant des nom de communes. Je souhaiterais que cette colonne ce fasse filtre grâce a la cellule H1 d'une autre feuille dans le même classeur. Je pense qu'il faudrait passer par la Méthode "Range.AutoFilter" mais je ne parvient pas a l’appliquer a mon code déjà présent.

    Mes paramètres:

    F1 = Sheets ("TGRI")
    F2 = Sheets("CODAGE")

    source du filtre = H1 feuille:CODAGE
    Tableau a filtrer = feuille :TGRI (E6:BL)
    Collonne du filtre = L

    mon code actuelle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Sub DCsaveTGRI()
    Dim F1 As Worksheet
    Dim F2 As Worksheet
    Set F1 = Sheets("TGRI")
    Set F2 = Sheets("CODAGE")
    Dim Lig As Long
     
     Application.ScreenUpdating = False
     
    Lig = F1.Cells(Rows.Count, 8).End(xlUp).Row
     
      Set D = CreateObject("scripting.dictionary")
      D.CompareMode = vbTextCompare
     
      Dim liste As New Collection
       Dim i As Integer
       On Error Resume Next
       For Each cel In F2.Range("H1")
        If F2.Cells(cel.Row, 22) <> "" Then
        liste.Add cel.Value, CStr(cel.Value)
        End If
       Next cel
     
      For Each C In liste: D(C) = "": Next C 'Mise en place des filtres
    F1.Range("E9:BL" & Lig).AutoFilter field:=8, Criteria1:=D.keys, Operator:=xlFilterValues
     
    F1.Range("E:J,L:M,T:AA,AC:AE,AL:AM,AO:BB,BD:BG,BJ:BL").EntireColumn.Hidden = True
     
    With F1.PageSetup
         ActiveWindow.SmallScroll Down:=12 'Enregistrement sous PDF
        Sheets("TGRI").Select
        Range("E6:BL").Select
        ChDir _
            "F:\L'exhydro\Gestion PEI\Dossier communale\" & Sheets("dc").Range("AC1").Value
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            "F:\L'exhydro\Gestion PEI\Dossier communale\" & Sheets("dc").Range("AC1").Value & "\" & Sheets("dc").Range("AC3").Value & ".pdf" _
            , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
            :=False, OpenAfterPublish:=True
    End With
    ' ********************** enlever filtre
    If Not F1.AutoFilter Is Nothing Then
          If F1.FilterMode Then F1.ShowAllData
          F1.AutoFilter.Range.AutoFilter
        End If
    ' afficher colonne
    F1.Range("E:J,L:M,T:AA,AC:AE,AL:AM,AO:BB,BD:BG,BJ:BL").EntireColumn.Hidden = False
     
     Application.ScreenUpdating = True
    End Sub
    Si une personne pourrais m'expliquer comment utiliser et configurer l'autofiltre ou bien me fournir un bout de code qui effectuerais cette action.

    Dans l'attente d'une âmes charitable.

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Si tu ne travailles pas avec un tableau structuré, mais avec une plage classique, tu peux t'inspirer de ce qui suit. Le principe est d'appliquer autofilter en spécifiant le numéro de la colonne sur laquelle tu places le filtre ainsi que la valeur à conserver.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Test()
      Dim r As Range
      Dim City As String
     
      Set r = Range("a1:b6")
      City = Range("e1").Value
      r.AutoFilter 2, City
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2019
    Messages : 119
    Par défaut
    Bonjour Pierre;

    Merci pour ton code, je l'es intégré au miens et il semble fonctionner mais je ne comprend pas pk la sélection du tableau ne fonctionne pas quand je mets "E9:BL". Avec le code que tu m'as fournie cela effectue bien le filtre mais imprime pas la bonne sélection. je te mets mon code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Sub DCimprTGRItest()
    Dim F1 As Worksheet
    Dim F2 As Worksheet
    Set F1 = Sheets("TGRI")
    Set F2 = Sheets("CODAGE")
    Dim Lig As Long
     
    'Code filtre a inseré
      Dim r As Range
      Dim City As String
     
      Set r = F1.Range("a1:b6")
      City = F2.Range("H1").Value
      r.AutoFilter 8, City
    'Code filtre a inseré
     
    F1.Range("E:J,L:T,X:AE,AK:BB,BD:BF,BI:BL").EntireColumn.Hidden = True 'filtre colonne
     
     
    Application.Dialogs(xlDialogPrinterSetup).Show 'Pour choisir l'imprimante
    With F1.PageSetup
        .PrintArea = ("a1:b6" & Lig)
        .Zoom = False
        .FitToPagesTall = 1
        .FitToPagesWide = 1
    End With
    F1.PrintOut Copies:=1
    ' ********************** enlever filtre
    If Not F1.AutoFilter Is Nothing Then
          If F1.FilterMode Then F1.ShowAllData
          F1.AutoFilter.Range.AutoFilter
        End If
    ' afficher colonne
    F1.Range("E:J,L:T,X:AE,AK:BB,BD:BF,BI:BL").EntireColumn.Hidden = False
     
     Application.ScreenUpdating = True
    End Sub

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je ne comprends pas ce que tu veux dire par "n'imprime pas la bonne sélection". Qu'as-tu comme résultat après l'exécution du code?

    La ligne f1.Range("E:J,L:T,X:AE,AK:BB,BD:BF,BI:BL").EntireColumn.Hidden = True fonctionne sans problème...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2019
    Messages : 119
    Par défaut
    Bonjour a tous;
    Ce que je souhaitait dire c'est que quand tu sectionnelle ta zone d'impression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set r = F1.Range("a1:b6")
    pourquoi quand je souhaite mettre mes informations a savoir "E9:BL" cela ne fonctionne pas.

    peux tu me dire que représente la variable R et City?

    Pour information j'ai du texte au dessus des mes tableaux.
    Nom : Screenshot_1.png
Affichages : 213
Taille : 5,8 Ko

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/11/2015, 21h51
  2. appliquer un filtre dans xml
    Par jlnikko dans le forum ANT
    Réponses: 1
    Dernier message: 19/12/2009, 22h58
  3. VBA Filtre dans requête
    Par gbzmt dans le forum VBA Access
    Réponses: 0
    Dernier message: 06/02/2008, 07h40
  4. [VBA-Excel] Faire un filtre dans un tableau croisé dynamique
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/11/2006, 15h05
  5. [VBA] - Appliquer un filtre
    Par ChristineTine dans le forum SDK
    Réponses: 19
    Dernier message: 08/11/2006, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo