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

Excel Discussion :

copier et coller les resultats de filtrage


Sujet :

Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 39
    Points : 35
    Points
    35
    Par défaut copier et coller les resultats de filtrage
    bonjour tt le monde,

    tout d'abord merci au membres de m'avoir aidé a resoudre un problème qui m'a cassé la tête, en fait il s'agit d'un code qui permet de :

    - filtrer le lignes d'une feuille selon des critères bien determiné.
    - copier les lignes filtées et les coller dans une autre feuille.
    - retour à la feuille d'origine, et supression des lignes deja copiée et collée.

    et le voilà:
    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
     
     
    '
    ' filtrage Macro
    '
    Set WsCible = Worksheets("Sheet2")
        NextRow = WsCible.Cells(WsCible.Rows.Count, 1).End(xlUp).Row + 1
        With Worksheets("Sheet1")
            Set Plage = .Range("A2:D" & .Range("A" & .Rows.Count).End(xlUp).Row)
            .Range("A1").AutoFilter
            .Range("$A$1:$D$3000").AutoFilter Field:=4, Criteria1:= "critère"        
     
            On Error GoTo Gestion_erreur
            'Copier/Coller de la plage filtrée dans "Sheet2"
            Plage.SpecialCells(xlCellTypeVisible).Copy WsCible.Cells(NextRow, 1)
        End With
        'Suppression de la plage filtrée dans "Sheet1"
        Plage.EntireRow.Delete
        Worksheets("Sheet1").Range("A1").AutoFilter
    Gestion_erreur:
        Worksheets("Sheet1").Range("A1").AutoFilter
        Application.ScreenUpdating = True

    le code est parfait , mais le problème ici c'est que lorsque l'operation de filtrage ne donne auccun resultat le programme passe à : "gestion_erreur" et c'est tout à fait normal, mon programme est un peu long càd j'utilise ce code plusieures fois afin d'effectuer des filtrages avec de différents critères (des centaines de critères) , en effectuant l'operation de debogage j'ai decouvert que le programme ne supporte pas l'absence de resultat de filtrage plus que deux fois pour un document execl , càd il passe au getion d'erreur qu'une seule fois ; la deuxième , il se plante,,


    merci pour votre patience, et j'apprecie bien vos conseils,, help help

  2. #2
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    rajoute des test conditionnel avant d'effectuer tes filtre et de vouloir en récupérer le resultat.

    Si la zone de filtre n'a qu'une valeur ou pas du tout -> on sort
    Si le résultat de filtre n'a pas de valeur -> on sort

    Dernière chose, tu dis que tu utilise ce code plusieur fois.
    Fais en une procédure qui prend en parametre les différents elements que tu utilise dans ton morceau de code (range, feuille par exemple).

    Et dans ta procédure générale, tu appele juste ta procédure.
    Ca évite de copier coller du code, et si demain tu veux rajouter des opérations pendant tes filtre, tu n'a qu'une méthode a modifier.

  3. #3
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Tu peux effectuer un test pour vérifier que le filtre est actif avant de chercher à le désactiver.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Gestion_erreur:
        If Worksheets("Sheet1").AutoFilterMode Then Worksheets("Sheet1").Range("A1").AutoFilter
        Application.ScreenUpdating = True
    Cordialement.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 39
    Points : 35
    Points
    35
    Par défaut
    merci les gars ,

    nako lito , et comment faire pour connaitre si la zone filtrée contient, ou pas, des lignes ?

    gFZT82 merci à toi également, en fait c'est ton code , si tu te rappelle

  5. #5
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Re,

    Je me disais bien que ça avait un air de déjà vu .
    Un petit complément d’info sur le test que je t’ai proposé : si tu ne vérifies pas l’état du filtre avant de demander la désactivation, tu risques d’obtenir l’effet inverse, à savoir activer le filtre avant de quitter la procédure. Lorsque tu vas repasser dans ta procédure, Worksheets("Sheet1").Range("A1").AutoFilter va alors désactiver le filtre et le reste de la procédure ne pourra pas se réaliser.
    Cela dit, si tu as ce problème, c’est sûrement parce qu’une autre erreur que celle initiée par le filtrage se produit. C’est de ce coté qu’il va falloir que tu grattes.

    Cordialement.

  6. #6
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, voir avec qqch comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c = Plage.SpecialCells(xlCellTypeVisible).Count

  7. #7
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    Citation Envoyé par kiki29 Voir le message
    Salut, voir avec qqch comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c = Plage.SpecialCells(xlCellTypeVisible).Count
    Exact, avec un truc dans le genre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    If (Plage.SpecialCells(xlCellTypeVisible).Count <= 1) Then
    ------------
    ------------
    End If
    Un résultat de filtre n'est ni plus ni moins qu'un Range au même titre qu'un autre range, donc tu peux effectuer les même test.

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/01/2012, 19h51
  2. Réponses: 6
    Dernier message: 15/05/2008, 15h20
  3. copier les resultats d'une requete sql dans un fichier texte
    Par mohammed_amine_wardy dans le forum SQL
    Réponses: 1
    Dernier message: 02/01/2008, 16h23
  4. Réponses: 3
    Dernier message: 23/09/2006, 15h19
  5. [Word] Problème de copier/couper/coller suivant les versions
    Par SkYsO dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 07/12/2005, 21h11

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