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 Elaboré et macro [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Par défaut Filtre Elaboré et macro
    Bonjour,

    Je vous écris à nouveau pour un souci d’un tout autre genre.

    Voilà, j’ai une macro qui copie les valeurs d’une colonne de ma base source sans doublons et qui les collent dans une autre feuille. J’ai essayé de la faire la plus générique possible afin de pouvoir m’en servir sur n’importe quelles feuille et colonnes de mon classeur :

    Je vous mets ci-dessous la boucle qui pose 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
     
    Ctr =1
     
        For Each cell In Range(Plage)
    If Not IsNumeric(Application.Match(cell.Value, Sheets(FeuilDest).Columns(ColonneDest), 0)) Or Ctr = 1 Then
                    Select Case (FeuilDest)
                        Case Is = "xxxxxx"
                            Sheets(FeuilDest).Range(ColonneDest & Ctr + Ctr + Ctr + Ctr).Value = cell.Value
                            Ctr = Ctr + 1
                        Case Else
                            Sheets(FeuilDest).Range(ColonneDest & Ctr + 5).Value = cell.Value
                            Ctr = Ctr + 1
                    End Select
                End If
            Next cell
    Cette macro fonctionne plutôt bien : elle parcourt la feuille source et si la valeur observée n'est pas déjà dans la feuille de destination elle la colle.
    Cependant lorsque je veux copier des champs au format « mmm-aa » : le résultat est la colonne entière de ma feuille source au lieu des valeurs sans doublons.

    Je n’arrive pas à voir ce qui cloche, quelqu’un aurait-il une idée ?
    Merci d’avance et bonne journée

    PS : j'allais oublier de dire que FeuilDest est la feuille de destination et ColonneDest la colonne de destination

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Par défaut
    Une piste peut être : lorsqu'on recherche sur les dates il faut transformer la valeur en nombre (un peu comme avec Cnum dans les formules Excel) grâce à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Match(CDbl(cell.Value), Sheets(FeuilDest).Columns(ColonneDest), 0))
    Le soucis c'est que quand on cherche sur une autre colonne source une valeur qui n'est pas une date ça ne marche plus...

    Une idée ?

  3. #3
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Oui et non on peu très bien continuer a travailler sur les dates.

    Sinon tu peux tester si ta cellule est une date ou non et utiliser ce code ou non en fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if isdate(cell) then
    'date
     
    else 
    'pas date
     
    end if

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Par défaut
    Alors j'ai essayé ça

    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
            For Each cell In Range(Plage)
                If IsDate(cell) Then
     
                    Sheets(FeuilDest).Range(ColonneDest & Ctr + 5).Value = CDbl(cell.Value)
                    Ctr = Ctr + 1
     
                ElseIf Not IsNumeric(Application.Match(cell.Value, Sheets(FeuilDest).Columns(ColonneDest), 0)) Or Ctr = 1 Then
     
                    Select Case (FeuilDest)
                        Case Is = "xxxxxx"
                            Sheets(FeuilDest).Range(ColonneDest & Ctr + Ctr + Ctr + Ctr).Value = cell.Value
                            Ctr = Ctr + 1
                        Case Else
                            Sheets(FeuilDest).Range(ColonneDest & Ctr + 5).Value = cell.Value
                            Ctr = Ctr + 1
     
                    End Select
               End If
     
            Next cell
     
    End Sub
    Mais du fait que je n'ai plus le match dans la condition If isdate, ça me copie/colle toutes les valeurs (avec doublons donc)
    Si je mets Application.match sous if isdate, j'ai un message d'erreur :
    "Erreur de compilation, Attendu: ="

    Franchement je suis sure que c'est tout bete mais je sèche

  5. #5
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    heu pourquoi tu na pas mis le match tu disais que pour que cela fonctrionne avec des date il faut le mettre, et que ca planté si ce n'était pas une date donc maintenant tu sais ou le mettre et il ne sera utilisé que si tu as une date
    Après je ne sais pas comment tu le met donc je ne pourrais pas t'aider pour ton problème. Mais ta fonction avec match renvoie un valeur il faut que tu en fasse quelque chose

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Par défaut
    C'est bon, ça a l'air de fonctionner, voilà le fin mot de l'histoire

    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
     
        Ctr = 1
     
           For Each cell In Range(Plage)
     
                If IsDate(cell.Value) Then
                    If Not IsNumeric(Application.Match(CDbl(cell.Value), Sheets(FeuilDest).Columns(ColonneDest), 0)) Or Ctr = 1 Then
     
                       Call casPossible(FeuilDest, ColonneDest, Ctr, cell)
     
                    End If
                Else
                    If Not IsNumeric(Application.Match(cell.Value, Sheets(FeuilDest).Columns(ColonneDest), 0)) Or Ctr = 1 Then
     
                        Call casPossible(FeuilDest, ColonneDest, Ctr, cell)
     
                    End If
                End If
            Next cell
     
    End Sub
    J'ai remplacé toute la partie Select du code précédent par une macro "cas possible" vu que ça se répétait

    Merci encore !

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

Discussions similaires

  1. [E-07] forcer un filtre dans une macro
    Par joniyyy dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/01/2009, 13h43
  2. E03- Comment configurer un filtre elaboré
    Par Godzestla dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/11/2008, 14h45
  3. Réponses: 4
    Dernier message: 24/04/2008, 09h31
  4. Syntaxe pour mettre filtre personnalisé dans macro
    Par tonioj41 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/02/2008, 15h06
  5. [VBA-E]Filtre via une macro sur Excel
    Par jamal.b dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/04/2006, 15h35

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