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 :

Récupération Range suite Autofilter


Sujet :

Macros et VBA Excel

  1. #21
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re cedere,

    Juste quelques petites questions à des fins d'apprentissage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .SpecialCells(xlCellTypeBlanks).Cells
    • Ce code pointe sur quelle colonne ? Est ce la colonne du field:=3?
    Car si c'est le cas on est censé éliminer toutes les cellules vide de cette colonne et donc la ligne entière correspondante à cette cellule , non??

    • j'ai voulu reproduire ton code sur la copie mais j'ai eu une erreur
    Peux tu me mettre une demo en entier du code pour une copie feuil1 à feuil2 stp
    Merci d'avance
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  2. #22
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Pour répondre à ta 1ere question, ce n'est pas aussi simple car dans mon traitement ensuite il y a d'autre paramètre qui viennent et qui font que le xlCellTypeBlanks me pose souci, mais dans l'absolu ça aurait répondu à mon besoin
    Encore que je fais déjà des insertions de lignes en bloc sur le fichier 2 ce qui prends un peu de temps alors si je doit encore en supprimer à la fin sur plus de 10000, je préfère m'en passer

    Dis moi en plus sur l'erreur que tu rencontre avec mon code.
    Qu'est ce que c'est comme erreur ?

  3. #23
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re,
    Pour les liens donnés dans ton post regarde le résultat (fichier joint + code). Après je ne sais pas si c'est la meilleure solution, mais ça marche très bien
    le fichier : Filtre et Areas 2.xlsx
    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
    24
    25
    26
    27
    28
    29
    30
    Sub Demo_Backup_Filtre1()
        Dim RgA_Filtre As Range, x&, ws As Worksheet, T!
        T = Timer
     
                Application.ScreenUpdating = False
        For Each ws In Worksheets
            If ws.CodeName <> "Feuil1" Then
                ws.Range("$B$12:$N$21").AutoFilter field:=3, Criteria1:="<>"
                Set RgA_Filtre = ws.Range("_FilterDataBase").SpecialCells(xlCellTypeVisible)
     
                x = 1
                For Each Areas In RgA_Filtre
                    DerL& = Feuil1.Range("B" & Rows.Count).End(xlUp).Row + 1
     
                    If x = 1 And RgA_Filtre.Areas(x).Rows.Count > 1 Then
                        Feuil1.Range("B" & DerL).Resize(RgA_Filtre.Areas(x).Rows.Count, 13).Value = RgA_Filtre.Areas(1).Resize(RgA_Filtre.Areas(x).Rows.Count - 1).Offset(1).Value
                    Else
                        x = x + 1
                        Feuil1.Range("B" & DerL).Resize(RgA_Filtre.Areas(x).Rows.Count, 13).Value = RgA_Filtre.Areas(x).Value
                    End If
                    If x = RgA_Filtre.Areas.Count Then Exit For
                Next
     
            End If
         Next
                    Set RgA_Filtre = Nothing
                    Application.Goto Feuil1.Cells(1), True
                    Application.ScreenUpdating = False
                    MsgBox Format$(Timer - T, "0,000s")
    End Sub
    Alors ??

    La partie que je ne comprends pas puisque le code n'est pas complet avec la copie est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    .Range("$B$12:$N$21").AutoFilter field:=3, Criteria1:="<>"
    nbRowsVisible = .AutoFilter.Range.Columns(3).SpecialCells(xlCellTypeVisible).Count - 1
    Set srcR = .AutoFilter.Range
    Set srcR = srcR.Resize(srcR.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible)
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  4. #24
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Alors
    On active le filtre (j'ai un With avec la feuille concerné) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("$B$12:$N$21").AutoFilter field:=3, Criteria1:="<>"
    On récupère le nombre de ligne qui sont visible après application du filtre (-1 pour la ligne d'entête) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbRowsVisible = .AutoFilter.Range.Columns(3).SpecialCells(xlCellTypeVisible).Count - 1
    Ça me sert ensuite pour ajouter en bloc directement le nombre de lignes nécéssaires

    Si il reste des lignes après le filtre, on récupére la Range qui correspond à l'autofilter, puis on retire la ligne d'entête et on ne prends que les celulles visibles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If nbRowsVisible > 0 Then
        Set srcR = .AutoFilter.Range
        Set srcR = srcR.Resize(srcR.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible)
    End If[/CODE]

  5. #25
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,
    Bon ok, je vais re-tester en espérant ne plus avoir d'erreur, je vais reprendre le fichier de mon post précédent qui est normalement un simili du problème énoncé.

    PS : d'ailleurs, as tu pu le tester avec le code ? J'aimerai avoir ton avis !!
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  6. #26
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    c'est bon j'ai réussi, par contre je ne sais pas si tu as utilisé Copy ou autre chose
    j'ai aussi utilisé : ClearFormats en plus (si tu l'as pas fait??)
    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 srcR As Range, ws As Worksheet
     
                Application.ScreenUpdating = False
     
            For Each ws In Worksheets
                If ws.CodeName <> "Feuil1" Then
                    DerL& = Feuil1.Range("B" & Rows.Count).End(xlUp).Row + 1
                    With ws
                        .Range("$B$12:$N$21").AutoFilter field:=3, Criteria1:="<>"
                        nbRowsVisible = .AutoFilter.Range.Columns(3).SpecialCells(xlCellTypeVisible).Count - 1
                        If nbRowsVisible > 0 Then
                            Set srcR = .AutoFilter.Range
                            Set srcR = srcR.Resize(srcR.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible)
                            srcR.Copy Destination:=Feuil1.Range("B" & DerL)
                        End If
                    End With
                End If
        Next
        Feuil1.Range("B12").CurrentRegion.Offset(1).ClearFormats
     
                Application.ScreenUpdating = False
    End Sub
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  7. #27
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Je fais un Copy/PasteSpeciale xlPasteValues

  8. #28
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    En effet Copy/PasteSpeciale xlPasteValues est plus simple et mieux à l'utilisation que de rajouter une ligne de code avec ClearFormats

    Si tu as le temps, donne moi ton avis après test du code créer Post #23 :http://www.developpez.net/forums/d15...r/#post8597633
    Merci pour tes réponses
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 8
    Dernier message: 03/08/2015, 11h43
  2. [Disque Dur] Récupération fichiers suite à crash disque dur
    Par lansing2 dans le forum Composants
    Réponses: 8
    Dernier message: 10/01/2012, 11h14
  3. Migration sybase V11 - Récupération Login suite à chgt serveur.
    Par Labienus dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 20/03/2008, 16h29
  4. Récupération convertion suite plantage
    Par Telemak dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 04/02/2006, 16h30
  5. Réponses: 4
    Dernier message: 09/01/2006, 01h24

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