Transposer des lignes en colonnes sans vides par formule

Bonjour à toutes et tous,

J'ai besoin d'un coup de pouce.

Je souhaiterais transposer des lignes en colonnes sans cellules vides selon conditions de dates.

Je souhaiterais également que ce soit uniquement par formule, je joins un fichier exemple avec les résultats souhaités.

16transpose.xlsx (10.63 Ko)

Je vous remercie par avance.

Cordialement.

Petit up

Cela fait 2 jours que je cherche une solution

Personne n'a d'idée ?

Merci.

Bonjour,

Comme tu veux ce résultat par formule, ce n'est pas évident !

Tu pourrais essayer avec un TCD mais je ne maîtrise pas vraiment donc là, je ne peux t'aider !

Voici avec un code VBA :

Sub Test()

    Dim Dico As Object
    Dim Plage As Range
    Dim Cel As Range
    Dim Cle As Variant
    Dim T As Variant
    Dim I As Integer
    Dim J As Integer
    Dim Valeur As String

    Set Plage = Range("A3:A22")
    Set Dico = CreateObject("Scripting.Dictionary")

    'fait en deux passe pour avoir les valeurs de N1 en premier
    For Each Cel In Plage: Dico(Cel.Value) = Dico(Cel.Value) & Cel.Offset(, 1).Value & ",": Next Cel
    For Each Cel In Plage: Dico(Cel.Value) = Dico(Cel.Value) & Cel.Offset(, 2).Value & ",": Next Cel

    'résultat à partir de F9
    J = 9

    For Each Cle In Dico.Keys

        'supprime les vides
        T = Split(Dico(Cle), ",")

        For I = 0 To UBound(T)

            If T(I) <> "" Then Valeur = Valeur & T(I) & ","

        Next I

        'inscription des valeurs
        Range("F" & J).Value = Cle
        Range("H" & J).Value = Valeur
        Range("H" & J).TextToColumns Range("H" & J), , , , , , True
        J = J + 1
        Valeur = ""

    Next Cle

End Sub

Il serait possible de transformer ce code en fonction matricielle que tu pourrais utiliser directement dans Excel !

Bonjour à toutes et tous,

Bonjour Theze,

Merci pour ce code VBA qui fonctionne parfaitement.

Mais je souhaiterais vraiment obtenir le même résultat par formule.

Voici ce que je sais faire, mais il me manque la 2ème séries de la colonne "C" et c'est là que je bloque.

En "H3"

=SIERREUR(INDEX($B$1:$B$22;AGREGAT(15;6;(1/(($A$3:$A$22=$F3)*($B$3:$B$22<>"")))*LIGNE($B$3:$B$22);COLONNE()-7));"")

Il serait possible de transformer ce code en fonction matricielle que tu pourrais utiliser directement dans Excel !

Alors si un formuliste passe par là.

Je joins le fichier avec mes premiers résultats.

6transpose.xlsx (10.20 Ko)

Merci pour celui où celle qui me trouvera la bonne formule.

Cordialement.

Je suis désolé mais j'ai Excel 2007 et la fonction AGGREGATE() n'existe pas, seulement depuis Excel 2010 !

Bonjour

On doit pouvoir simplifier mais ceci fonctionne

=SIERREUR(SI(COLONNE()-7<=NB.SI.ENS($B$3:$B$22;"<>";$A$3:$A$22;$F3);INDEX($B$1:$B$22;AGREGAT(15;6;(1/(($A$3:$A$22=$F3)*($B$3:$B$22<>"")))*LIGNE($B$3:$B$22);COLONNE()-7));INDEX($C$1:$C$22;AGREGAT(15;6;(1/(($A$3:$A$22=$F3)*($C$3:$C$22<>"")))*LIGNE($C$3:$C$22);COLONNE()-7-NB.SI.ENS($B$3:$B$22;"<>";$A$3:$A$22;$F3))));"")

Re Theze,

Avec Excel 2007 ça donnerait en utilisant INDEX PETITE.VALEUR SI

La formule matricielle en "H3"

=SIERREUR(INDEX($B$1:$B$22;PETITE.VALEUR(SI(($A$1:$A$22=$F3)*($B$1:$B$22<>"");LIGNE($A$1:$A$22));COLONNE()-7));"")

Mais je n'arrive toujours pas a intégrer les valeurs de la colonne "C"

2transpose.xlsx (10.52 Ko)

@+

Bonjour 78chris,

Ma réponse à Theze s'est télescopée avec la tienne.

On doit pouvoir simplifier mais ceci fonctionne

Quoi dire ! Ça va faire 3 jours que je cherche une solution, alors je ne vais pas bouder mon plaisir d'avoir enfin la solution à mon problème.

Merci ta solution me convient parfaitement

A la revoyure, comme on dit chez moi, je passe le sujet en résolu.

Cordialement.

La discussion est résolue mais je poste tout de même une fonction perso matricielle qui peut peut être aider quelqu'un un jour (elle demande de sélectionner 5 lignes par 10 colonnes et de valider par Ctrl+Maj+Entrée) en passant en argument la colonne des dates à savoir A3:A22 :

Function Repartir(Plage As Range) As Variant()

    Dim Tbl() As Variant
    Dim Dico As Object
    Dim Cel As Range
    Dim Cle As Variant
    Dim T As Variant
    Dim I As Integer
    Dim J As Integer
    Dim K As Integer
    Dim Valeur As String
    Dim Max As Integer

    Set Dico = CreateObject("Scripting.Dictionary")

    'fait en deux passe pour avoir les valeurs de N1 en premier et ne prend pas en compte les cellules vides
    For Each Cel In Plage
        Dico(Cel.Value) = Dico(Cel.Value) & IIf(Cel.Offset(, 1).Value <> "", Cel.Offset(, 1).Value & ",", "")
    Next Cel

    For Each Cel In Plage
        Dico(Cel.Value) = Dico(Cel.Value) & IIf(Cel.Offset(, 2).Value <> "", Cel.Offset(, 2).Value & ",", "")
    Next Cel

    'recherche la plus grande dimension (nombre max de colonne)...
    For Each Cle In Dico.Keys

        T = Split(Dico(Cle), ",")
        If UBound(T) > Max Then Max = UBound(T)

    Next Cle

    'dimensionne le tableau
    ReDim Preserve Tbl(1 To Dico.Count, 1 To Max + 2)

    'puis le popule
    For Each Cle In Dico.Keys

        J = J + 1

        'les dates
        Tbl(J, 1) = Cle

        'la colonne vide
        Tbl(J, 2) = ""

        'les valeurs
        T = Split(Dico(Cle), ",")
        For K = 0 To UBound(T) - 1: Tbl(J, K + 3) = T(K): Next K

    Next Cle

    Repartir = Tbl

End Function

Bravo Theze, pour cette fonction matricielle.

Toutefois les résultats obtenus sont aux format texte, donc pour obtenir un format nombre il faut:

Écrire la formule comme ceci.

=SIERREUR(Repartir(A3:A22)*1;"")

N'étant pas moi-même apte a modifier ton code VBA, je suis certain que tu ne manqueras pas de relever ce défi.

Cdlt.

bonjour

une contribution

5mdo100.xlsx (12.77 Ko)

cordialement

RE à tous

A noter que c'est aussi faisable par PowerQuery (en add on à partir de 2010 et intégré à partir de 2016)...

Bonjour tulipe_4,

Merci aussi pour cette contribution par formule. comme je le souhaitais au départ.

Je la note avec celle de 78chris, je ne pourrais plus dire que qu'il n'y avait pas de solution, moi qui désespérait hier de ne pas trouver.

Merci à toutes et tous pour vos contributions.

Bonne journée.

Rechercher des sujets similaires à "transposer lignes colonnes vides formule"