Récupérer tableau filtré dans variant

Bonjour le forum

Après avoir appliqué un filtre sur un tableau, je souhaite récupérer les données visibles, dans un tableau de type variant, me permettant ensuite de le parcourir et de récupérer les informations qui m'intéressent :

J'ai testé la fonction .SpecialCells(xlCellTypeVisible), mais on dirait que lorsque le filtre fait sauter des lignes (passage de 37 à 150 ici par exemple), la récupération ne va pas plus loin.

En vous remerciant par avance pour votre aide !

Rodolphe.

Bonjour,

Effectivement le tableau n'est initialisé qu'avec les premières lignes visibles consécutives....

Seule solution trouvée :

- copier la plage filtrée dans une autre feuille (par exemple), toutes les lignes filtrées sont bien copiées

- affecter cette plage à un tableau (array)

- effacer la copie

Quelqu'un a peut-être LA solution ?

A+

Bonsoir,

ci-dessous une proposition de code

Sub récup_données_filtrées()
    Dim plage_filtrée As Range, plage As Range, ligne As Range
    Dim dic_attestations As Object
    Dim i As Integer
    Dim élément As Variant
    Dim service1 As String, service2 As String
    Dim date_création As Date, date_fin_validité As Date

    ' Chargement des lignes filtrées dans un dictionnaire
    Set plage_filtrée = Sheets("Liste").Range("A2").CurrentRegion.SpecialCells(xlCellTypeVisible)
    Set dic_attestations = CreateObject("Scripting.Dictionary")
    i = 0
    For Each plage In plage_filtrée.Areas
        For Each ligne In plage.Rows
            If i > 0 Then dic_attestations(i) = ligne.Value
            i = i + 1
        Next ligne
    Next plage

    ' Lecture du tableau des éléments du  dictionnaire
    For Each élément In dic_attestations.items
        service1 = élément(1, 1)
        service2 = élément(1, 2)
        date_création = élément(1, 3)
        date_fin_validité = élément(1, 4)
    Next élément

End Sub

Bonsoir thev,

je me suis permis de modifier ton code pour arriver à ça :

Private Sub CommandButton2_Click()
    Dim plage_filtrée As Range, plage As Range, ligne As Range
    Dim dic_attestations As Object
    Dim i As Integer
    Dim élément As Variant
    Dim service1 As String, service2 As String
    Dim date_création As Date, date_fin_validité As Date
    Dim T
    Set plage_filtrée = Sheets("Liste").Range("A2").CurrentRegion.SpecialCells(xlCellTypeVisible)
    Set dic_attestations = CreateObject("Scripting.Dictionary")
    i = 0
    ' Chargement des lignes filtrées dans un dictionnaire
        For Each ligne In plage_filtrée.Rows
            If i > 0 Then dic_attestations(i) = ligne.Value
            i = i + 1
        Next ligne

 ' Mise des éléments du  dictionnaire dans un tableau
    i = 0
    ReDim T(1 To dic_attestations.Count, 1 To 4)
    For Each élément In dic_attestations.items
        i = i + 1
        For j = 1 To 4
            T(i, j) = élément(1, j)
        Next
    Next élément

'MsgBox UBound(T, 1) & "  " & UBound(T, 2)
End Sub

Pas sûr que ce soit plus rapide que ma solution proposée initialement s'il y a de nombreuses lignes?

A+

Bonjour à vous,

Cela fonctionne, merci beaucoup !

Rodolphe.

Rechercher des sujets similaires à "recuperer tableau filtre variant"