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 :

Erreur d'execution "1004" la méthode autofilter de la classe range a échoué


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Février 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 16
    Points : 15
    Points
    15
    Par défaut Erreur d'execution "1004" la méthode autofilter de la classe range a échoué
    Bonjour,
    Lorsque que j’exécute la macro qui suit, elle fonctionne parfaitement.
    Lorsque j'utilise ces mêmes lignes dans un formulaire (Fichier joint), elle se plante avec le message : Erreur d'execution "1004" la méthode autofilter de la classe range a échoué.
    Dans le fichier joint CbxChoixCivilite correspond à une combobox.
    Si quelqu'un trouve le problème, Merci par avance
    Francis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub essai()
    CbxChoixCivilite = "Monsieur"
    Set F = Worksheets("Base")
     
        a = F.Range("A1:H" & F.Range("a1").End(xlDown).Row).Value
    a = Worksheets("Base").Range("A1").AutoFilter( _
        Field:=2, _
        Criteria1:=CbxChoixCivilite, _
        VisibleDropDown:=True)
    End sub
    Fichiers attachés Fichiers attachés

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    est tu sur pour determiner ta derniere ligne de vouloir passer par xldown???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub essai()
    CbxChoixCivilite = "Monsieur"
    Set F = Worksheets("Base")
     
     set  a = F.Range("A1:H" & F.Range("a1").End(xlDown).Row)' la derniere ligne pleine a partir d'en haut
    'ou
    'set  a = F.Range("A1:H" & F.cells(rows.count,1)End(xlUp).Row)' la premiere ligne pleine en partant d'en bas 
     
    with a 
    .AutoFilter( Field:=2,   Criteria1:=CbxChoixCivilite,   VisibleDropDown:=True)
    end with
    End sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre à l'essai
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Février 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 16
    Points : 15
    Points
    15
    Par défaut Re
    J'ai essayé d'utiliser xlUp mais ça ne change rien.
    La macro fonctionne dans une procédure classique, mais pas dans mon formulaire

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    ton formulaire est il en mode modal ou pas ?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 97
    Points : 95
    Points
    95
    Par défaut
    Bonjour
    J'ai fait un essai en mettant le code pour le autofiltre civilité dans cbxchoixcivilite_change()
    Cela fonctionne sans aucune erreur mais des que l'on change de ville la fonction cbxchoixville_change exécutée 2 fois de suite la première sans erreur mais pas la seconde

    Cordialement
    Nicogef

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Il y a souvent des problèmes de compatibilité de type avec des Combobox.
    Essaye de commencer par placer le contenu de ta combobox dans une variable déclarée de type String et d'utiliser cette variable dans ton AutoFilter.

    J'ai aussi parfois rencontré des problèmes pour installer un AutoFilter lorsqu'il y en avait déjà un.
    Maintenant, quand je fais ça, je commence par virer un éventuel Autofilter avant d'en installer un nouveau en mettant juste avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Worksheets("Base").AutoFilter is Nothing Then Worksheets("Base").Range("A1").AutoFilter
    Attention, dans le test, "Autofilter" est la propriété de Worksheet et non la méthode de Range.
    Par contre, dans l'action du test, il s'agit de l'Autofilter de Range sans paramètres qui a pour effet de supprimer un Autofilter existant (ce qui laisse la place pour en placer un nouveau).
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    chez moi ton fichier est corrompu
    il ne trouve pas le sheets("Base") alors qu'il y est bien et j'ai une reference manquante
    bref remet ca au propre et reviends
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre à l'essai
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Février 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 16
    Points : 15
    Points
    15
    Par défaut RE
    Tout d'abord merci à tous.
    Patrick je joins à nouveau le fichier. j'espère que tu pourras le lire.
    J'ai déclaré la variable en String.
    Je teste la présence de l'autofilter.
    Mais toujours le même résultat : plantage.
    C'est à n'y rien comprendre d'autant plus que j'ai mis en place une situation identique dans un autre fichier et celà fonctionnait.
    Francis
    Fichiers attachés Fichiers attachés

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Et comment que la methode autofilter a echouée !!! pas étonnant
    c'est quoi ce code ??????,
    t es sensé faire quoi avec ????????
    oulah!! reprends les bases du VBA ca n'a ni queue ni sens
    ta variable "a" tantot un tableau tantot un retour boolean
    et cette ligne c'est quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     a = F.Range("A1:H" & F.Range("a1:h1").End(xlDown).Row).Value
    et ton autofoliter pourquoi le fait tu en 2 fois le 2d annule forcement le 1er filtre

    et ca c'est quoi tu ne sais pas que l'on peut pas faire d'une plage avec des cells invisible une variable tableau directement avec specialcell??????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = Sheets("BASE").Range("A1").CurrentRegion.Offset(1).SpecialCells(xlCellTypeVisible).Value
    tu a copié des petit bouts de( un peu partout) non ??? rassure moi c'est pas toi qui a ecrit ca :si oui faut vraiment que tu revois tes bases
    en l'etat je ne peux rien faire car avec tout la capacité de déduction du monde je ne saurais meme pas te dire ce que tu essaie de faire


    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
    Private Sub CbxChoixVille_Change()
        If Not Worksheets("Base").AutoFilter Is Nothing Then Worksheets("Base").Range("A1").AutoFilter
        Dim Civilite As String
        Civilite = Me.CbxChoixCivilite
     
        Set F = Worksheets("BASE")
        a = F.Range("A1:H" & F.Range("a1:h1").End(xlDown).Row).Value
     
     a = Worksheets("Base").Range("A1:h1").AutoFilter( _
        Field:=2, _
        Criteria1:=CbxChoixCivilite, _
        VisibleDropDown:=True)
     
       Worksheets("Base").Range("A1:h1").AutoFilter _
        Field:=2, _
        Criteria1:=CbxChoixVille, _
        VisibleDropDown:=True
     
          a = Sheets("BASE").Range("A1").CurrentRegion.Offset(1).SpecialCells(xlCellTypeVisible).Value
     
        Me.LbxFiltree.List = FiltreTableau_a(a, Array(1, 2, 3, 4, 7))
             LbxFiltree.ListIndex = -1
    Worksheets("BASE").Range("A1").AutoFilter
    End Sub
    peut etre devrait tu t'exprimer textuellement pour que nous puissions comprendre tes intentions
    car en VBA j'ai pas les mots pour decrire ce code
    de ton code voila ce que je garderais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub CbxChoixVille_Change()
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Membre à l'essai
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Février 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 16
    Points : 15
    Points
    15
    Par défaut RE
    Tu as raison. Je t'ai envoyé à la va-vite un fichier sur lequel j'avais fait beaucoup de modifications avec un code très mal écrit.
    Je renvoie un fichier plus propre.
    L'objectif dans mon formulaire est de choisir 2 informations dans 2 comboboxs différentes (CbxChoixCivilite, CbxChoixVille) afin de filtrer les données de cinq colonnes qui seront affichées dans un listbox (LbxFiltree).

    Par ailleurs :
    - l'autofilter fait en 2 fois fonctionne. Tu peux le constater dans le fichier joint, le second n'annule pas le premier. (Bouton Autofilter 2 fois)
    - tu pense que le code qui suit ne fonctionne pas et que ma variable tableau ne marche pas. Tu te trompe. Dans le fichier joint un formulaire (Bouton form2) te permettra de le constater.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = Sheets("BASE").Range("A1").CurrentRegion.Offset(1).SpecialCells(xlCellTypeVisible).Value
    Ceci dit je n'ai pas la prétention d'être un crack et si tu pense que mon si bas niveau ne mérite pas ton aide, je te remercie tout de même de ce que tu as fait et te souhaite une bonne continuation.
    Fichiers attachés Fichiers attachés

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    c'est pas que je ne veux pas t'aider mais un prof d'info quand meme

    en plus t'insiste sur ton tableau quand je te dis que le specialcells ne le gere pas

    regarde je te dis que ca marche pas il y 1 ou 2 "toto" dans la plage filtrée???

    Nom : demo2.gif
Affichages : 758
Taille : 93,2 Ko

    si il y a une chose dont je suis sur c'est bien ca et dieu sait que j'aurais bien voulu et je suis pas le seul

    on ne peut pas recupérer dans une variable le tableau d'une plage filtrée

    reconnais que c'est un sacré bric a brac ton code
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Membre à l'essai
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Février 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 16
    Points : 15
    Points
    15
    Par défaut RE
    N'ayant pu réaliser ce que je voulais à savoir filtrer une listbox à partir des valeurs de deux combobox en utilisant l'autofiltre j'ai opté pour la solution filtre avancé dans une plage de cellules.
    Je joins néanmoins le fichier qui contient l'affichage de colonnes choisies d'une plage filtrée dans une listbox.
    Merci à ceux qui ont essayé de m'aider
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/07/2017, 16h24
  2. [XL-2007] Erreur d'execution "1004" la méthode autofilter de la classe range a échoué
    Par adamskone dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 11/09/2014, 00h41

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