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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    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

  2. #2
    Expert confirmé
    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 : 67
    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
    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.

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    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 681
    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

  4. #4
    Membre éprouvé

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    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?

  5. #5
    Expert confirmé
    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 : 67
    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
    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

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    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 681
    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/

  7. #7
    Expert confirmé
    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 : 67
    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
    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).

  8. #8
    Membre extrêmement actif
    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
    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

  9. #9
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    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 681
    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.

  10. #10
    Membre éprouvé

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    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

  11. #11
    Expert confirmé
    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 : 67
    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
    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.

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

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