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 :

Filtre avancé ne fonctionne pas en VBA mais marche "à la main"


Sujet :

Macros et VBA Excel

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingé Son
    Inscrit en
    Mars 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingé Son

    Informations forums :
    Inscription : Mars 2017
    Messages : 4
    Par défaut Filtre avancé ne fonctionne pas en VBA mais marche "à la main"
    Bonjour à tou.te.s
    je sollicite votre aide pour un pb assez énervant que je n'arrive pas à comprendre...

    J'ai écris un code VBA pour appliquer un filtre avancé à un tableau (le tableau, le résultat et les critères de filtrage sont sur 3 feuilles différentes).
    Lorsque je lance ce code depuis un bouton macro dans le classeur ce code fonctionne très bien. En revanche si je lance ce même code directement depuis l'éditeur VBA j'obtiens une erreur 1004.

    J'ai bien précisé les worksheets dans mon code...

    Je vous joins un extrait de mon classeur avec uniquement le code et les feuilles en question.
    Si vous avez une idée, je suis preneur !

    Merci d'avance.

    Will

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    Sub testFilterPCG()
    PCG_Flt_LastRow = Filter_Advanced_PCG(1)
    MsgBox ("Dernière ligne du tableau filtré : " & PCG_Flt_LastRow)
    End Sub
     
    Function Filter_Advanced_PCG(Optional ByVal Visible, Optional ByVal RefCpte, Optional ByVal Nature, Optional ByVal xx, Optional ByVal xxx, Optional ByVal xxxx, Optional ByVal xxxxx, Optional ByVal LibPerso) As Integer
     
    'INITIALISATION ET COPIE DU HEADER
    'Vide la feuille "RefFilterPCG" et y recrée le Header
     
    With Sheets("RefFilterPCG")
        .Rows(2).Delete 'Efface le contenu de la feuille RefFilterPCG
     
    'REPLISSAGE DU TABLEAU EN VUE DUN FILTRAGE AVANCé
        'les critères inscrits dans une même ligne auront une condition ET
        'les critères inscrits dans deux lignes différentes auront une condition OU
        'on utilise 2 lignes afin d'opérer une opération "ou" sur les colonnes d'année d'exercice I et II
     
     
    'On rempli le filtre avec les données récupérées par la fonction après avoir testé si cette donnée a bien été passée
     If Not IsMissing(Visible) Then .Cells(2, 1).Value = "'=" & Visible  'Inscrit la valeur de visible dans le taleau de référence
     If Not IsMissing(RefCpte) Then .Cells(2, 2).Value = "'=" & RefCpte   'Inscrit la valeur de RefCpte dans le taleau de référence
     If Not IsMissing(Nature) Then .Cells(2, 3).Value = "'=" & Nature   'Inscrit la valeur de Nature dans le taleau de référence
     If Not IsMissing(xx) Then .Cells(2, 4).Value = "'=" & xx   'Inscrit la valeur de xx dans le taleau de référence
     If Not IsMissing(xxx) Then .Cells(2, 5).Value = "'=" & xxx   'Inscrit la valeur de xxx dans le taleau de référence
     If Not IsMissing(xxxx) Then .Cells(2, 6).Value = "'=" & xxxx   'Inscrit la valeur de xxxx dans le taleau de référence
     If Not IsMissing(xxxxx) Then .Cells(2, 7).Value = "'=" & xxxxx   'Inscrit la valeur de xxxxx dans le taleau de référence
     If Not IsMissing(LibPerso) Then .Cells(2, 8).Value = "'=" & LibPerso   'Inscrit la valeur de LibPerso dans le taleau de référence
     
    Ref_LastRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row 'calcule la dernière ligne de RefFilterPCG
    Ref_LastCol = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column 'calcule la dernière colonne de RefFilterPCG
     
     
    End With
     
    'Application du Filtre Avancé et export vers une la feuille PCG_Filtered
        'Efface le contenu de la feuille PCG_Filtered
    Worksheets("PCG_Filtered").Cells.Delete
        'Applique le filtrage avancé et exporte vers la page PCG_Filtered
    Worksheets("PCG_Filtered").Select
     
    Worksheets("PCG").Range("BDD_PCG[#All]").AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=Worksheets("RefFilterPCG").Range("A1:H2"), _
        CopyToRange:=Worksheets("PCG_Filtered").Range("A1"), _
        Unique:=False
     
    'Création d'un tableau à partir des données filtrées
    With Sheets("PCG_Filtered")
        PCG_Flt_LastCol = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column 'calcule la dernière colonne
        PCG_Flt_LastRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row 'calcule la dernière ligne
            .ListObjects.Add(xlSrcRange, .Range(.Cells(1, 1), .Cells(PCG_Flt_LastRow, PCG_Flt_LastCol)), , xlYes).Name = "t_PCG_Filtered" 'cré un tableau avec les données exportées
    End With
     
    'Rétablir les filtres dans le tableau PCG
    If Worksheets("PCG").AutoFilter Is Nothing Then
    Sheets("PCG").Range("BDD_PCG").AutoFilter
    End If
     
    'retourne la valeur PCG_Flt_LastRow (numéro de la dernière ligne du tableau filtré)
    Filter_Advanced_PCG = PCG_Flt_LastRow
     
    End Function
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. css ne fonctionne pas sur firefox, mais sont ok sur IE
    Par phfle1 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 31/10/2008, 18h43
  2. Réponses: 4
    Dernier message: 14/02/2008, 21h13
  3. [AJAX] Code tuto Ajax fonctionne pas sous FF, mais IE et OP sont OK
    Par hugo69 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 08/01/2007, 22h27
  4. Comme "Texte*" ne fonctionne pas en VBA?
    Par NewbiePower dans le forum Access
    Réponses: 3
    Dernier message: 07/12/2006, 11h11

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