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 :

Problème avec AdvancedFilter


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 69
    Points : 64
    Points
    64
    Par défaut Problème avec AdvancedFilter
    Bonjour,

    Je me permets de vous appeler à l'aide car après avoir cherché deux jours sur les forums, l'aide, etc... je dois me rendre à l'évidence : mon code a un problème (au minimum) et ce n'est visiblement pas moi qui vais le voir

    En deux mots, j'essaye de séparer en plusieurs fichiers (un par centre) les données de centres en utilisant une macro VBA excel 2007. Le numéro de centre est indiqué dans une colonne.

    Dans un premier temps je cherche la zone dans lequel sont les données, je recopie le titre "cid" et la valeur du centre que je cherche dans la colonne après la zone qui contient les données (et cela en ligne 1 et 2).

    Alors vient le plus grand moment... Plantage sur "AdvancedFilter" avec un code d'erreur 1004 "nom de champ introuvable ou incorrect dans la plage d'extraction". Lorsque j'essaye avec des range de type range("A1:Z34"), je n'ai pas de problème mais ici j'essaie d'avoir un code plus générique...

    Voici le code où se situe le problème

    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
     
     
        'création des ranges des données
        Set range_data_global = Worksheets(feuille_data).Range(Worksheets(feuille_data).Cells(ligne_debut_comptage, colonne_debut_comptage), Worksheets(feuille_data).Cells(derniere_ligne, derniere_colonne))
     
        Set range_selector = Worksheets(feuille_data).Range(Worksheets(feuille_data).Cells(1, derniere_colonne + 1), Worksheets(feuille_data).Cells(2, derniere_colonne + 1))
     
        'pour chaque centre, création d'un fichier avec ses données...
        For Each element In tableau_cles
            'cree fiche pour resultat
            Sheets.Add
            ActiveSheet.Name = "tmp"
            'critere de selection
            Worksheets(feuille_data).Cells(2, derniere_colonne + 1).value = element
     
            'filtre de la zone des données
            range_data_global.AdvancedFilter Action:=xlFilterCopy, _
                CriteriaRange:=range_selector, _
                CopyToRange:=Worksheets("tmp").Range("A1"), Unique:=False
     
            ActiveSheet.Copy
            ActiveWorkbook.SaveAs Filename:=element 'nom_fichier = element
            ActiveWorkbook.Close
            ActiveSheet.Delete
            Sheets(feuille_data).Select
     
        Next element
    Voilà, si vous avez des idées...

    Un grand merci à tous ceux qui se pencheront sur le problème!

    Bonne journée

  2. #2
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    et si tu fait range_selector.address ?
    Alleï Bonjour chez vous!

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 69
    Points : 64
    Points
    64
    Par défaut
    Merci pour ta réponse,

    Ca m'a fait évolué en effet, j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    range_data_global.AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=range_selector.Address, _
    CopyToRange:=Worksheets("tmp").Range("A1"), Unique:=False
    comme "address" retournait le range sous forme $KD$1:$KD$2, j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    range_data_global.AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range(range_selector.Address), _
    CopyToRange:=Worksheets("tmp").Range("A1"), Unique:=False
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Range(range_data_global.Address).AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range(range_selector.Address), _
    CopyToRange:=Worksheets("tmp").Range("A1"), Unique:=False
    et finalement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Worksheets(feuille_data).Range("A2:KC24767").AdvancedFilter   Action:=xlFilterCopy, _
            CriteriaRange:=Worksheets(feuille_data).Range("KD1:KD2"), _
            CopyToRange:=Worksheets("tmp").Range("A1"), Unique:=False
    Tous me donne le même code d'erreur... 1004 "nom de champ introuvable ou incorrect dans la plage d'extraction"
    finalement, ça ne viendrait pas des ranges ?!?

    Merci pour votre aide!

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 69
    Points : 64
    Points
    64
    Par défaut
    En fait ceci fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    With Worksheets(feuille_data) 'Adapte le nom de la feuille
        .Range("A1:KC24767").AdvancedFilter Action:=xlFilterCopy, _
         CriteriaRange:=.Range("KD1:KD2"), _
         CopyToRange:=Worksheets("tmp").Range("A1"), Unique:=False    
    End With
    mais pas ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Worksheets(feuille_data) 'Adapte le nom de la feuille
         .Range("A2:KC24767").AdvancedFilter Action:=xlFilterCopy, _
         CriteriaRange:=.Range("KD1:KD2"), _
         CopyToRange:=Worksheets("tmp").Range("A1"), Unique:=False
    End With
    Donc en fait le point bloquant semble venir de la ligne à laquelle on commence le filtre?!?

    Au final, lorsque j'arrange la recherche de mon "range_data_global" pour qu'il commence à la cellule "A1" mon code initial fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    range_data_global.AdvancedFilter Action:=xlFilterCopy, _
          CriteriaRange:=range_selector, _
          CopyToRange:=Worksheets("tmp").Range("A1"), Unique:=False

  5. #5
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    alors tout va bien!?

    Alleï Bonjour chez vous!

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 69
    Points : 64
    Points
    64
    Par défaut
    Exactement mayekeul!
    Merci beaucoup pour ton aide : j'étais en boucle sur l'analyse du passage des ranges et ta fonction m'a fait comprendre que la vérité était ailleurs...

    bonne soirée!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec Range.AdvancedFilter, méthode
    Par Sogestion dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/11/2012, 16h57
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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