Transposer

Bonjour,
j'ai un problème pour transposer des lignes en colonnes à chaque changement d'information, je vous remis l'exemple suivant afin que vous puissiez m'aider:

SB11BG4BLC
baguette blanc 12/4
1
0
3
0
0
7
45
0
65
0
0
0
0
2
#CART
SB11BG4BLU
baguette bleu 12/4
1
0
3
0
0
7
60
0
70
0
0
0
0
2
#CART
SB11BG4N
baguette noir 12/4
1
0
3
0
2
7
2
0
50
0
0
0
0
2
#CART
Lorsque je fais transposer, le resultat est sur la meme lignes, or je voudrais avoir trois lignes.
je souhaite que la fonction transposer finie à chaque fois qu'on trouve la cellule #CART.
bref avoir le resultat suivant:
ligne 1=SB11BG4BLCbaguette blanc 12/4 1 0 3 0 0 7 45 0 65 0 0 0 0 2 #CART
ligne 2=SB11BG4BLU baguette bleu 12/4 1 0 3 0 0 7 60 0 70 0 0 0 0 2 #CART
ligne 3=SB11BG4N baguette noir 12/4 1 0 3 0 2 7 2 0 50 0 0 0 0 2 #CART

je vous remercie de m'aider car mon fichier se compose de plusieurs lignes, et souhaite avoir un tableau...
Configuration: Windows XP Internet Explorer 7.0

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,
    Est-ce que les valeurs à transposer sont dans une seule colonne ?
    1. effectivement les valeurs à transposer sont sur la meme colonnes, merci de votre réponse
  2. Bonjour,
    Merci pour l’information.
    Si la colonne est courte, vous pouvez copier la plage (A1 :A17) et coller/transposer et ensuite le deuxième bloc (A18 :A34) et coller/transposer, etc.

    Ou bien vous utilisez cette procédure qui copie le bloc et le colle ligne par ligne dès colonne [C].

    Sub transposer()
    Dim d As Long, f As Long, lt As Long
    lt = 1
    nl = WorksheetFunction.CountA(Columns(1))
    For d = 1 To nl
        f = WorksheetFunction.Match("#CART", Range("A" & d & ":A" & nl), 0)
        f = f + d - 1
        Range("A" & d & ":A" & f).Copy
        Cells(lt, 3).Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
                False, Transpose:=True
        lt = lt + 1
        d = f
    Next d
        Application.CutCopyMode = False
    End Sub

    1. je vous remercie de votre réponse.
      je vais essayé rapidement cette solution.
  3. je vous remercie de votre réponse mais jai eu le message suivant après la transposition de plusieurs lignes:

    erreur '1004' /
    impossibe de lire la propriété Match de la classe Worksheetfuntion.

    merci de votre suivi.
    1. Bonjour,
      Merci pour l’information.
      Chez moi, la procédure fonctionne sans erreur.
      Sans savoir exactement à quel instant de la procédure se produit l’erreur, je n’ai pas de réponse.
      Mettre le fichier sur https://www.cjoint.com/ et poster le lien !
      1. je vous remercie car votre solution était très utile pour moi, enfin de compte leblocage était uniquement au niveau de nombre de lignes.

        maintenant, j'arrives à transposer mes lignes en colonnes, et voudrais votre aide afin d'inverser la meme formule:

        soit actuellement un fichier présenté de cette manière:

        fdf hghh hggh jkkj llkll #cart
        gfg hghg jhj kjk lkjk jjk #cart
        fdf hghh hggh jkkj llkll #cart
        gfg hghg jhj kjk lkjk jjk #cart
        fdf hghh hggh jkkj llkll #cart
        gfg hghg jhj kjk lkjk jjk #cart

        et je veux qu'il soit en résultat comme suit:

        fdf
        hghh
        hggh
        jkkj
        llkll
        #cart
        gfg
        hghg
        jhj
        kjk
        kjk
        jjk
        #cart
        fdf
        hghh
        hggh
        jkkj
        llkll
        #cart
        gfg
        hghg
        jhj
        kjk
        lkjk
        jjk
        #cart
        fdf
        hghh
        hggh
        jkkj
        llkll
        #cart
        gfg
        hghg
        jhj
        kjk
        lkjk
        jjk
        #cart

        je vous remercie d'avance de votre aide.
    2. Bonjour,
      La plage à traiter en feuille 1 et le résultat en feuille 2.
      Sub transposer_v2()
      Dim DeLi As Long, DeCo As Long, FiLi As Long, FiCo As Long, Nbre_colonne As Long
      Dim Tablo
      Dim C As Long, Co As Byte, Li As Long
      Sheets("Feuil1").Activate 'à adapter au classeur
      DeLi = Range("A1").Row
      DeCo = Range("A1").Column
      FiLi = Cells(65536, DeCo).End(xlUp).Row
      FiCo = ActiveSheet.UsedRange.Columns.Count
      Nbre_colonne = Application.CountA(Range(Cells(DeLi, DeCo), Cells(FiLi, FiCo)))
      ReDim Tablo(Nbre_colonne - 1, 1)

      Li = DeLi
      Co = DeCo
      For C = 0 To UBound(Tablo)
      If Not IsEmpty(Cells(Li, Co)) Then
      Tablo(C, 0) = Cells(Li, Co)
      Co = Co + 1
      Else
      Li = Li + 1
      Co = DeCo
      C = C - 1
      End If
      Next
      Sheets("Feuil2").Activate 'à adapter au classeur
      Application.ScreenUpdating = False
      Range("A1").CurrentRegion.Clear
      With Range("A1").Resize(Nbre_colonne, 1)
      .Value = Tablo
      .Borders.Weight = xlThin
      End With
      End Sub