Filtre tri et transposition

Bonjour à tous,

Je suis débutant en vba excel . J’ai un fichier de données sur plusieurs colonnes et je souhaite les filtrer, les trier , transposer une colonne et récupérer les valeurs dans un tableau. Cela est -il possible par une macro et/ou des formules ?

J'ai bien examiné les différentes réponses déjà apportées à des sujets similaires mais aucune ne réalise la transposition d'une des colonnes

quelqu’un peut-il m’aider ? merci

fichier joint avec les données brutes et le résultat souhaité

Encore merci

Bonjour,

A tester

151trier-transposer.xlsx (11.32 Ko)

Bonjour M12 et merci de ton aide. La fonction marche bien puisque le tableau est déjà disposé. Est-il possible par macro de construire ce tableau sous cette forme , la fonction viendrait ensuite extraire les valeurs?

encore merci

Re,

C'est du vite fait avec l'enregistreur de macro

1 clic sur Création Tableau

par les menus déroulant tu choisis les libellé, semaine et indicateur

2 clic sur Recherche valeur

3 efface le tableau

Bonsoir M12, mirjules, le forum

Dans le module de la Feuil1.

A tester :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x, a, b(), i As Long, n As Long, pos
    If Target.Address <> "$I$2" Then Exit Sub
    Application.EnableEvents = False
    On Error Resume Next
    With Target.CurrentRegion
        .Offset(3).Resize(.Rows.Count - 3).Clear
    End With
    On Error GoTo 0
    With Range("a3").CurrentRegion
        x = Filter(.Parent.Evaluate("transpose(if(countif(offset(" & .Columns(3).Address & _
            ",,,row(1:" & .Rows.Count & "))," & .Columns(3).Address & ")=1," & .Columns(3).Address & _
            ",char(2)))"), Chr(2), 0): a = .Value
        ReDim b(1 To .Rows.Count, 1 To UBound(x) + 1)
        For i = 1 To UBound(x)
            b(1, i + 1) = x(i)
        Next
        With CreateObject("Scripting.Dictionary")
            .CompareMode = 1
            For i = 2 To UBound(a, 1)
                If Not .exists(a(i, 6)) Then
                    .Item(a(i, 6)) = .Count + 2
                    b(.Item(a(i, 6)), 1) = a(i, 6)
                End If
                If a(i, 2) = Target.Value Then
                    pos = Application.Match(a(i, 3), x, 0)
                    b(.Item(a(i, 6)), pos) = a(i, 1)
                End If
            Next
            n = .Count + 1
        End With
    End With
    With Range("I4").Resize(n, UBound(b, 2))
        .Value = b
        With .CurrentRegion
            .Font.Name = "calibri"
            .Font.Size = 11
            .VerticalAlignment = xlCenter
            With .Offset(3).Resize(.Rows.Count - 3)
                .BorderAround Weight:=xlThin
                .Borders(xlInsideVertical).Weight = xlThin
                .Borders(xlInsideHorizontal).Weight = xlThin
                .Cells(1).Interior.ColorIndex = 16
            End With
        End With
    End With
    Application.EnableEvents = True
End Sub
33mirjules.zip (13.83 Ko)

klin89

bonsoir M12 et Klin89,

Vos deux solutions sont élégantes et fonctionnent parfaitement bien. C'est exactement ce que je voulais.

Encore merci

Rechercher des sujets similaires à "filtre tri transposition"