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 :

problème avec les lignes filtrées


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 problème avec les lignes filtrées
    bonjour tout le monde
    je suis entrain de developper un script VBA qui fait les operations suivantes:

    - filtrer les elements d'une feuille selon des critères bien précis.
    - selectionner les lignes qui viendront après le filtrage , les copier et les coller dans une autre feuille.
    - enfin retour à la première feuille et suppression de ces lignes filtrés.


    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
    Sheets("feuille1").Select
        Range("A1").Select
     
     
      Selection.AutoFilter
        ActiveSheet.Range("$A$1:$D$3000").AutoFilter Field:=4, Criteria1:="critère1"         
         ActiveSheet.UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Select
            Selection.Copy
     
       Sheets("feuille2").Select
    NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
    Cells(NextRow, 1).Select
    ActiveSheet.Paste
    Sheets("other").Select
    ActiveSheet.UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Delete

    le problème ici, c'est que lorsqu'on a pas des lignes aui apparaissent lors du filtrage, toutes les lignes de la feuille1 seront selectionnées , collées dans la feuille2, et enfin supprimées de la feuille1

    any suggestions please ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Contrôleur de gestion en activité
    Inscrit en
    Juillet 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Contrôleur de gestion en activité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 545
    Points : 939
    Points
    939
    Par défaut
    Bonjour,

    essaye re rajouter ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if selection.rows.count = 3000 then exit sub
    Michel

  3. #3
    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 pour la reponse,
    mais le probleme c'est que je ne veux pas sortir du macro , il y a un autre traitement a faire , ce n'est qu'une portion du code, et le deuxieme c'est que le nombre des lignes selectionnées ne depend pas du "3000" ça peut être un nombre inferieure,
    ce que j'ai besoin ici , c'est faire une condition qui tiendra en compte les cas ou le filtrage ne fait sortir aucun resultat,,

  4. #4
    Membre éprouvé
    Homme Profil pro
    Contrôleur de gestion en activité
    Inscrit en
    Juillet 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Contrôleur de gestion en activité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 545
    Points : 939
    Points
    939
    Par défaut
    alors tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if selection.rows.count = 3000 then goto 1

    et tu mets la balise 1 dans la marge, un simple petit 1 à gauche du texte, jute après la zone de code à passer.

  5. #5
    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
    michel , je l'ai essayé mais ça n'a pas marché, en fait , une solution plus générique pouura être plus fiable, j'ai vu dans d'autres forum l'utilisation de "Selection.SpecialCells(xlCellTypeVisible)" ,,, mais en vain

  6. #6
    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 essayer comme cela
    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
    Sub Test()
    Dim WsCible As Worksheet
    Dim Plage As Range, PlageFiltree As Range
        Application.ScreenUpdating = False
        Set WsCible = Worksheets("feuille2")
        NextRow = WsCible.Cells(WsCible.Rows.Count, 1).End(xlUp).Row + 1
        With Worksheets("feuille1")
            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ère1"
            On Error GoTo Gestion_erreur
            'Copier/Coller de la plage filtrée dans "feuille2"
            Plage.SpecialCells(xlCellTypeVisible).Copy WsCible.Cells(NextRow, 1)
        End With
        'Suppression de la plage filtrée dans "feuille1"
        Plage.EntireRow.Delete
        Worksheets("feuille1").Range("A1").AutoFilter
        Application.ScreenUpdating = True
        Exit Sub
    Gestion_erreur:
        Worksheets("feuille1").Range("A1").AutoFilter
        Application.ScreenUpdating = True
    End Sub
    Cordialement.

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 928
    Points : 28 922
    Points
    28 922
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans les exemples ci-dessous, db représente un objet range délimitant la base de données.
    Si tu souhaites vérifier que la base de données filtrées ne contient aucune données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    db.SpecialCells(xlCellTypeVisible).Count = db.Columns.Count
    Si tu veux savoir si le nombre de lignes de la base filtrée est différent de la base d'origine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (db.SpecialCells(xlCellTypeVisible).Count / db.Columns.Count) <> db.Rows.Count
    Exemple
    Ce code ne copie la base filtrée que si elle contient des données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub TestFiltre()
     Dim db As Range, toRng As Range
     With ThisWorkbook
      Set db = .Worksheets("db").Range("A1").CurrentRegion
      Set toRng = .Worksheets("Feuil1").Range("A1")
     End With
     ' Filtre + Copie
     db.AutoFilter Field:=6, Criteria1:="M"
     Select Case True
      Case db.SpecialCells(xlCellTypeVisible).Count <> db.Columns.Count
        db.SpecialCells(xlCellTypeVisible).Copy toRng
     End Select
    End Sub

  8. #8
    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 c'est résolu

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

Discussions similaires

  1. [WD17] Problème avec les lignes sélectionnées d'une table
    Par cladoo dans le forum WinDev
    Réponses: 1
    Dernier message: 12/09/2012, 19h22
  2. problème avec les lignes de commande
    Par Heavy Metal Hero dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 11/06/2007, 11h39
  3. [JTable] Problèmes avec les lignes
    Par bonui13 dans le forum Composants
    Réponses: 8
    Dernier message: 28/03/2007, 13h59
  4. [Photoshop] Problème avec les sauts de lignes
    Par programmerPhil dans le forum Webdesign & Ergonomie
    Réponses: 3
    Dernier message: 31/05/2006, 17h16

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