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 :

Affecter la plage autofilter à un objet de type range [XL-2013]


Sujet :

Macros et VBA Excel

  1. #21
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    En adaptant ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                Set xlsRangeAutoFilter = .SpecialCells(xlCellTypeVisible)
     
                For Each oRange In xlsRangeAutoFilter.Rows
                    Debug.Print oRange.Row
                Next
    Et j'obtiens

    1
    1
    1
    29
    29
    29

    Reste plus qu'a le traiter et faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRange = .Rows(29).Cells
    Pour pointer sur la bonne ligne

    Merci beaucoup Philippe pour ton aide
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  2. #22
    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 755
    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 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Non comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub t()
     Dim rngAfterFilter As Range, rngRow As Range
     With ThisWorkbook.Worksheets("BD").Range("A1").CurrentRegion
       With .Offset(1).Resize(.Rows.Count - 1)
         Set rngAfterFilter = .SpecialCells(xlCellTypeVisible)
       End With
     End With
     For Each rngRow In rngAfterFilter.Rows
       Debug.Print rngRow.Row ' Affichage du numéro de la ligne filtrée
     Next
    End Sub
    pour obtenir
    1
    29
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #23
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Topissime Philippe

    Par contre pourrais tu m'expliquer le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With .Offset(1).Resize(.Rows.Count - 1)
    Il fait commencer à la ligne après la ligne des entêtes si je comprends bien

    J'ai toujours 3 iterations car dans le fichier Excel, il y a des 2 regroupements.

    Merci encore pour ton aide et ta patience
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  4. #24
    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 755
    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 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Par contre pourrais tu m'expliquer le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With .Offset(1).Resize(.Rows.Count - 1)
    Il fait commencer à la ligne après la ligne des entêtes si je comprends bien
    Exactement.
    La ligne qui précède avec la propriété CurrentRegion englobe le titre et les données donc celle-ci se déplace d'une ligne et redimensionne le nombre de lignes moins une
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #25
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Encore merci Philippe pour ton aide extrêmement précieuse.

    Au cas où ça pourrait servir


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim oRange As Range, a As Range
     
    '---- Merci à Philippe
    With Application.ActiveSheet.Range("A1").CurrentRegion
     
     '---------------------------------------------------------------------------------------------------------------------------------------
    '                                     ATTENTION 
    '           Instruction générant une erreur si le filtrage (autoFilter) ne renvoie aucune ligne de données
    '           Donc préconise de tester rows.count et si > 1 alors faire l'instruction 
    '-------------------------------------------------------------------------------------------------------------------------------------------
    With .Offset(1).Resize(.Rows.Count - 1)    
       Set oRange = .SpecialCells(xlCellTypeVisible)
       End With
    End With
    Donc propose plutôt pour ne pas à gérer l'erreur ce code

    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
     
    Dim oRange As Range, a As Range
     
    With Application.ActiveSheet.Range("A1").CurrentRegion
          Set oRange = .SpecialCells(xlCellTypeVisible)
    End With
     
    Debug.Print oRange.Address
    Debug.Print oRange.Rows.Count
     
    For Each a In oRange.Rows
        If a.Row > 1 Then -----------> Si 1 alors c'est l'entête
            Debug.Print a.Row
            a.Columns(4) = 100
        End If
    Next
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

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

Discussions similaires

  1. [XL-2010] Objets de type range, Plage de cellules
    Par hcfkns dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/03/2013, 16h01
  2. Réponses: 2
    Dernier message: 21/03/2013, 18h38
  3. [POO] affecter un objet de type file à un autre
    Par slash_X dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/02/2009, 10h06
  4. objet de type Range - pour utilisation temporaire
    Par angipici dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/08/2008, 00h13
  5. DB objet sous types heritage
    Par smex dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 15/06/2004, 21h58

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