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 :

Autofilter plante dans une fonction


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Par défaut Autofilter plante dans une fonction
    BOnjour à tous,

    Voilà 2 jours que je tourne en rond en essayant différents codes pour arriver une solution, mais sans succès.

    En gros :
    - j'ai un classeur Excel dans lequel il y a 12 feuilles correspondant à un mois (Janvier, février etc...).
    - chacune de ces feuilles comporte un mini tableau contenant une liste de données et un total correspondant pour chaque ligne (ex d'une ligne : colonne 1 "121000" - colonne 2 "0,0095").
    - j'ai une dernière feuille qui comporte un tableau gigangtesque de 27000 lignes avec pleins de colonnes et de trucs dedans, avec lesquel je dois justement remplir les différents mois sur les feuilles du classeur.


    A partir de là, j'essaye tout simplement de créer une fonction qui va prendre en parametre un numéro de service (contenu dans le tableau d'une feuille mois) ainsi qu'un numéro de colonne (sur la feuille du tableau géant) sur lesquel je vais devoir me positionner pour trouver un total.

    POur celà, je tente d'utiliser la fonction autofilter. Problème : si je fais une Sub avec les instructions, je peux voir que mon tableau est effectivement bien filtré, tout ça, mais si j'utilise autofilter dans une fonction, ça plante ! La function se termine sans erreur mais en s'arrétant à une instruction précise qui est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim CdC As Range
    Set CdC = Worksheets("Tabelle1").AutoFilter.Range.SpecialCells(xlCellTypeVisible)
    Pareil, si je demande ça, aucune réponse : (Données de ligne 1 colonne 19)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox Worksheets("Tabelle1").Cells(0, 19).Value
    Le programme ne gérère pas d'erreur et en débuggant je vois juste le programme qui s'arrète à ces lignes. Je pense avoir à faire à un véritable bug Excel.
    La différence entre la sub et la function, c'est que la sub s'éxecute de n'importe ou. Or la fonction chaque fois je l'implémente en faisant "=blablalbalbal(blalba)" sur une cellule d'une des feuilles correspondant à un mois. Le fait que la function parte d'une feuille différente du tableau sur lesquel je cherche mes données, j'ai l'impression que ça fait tout merdé !!

    Je désespère à trouver une solution. Le fait d'utiliser une Sub à la place d'une function compliquerai le code et ne serait absolument pas pratique du fait qu'on ne puisse pas lui spécifier avec la souris les cellules que l'on souhaite comme arguments.

    Merci !

    Par exemple en guise de test, voila LA bizarrerie !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function Actualiser_Couts(NumService As String, SelectedMonth As Range) As Integer
        ActiveWorkbook.Worksheets("Tabelle1").Cells(0, 0).Activate
        MsgBox ActiveWorkbook.ActiveSheet.Name
        Call Suppression_Filtre
        [...]
    Et bien ce code, ou bien "Worksheets("Tabelle1").Activate" avant la msgbox, produit le même résultat. La feuille active reste "MAI", à savoir la feuille du mois dans laquelle sur une cellule j'ai appelé la fonction !!

    je vous le dis y a un bug dans le coin ! Dans une fonction, impossible d'activer ou de faire référence à une autre feuille ! (MsgBox "Worksheets("JANVIER").Cells(0,5).Value" ne produit aucun résultat

    pffffffff

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Il est clair que doit poser problème.
    Connais-tu une ligne 0?

    De même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set CdC = Worksheets("Tabelle1").AutoFilter.Range.SpecialCells(xlCellTypeVisible)
    est une bien curieuse syntaxe.
    Je ne comprends même pas ce que tu cherches à faire.

    La différence entre la sub et la function, c'est que la sub s'éxecute de n'importe ou.
    Première fois que j'entends ça.

    En résumé, avant de chercher (des poux) des bugs dans Excel, demande-toi s'ils ne sont pas dans ton code.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Par défaut
    Merci quand même d'avoir répondu.
    Ca fait 2 jours que je cherche des erreurs dans mon code, et je viens de retester l'histoire de la ligne Cells(0, xxx) et effectivement ça ne marche plus.
    C'est à ne rien y comprendre car je jure qu'avant j'avais evidemment mis la ligne 1 et qu'il me renvoyait les données de la ligne 2 !!! En mettant 0 j'obtenais alors les données de la ligne 1 !

    Je viens de vérifier quand même, et là Cells(1, xxx) renvoie bien les données de la ligne 1

    Concernant la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set CdC = Worksheets("Tabelle1").AutoFilter.Range.SpecialCells(xlCellTypeVisible)
    Ca provient du net, les quelques codes que j'ai trouvé font tous la même chose. Le but est de définir une plage de données qui correspondant aux résultat de l'autofiltre sur une feuille (données visibles donc).

    La différence entre la sub et la function, c'est que la sub s'éxecute de n'importe ou.
    Tu crées une sub dans un moduile : tu l'enregistres. Cette sub tu peux l'éxécuter dans tous le classeur, sur n'importe quelle feuille, avec l'option macro, ou bien à partir d'un bouton, ou encore je ne sais quoi. La sub est enregistrée et n'a pas de point d'atache en gros.
    Ta fonction, tu as beau l'avoir mis dans le module 1, elle est appelée à chaque fois depuis la céllule dans laquelle tu l'appelles ("=tafonction(xxx)"). Je ne sais pas comment te l'expiquer mais tant que la fonction n'est pas terminée, il y a une espèce de point d'ancrage sur ta feuille contrairement à une sub. La preuve c'est qu'un autofiltre ne perdure pas et n'est pas visible, l'activation d'une sheet n'est pas visible / ne fonctionne pas, etc...

    Enfin, pour le moment j'ai toujours un problème avec l'instruction Set CdC ou l'autofilter qui ne se met pas en place.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 66
    Par défaut
    J'y connais pas grand chose mais il me semble ,et j'ai deja eut des bug sur autofilter,que autofilter est une instruction qui permet de mettre en place le filtre et en meme temp s'il est à poste il permet de l'enlever.
    Fait un essais en enregistrant la macro en faisant la mise en place par excel.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Par défaut
    En fait je pense avoir confirmation sur mes soupçons :

    Function cannot perform actions. Therefore, you are unable to select another
    cell with a function. This would need to be done with a macro.
    Ca expliquerai pourquoi une sub fonctionne niquel, mais qu'a partir d'une fonction ça plante...

    Merci

Discussions similaires

  1. Deuxième passage dans une fonction qui plante
    Par sempere dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 05/11/2013, 05h57
  2. Transmission d'un objet crée dans une fonction
    Par EvilAngel dans le forum ASP
    Réponses: 2
    Dernier message: 10/05/2004, 20h19
  3. Utilisez MinimizeName() dans une fonction
    Par James_ dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/05/2004, 18h05
  4. [Postgresql]Connecter à une autre base dans une fonction
    Par alex2205 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/05/2003, 11h30
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

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