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 :

[VBA Excel] Selection.autofilter


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Par défaut [VBA Excel] Selection.autofilter
    Bonjour à tous,

    Je me trouve devant un problème dont je ne comprends pas l'origine.
    Voila je fais une petite application sur Excel avec du code VBA.
    Sur cette application je laisse deux cellules pour que l'utilisateur puisse saisir deux dates.
    Puis l'utilisateur va cliquer sur un bouton. Sur ce, je vais exécuter ma procédure qui va filtrer un tableau qui se trouve sur un auter onglet.

    J'applique mon filtre sur les deux dates données par l'utilisateur
    Voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Selection.AutoFilter Field:=17, Criteria1:="<" & date_fin, Operator:=xlAnd _
     , Criteria2:=">" & date_deb
    Bon déjà là petit souci, lorsque la date commence par 0 (exemple 01/12/06). Lors de l'exécution du filtre, la date est remplacé par Excel en 12/01/06.
    Je précise que j'ai mis les cellules où l'utilisateur saisie les dates au format date " *jj/mm/aaaa ".

    Pour pallier ce premier problème, j'ai mis ce petit bout de code, qui peut sans d'outre être amélioré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    If (Left(date_deb, 1) = "0") Then
        mois_an = Right(date_deb, 7)
        mois = Left(mois_an, 2)
        date_deb = mois + "/" + Left(date_deb, 3) + Right(date_deb, 4)
    End If
    If (Left(date_fin, 1) = "0") Then
        mois_an = Right(date_fin, 7)
        mois = Left(mois_an, 2)
        date_fin = mois + "/" + Left(date_fin, 3) + Right(date_fin, 4)
    End If
    Puis je relance mon filtre, là les critères sont correctes mais le filtre ne me renvoie rien. Pourtant lorsque je termine l'exécution de ma procédure, je vais dans le champs où j'effectue mon filtre. Je fais personnalisé, mes critères sont correctes. Le plus drôle c'est lorsque je mets Ok pour sortir du filtre personnalisé, celui-ci s'effectue.

    Je sais pas si vous avez une idée pour résoudre ce problème mais toutes propositions sont les biens venues.

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    elle sort d'ou ta variable date_deb

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Par défaut
    Citation Envoyé par bbil
    elle sort d'ou ta variable date_deb
    En fait je passe par une procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call Filtre(Range("A1").text,Range("A2").text)
    Les deux cellules passées en paramètre sont les cellules qui contiennent les dates.

    Puis voila le prototype de ma procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Filtre (date_deb As String, date_fin As String)
    Voila en fait, d'où viennent ces variables

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    ben si c'est une date utilise date comme type de donnée... !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sub Filtre (date_deb As date , date_fin As date )
    !! une date n'est pas une chaine de caractére !!

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Par défaut
    Citation Envoyé par bbil
    ben si c'est une date utilise date comme type de donnée... !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sub Filtre (date_deb As date , date_fin As date )
    !! une date n'est pas une chaine de caractére !!

    Oui mais si je fais sa, il va y avoir une incompatibilité de type avec ce que je passe en paramètre lors de l'appel à ma procédure et ce que va recevoir ma procédure

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    ben change les parametres

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Par défaut
    Citation Envoyé par bbil
    ben change les parametres

    Oui mais comment ?
    J'ai essayé en mettant comme paramètre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Filtre(Range("A1").value, Range("A2").value)
    Mais mon paramètre passé dans ce cas est 00/01/1900.
    Donc je vois pas comment dire que ma cellule contient une date

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    tu est bien sur de la feuille active (vu que tu ne met rien devant range...)

    si oui essai ..:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Filtre(Cdate(Range("A1")), Cdate(Range("A2")))

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Par défaut
    Bon j'ai essayé ce bout de code.
    Il passe bien les variables en type Date.

    Par contre, je rencontre toujours le problème d'inversement entre le jour et le mois lorsque le jour commence par 0.

    Hélas, le filtre ne fonctionne toujours pas. Après l'exécution de ma procédure, je retourne dans le filtre personnalisé et là il y a bien les bonnes valeurs. Et lorsque que je clique sur OK, le filtre s'effectue.

    Je crois pas que cela viennent des variables, mais plutôt du filtre.

    J'ai effectué un test, j'ai enregistré une macro. J'ai fais mon filtre personnalisé en saisissant mes deux dates. Puis j'ai cliqué sur OK. Le filtre 'effectue bien.
    J'arrête ma macro, j'enlève le filtre puis je relance ma macro et là , le filtre ne se fait pas. Il n'y a rien qui ressort.

  10. #10
    Invité de passage
    Inscrit en
    Décembre 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1
    Par défaut
    Ben il suffit de rajouter à tes variables CLng(variable) et normalement l'autofiltre affichera ta sélection.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Par défaut
    Désolé de ne pas avoir répondu tout de suite, mais en fait, je suis passer par une autre solution.

    J'ai comme même tester celle-ci mais elle transforme ma variable en
    00/01/1900

Discussions similaires

  1. [VBA-EXCEL] Selection d'une colonne, problème de syntaxe
    Par legillou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/02/2007, 14h09
  2. [VBA-Excel] Selection du texte d'un label
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/11/2006, 15h38
  3. [VBA-excel] Selection multiple de ligne
    Par DVano dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/10/2006, 12h32
  4. [VBA] [Excel] Selection des feuilles
    Par KOFJCH dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/12/2005, 18h18
  5. [VBA-E] Sélection feuilles sous excel
    Par Mystic eyes dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/02/2004, 13h27

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