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. #1
    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 Affecter la plage autofilter à un objet de type range
    Bonjour à tous,

    Comment affecter la plage autofilter à un objet de type range avec le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     With xlsWkSheet
            With .Range("A1").CurrentRegion
                .AutoFilter Field:=4, Criteria1:="Gros minet"
                .AutoFilter Field:=19, Criteria1:="Titi"
                .AutoFilter Field:=24, Criteria1:="Toto"
            End With
    End With
    Merci par avance
    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. #2
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    J'avoue ne pas comprendre la question.
    Je te demanderais, sauf ignorance de ma part, ce que tu entends par là. Plus explicitement.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    dim plage as range
    With xlsWkSheet
            With .Range("A1").CurrentRegion
                .AutoFilter Field:=4, Criteria1:="Gros minet"
                .AutoFilter Field:=19, Criteria1:="Titi"
                .AutoFilter Field:=24, Criteria1:="Toto"
            End With
    set  plage = .Range("A1").CurrentRegion 'suffit si tu laisse le filtre actif
     
    Set plage = Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible) ' si tu comptes enlever le filtre par la suite
     
    End With
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  4. #4
    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
    halaster08 ,

    Merci pour ton aide précieuse. Après implementation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set xlsRangeAutoFilter = .SpecialCells(xlCellTypeVisible)
    Le debug.print me donne respectivement

    Debug.Print xlsRangeAutoFilter.Address -> $A$1:$E$1,$P$1:$V$1,$AD$1:$AF$1,$A$29:$E$29,$P$29:$V$29,$AD$29:$AF$29
    Debug.Print xlsRangeAutoFilter.Rows.Count -> 1
    Row.count = 1 car j'imagine que la ligne 1 des entêtes n'est pas prise en compte mais à part ce type de routine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    aRange = split(xlsRangeAutoFilter.Address, ",") 
    For I= 1 to UBound(aRange)
          Traitement pour récupérer toutes les lignes sauf la 1ère
    next I
    Je ne vois pas comment faire pour récupérer le nombre des lignes sélectionnées et leur chiffre associé

    Une autre idée?
    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

  5. #5
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut,

    Il te faut décompter sur le nombre de lignes d'une colonne

    (à adapter)

    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
    Option Explicit
     
    Sub lecompte()
     
    Dim derlign As Integer
     
    With ThisWorkbook.Worksheets("Back")
            derlign = .Cells(.Rows.Count, 4).End(xlUp).Row
            '..........
            'Application du filtre
            '..........
            Debug.Print .Range("A2:A" & derlign).SpecialCells(xlCellTypeVisible).Count
    End With
     
    End Sub

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Citation Envoyé par informer Voir le message
    Je ne vois pas comment faire pour récupérer le nombre des lignes sélectionnées et leur chiffre associé

    Une autre idée?
    Si tu souhaite envoyer le résultat de ton filtre sur une autre plage, la solution la plus simple et la plus efficace c'est les filtres avancés: https://philippetulliez.developpez.c...dvancedfilter/
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  7. #7
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    D'accord Halaster, mais tu peux également effectuer un copier/coller.
    La copie d'un Objet Range filtré sera un autre objet Range non filtré.
    Si le filtre d'un objet Range affiche 2 lignes visibles discontinues, alors la copie résultera en 2 lignes successives (non filtrées).

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  8. #8
    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
    halaster08

    Si je suis le tuto qui donne

    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
    Function ExportByFilter(znData As Range, znCriteria As Range, Optional znExport As Range) As Long
     ' Procédure d'exportation basée sur le filtre élaboré
     ' Author : Philippe Tulliez http://philippe.tulliez.be
     ' Valeur renvoyée : Nombre d'enregistrements exportés
     ' znData     ' Table de données
     ' znCriteria ' Zone des critères
     ' [znExport]   ' Zone d'exportation (si vide exporte tout en créant une feuille)
     If znExport Is Nothing Then ' Création de la feuille d'export et coloration en rouge
      Worksheets.Add before:=Sheets(1)
      With Worksheets(1): ActiveCell = .Range("A1") : .Tab.Color = vbRed: End With
      Set znExport = ActiveCell
     End If
     znData.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=znCriteria, CopyToRange:=znExport
     ExportByFilter = znExport.CurrentRegion.Rows.Count – 1
    End Function


    J’ai quelques difficultés pour adapter à mon code car ne vois pas ce à quoi correspondent
    • CriteriaRange:=znCriteria
    • znData



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim znExport as Range
    Set xlsRangeAutoFilter = .SpecialCells(xlCellTypeVisible)
    ?.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=?, CopyToRange:=znExport
    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

  9. #9
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub ExtraitVersAutreFeuille()
      critere = InputBox("Critere?")
      If critere = "" Then Exit Sub
      [A1].AutoFilter Field:=1, Criteria1:=critere & "*"
      Sheets.Add after:=Sheets(Sheets.Count)
      ActiveSheet.Name = critere
      Sheets("BD").Range("_FilterDataBase").SpecialCells(xlCellTypeVisible).Copy [A1]
      Cells.EntireColumn.AutoFit
      Sheets("BD").ShowAllData
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub NbLignes()
      n = [_filterdatabase].Resize(, 1).SpecialCells(xlCellTypeVisible).Count - 1
      MsgBox n
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub parcoursItemsVisibles()
      For Each c In [_FilterDataBase].Resize(, 1).SpecialCells(xlCellTypeVisible)
        MsgBox c.Value & " " & c.Address
      Next c
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub TransfertArray()
      NbCol = [_FilterDataBase].Columns.Count
      Dim Liste(): ReDim Liste(1 To [_FilterDataBase].Resize(, 1).SpecialCells(xlCellTypeVisible).Count, 1 To NbCol)
      For Each c In [_FilterDataBase].Offset(1).Resize(, 1).SpecialCells(xlCellTypeVisible)
         i = i + 1
         For k = 1 To NbCol: Liste(i, k) = c.Offset(, k - 1): Next k
      Next c
      Sheets(2).[A1].Resize(UBound(Liste), UBound(Liste, 2)) = Liste
    End Sub
    Boisgontier

  10. #10
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut,

    Salut Jacques

    Informer,
    Avec tout le respect que j'ai pour Philippe, je persiste et signe.
    Sur Excel, essaie d'effectuer un copier/coller d'un Range filtré vers une feuille annexe.
    Tu te rendras compte.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  11. #11
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    D'accord Halaster, mais tu peux également effectuer un copier/coller.
    La copie d'un Objet Range filtré sera un autre objet Range non filtré.
    Si le filtre d'un objet Range affiche 2 lignes visibles discontinues, alors la copie résultera en 2 lignes successives (non filtrées).
    Je suis d'accord, mais quitte a faire filtre puis copié/coller, perso je préfère utiliser le filtre avancé qui fait "2 en 1", d'autant que le filtre avancé permet de faire des trucs qu'on peut pas faire avec les filtres normaux, notamment avec les critère calculés.

    Citation Envoyé par informer
    J’ai quelques difficultés pour adapter à mon code car ne vois pas ce à quoi correspondent

    CriteriaRange:=znCriteria
    znData
    As-tu regarder le tuto directement à la partie VBA? Ou as-tu regarder aussi la partie Excel ?
    Si tu regardes la partie Excel, tu verra qu'il n'y a que trois champ à remplir pour faire un filtre avancé, la plage des données (znData), la plage des critères de filtre (znCriteria), et la plage où tu souhaite envoyer le résultat (znExport), une fois que tu as compris comment ça marche en Excel le vba est très simple à écrire.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  12. #12
    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
    Merci à tous pour toutes ces solutions.

    Une précision très importante, le but de la manœuvre.

    Je dois modifier un fichier Excel avec les données d’une extraction Access mais impossible de faire un copyFromRecord car les lignes dans Excel sont MAJ partiellement et avec des règles de gestion.

    Par conséquent, j’ouvre le fichier Excel depuis Access puis lie sequentiellement un recordset dans Access et filtre le fichier Excel en fonction de valeurs de plusieurs champs du recordset pour enfin MAJ la ligne filtrée avec les données de la ligne active du recordset

    Il me faut donc ABSOLUMENT un objet range dans Access qui pointe sur la ligne filtrée pour faire les MAJ.

    Je veux faire comme ça plutôt que de faire une succession de find imbriqué car doit trouver la ligne dans Excel correspondante à celle dunrecordset en fonction de plusieurs champs.

    Sauf à me dire qu’il est possible de faire un équivalent de FIND sur plusieurs champs et sur la currentSelection.
    Vous pouvez me le dire car excel c’est pas ma partie.

    Encore merci à tous
    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

  13. #13
    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 766
    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 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu es plus à l'aise avec Access qu'avec Excel, la manière dont est gérée la zone des critères du filtre avancé d'excel est similaire à l'interface conviviale des requêtes d'Access (QBE).
    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

  14. #14
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Citation Envoyé par informer Voir le message
    Sauf à me dire qu’il est possible de faire un équivalent de FIND sur plusieurs champs et sur la currentSelection.
    En ajoutant une colonne qui concatène tes champs tu peux faire un find sur plusieurs champs.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  15. #15
    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
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Si tu es plus à l'aise avec Access qu'avec Excel, la manière dont est gérée la zone des critères du filtre avancé d'excel est similaire à l'interface conviviale des requêtes d'Access (QBE).
    Bonjour Philippe,

    Le truc c'est que je pilote Excel depuis VBA et je n'arrive toujours pas à pointer sur la/les lignes de l'autoFilter
    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

  16. #16
    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 766
    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 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le truc c'est que je pilote Excel depuis VBA et je n'arrive toujours pas à pointer sur la/les lignes de l'autoFilter
    AutoFilter c'est la méthode du filtre simple qui n'a rien à voir avec AdvancedFilter qui est celle du filtre avancé d'excel
    Je n'ai toujours pas compris ce que tu veux faire.
    Est-ce du VBA pour Access ou du VBA pour excel que tu utilises ?
    Tu peux parfaitement construire un critère calculé en VBA en utilisant deux cellules du classeur dont tu veux copier les données
    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

  17. #17
    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
    Philippe,

    L'objectif est de MAJ des lignes d'un fichier Excel par des données d'une requête dans Access, sachant que toutes les colonnes ne sont pas MAJ et que sur d'autres, il y a des RG.

    Donc depuis Access
    • J'ouvre mon fichier Excel
    • J'initialise un recordSet
    • Je parcours le RecordSet et pour chaque enregistrement , je vérifie qu'une ligne correspond dans Excel
    • S'il existe une ligne correspondante, alors je modifie les valeurs dans Excel



    Le problème est d'obtenir un objet Range qui pointe sur les lignes filtrées pour ensuite les parcourir

    Je suis parti sur cette piste mais il semble qu'elle soit imcmplète voir pas adequate avec mon besoin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set xlsRangeAutoFilter = .SpecialCells(xlCellTypeVisible)
    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

  18. #18
    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 766
    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 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Un petit exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
     Dim rng As Range, rngAfterFilter As Range, Row As Range
     Set rng = ThisWorkbook.Worksheets("BD").Range("A1").CurrentRegion
     Set rngAfterFilter = rng.SpecialCells(xlCellTypeVisible)
     For Each Row In rngAfterFilter.Rows
       Debug.Print Row.Cells(1, 1) ' Affichage de la cellule de la colonne 1 de la ligne
     Next
    End Sub
    Pour lire la colonne 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Debug.Print Row.Cells(1, 2) ' Affichage de la cellule de la colonne 1 de la ligne
    Mieux encore en utilisant le nom de l'étiquette de colonne. En rouge, ce qui a été ajouté par rapport au code précédent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub t()
     Dim rng As Range, rngAfterFilter As Range, Row As Range, Column As Integer
     Set rng = ThisWorkbook.Worksheets("BD").Range("A1").CurrentRegion
     Set rngAfterFilter = rng.SpecialCells(xlCellTypeVisible)
     For Each Row In rngAfterFilter.Rows
       Column = Application.WorksheetFunction.Match("Prénom", rng.Rows(1), 0)
       Debug.Print Row.Cells(1, Column) ' Affichage de la cellule de la colonne cherchée par la fonction MATCH
     Next
    End Sub
    [EDIT]
    Exemple de code pour ne pas prendre en compte la ligne de titre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub t()
     Dim rngAfterFilter As Range, Row As Range, Column As Integer
     With ThisWorkbook.Worksheets("BD").Range("A1").CurrentRegion
      Column = Application.WorksheetFunction.Match("Prénom", .Rows(1), 0)
      With .Offset(1).Resize(.Rows.Count - 1)
       Set rngAfterFilter = .SpecialCells(xlCellTypeVisible)
      End With
     End With
     For Each Row In rngAfterFilter.Rows
       Debug.Print Row.Cells(1, Column) ' Affichage de la cellule de la colonne 1 de la ligne
     Next
    End Sub
    et pour obtenir le numéro de la ligne filtrée
    Pour éviter toute confusion dans le nom des variables, il serait évidemment préférable de nommé la plage de la ligne visible par ce nom rngRow
    Ce qui donnera alors
    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

  19. #19
    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
    Philippe,

    Si je prends to code, j'en déduis q'uil n'y a pas de propriété sur l'objet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     rngAfterFilter = rng.SpecialCells(xlCellTypeVisible)
    Qui permette d'avoir les numéros de lignes affichées après autoFilter car il faut passer par Match

    Je vais developper une routine qui va lire rngAfterFilter.Address avec un split
    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

  20. #20
    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 766
    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 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    As-tu lu ma réponse jusqu'en bas ?
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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