OVH Cloud OVH Cloud

[Macro] Transformer une liste en ligne en liste en colonnes

6 réponses
Avatar
Klendos
Bonjour à tous

Voici le lien d'un sujet dans un forum, pour que vous puissez voir le code.

http://www.informatiquepourtous.com/services/forum/index.php?showtopic=15188&st=0&p=52704&#entry52704

Merci d'avance.

6 réponses

Avatar
Artic-C
Bonjour la cie,

Bonjour à tous

Voici le lien d'un sujet dans un forum, pour que vous puissez voir le
code.

http://www.informatiquepourtous.com/services/forum/index.php?showtopic188&st=0&pR704&#entry52704

Merci d'avance.


En fait, Klendos a posé cette question sur notre forum et je l'ai re-dirigé
vers vos savants cerveaux :-)

En espérant que quelqu'un pourra l'aider (ce dont je ne doute pas ) :-)

Cdlt,
--
¥©¥
[MVP-Windows]
Des trucs, des liens, des utilitaires sur :
http://artic.mvps.org/

Avatar
Nicolas B.
Salut,

Quelque chose comme ça ?

Sub MeF()
Dim i As Integer, j As Integer
Dim l As Integer
Dim sh0 As Worksheet, sh1 As Worksheet
Application.ScreenUpdating = False
Set sh0 = ActiveSheet
Set sh1 = Sheets.Add
For i = 2 To sh0.Range("A1").End(xlDown).Row
For j = 2 To sh0.Cells(i, 1).End(xlToRight).Column Step 2
l = l + 1
sh1.Cells(l, 1).Value = sh0.Cells(i, 1).Value
sh1.Cells(l, 3).Value = sh0.Cells(i, j).Value
sh1.Cells(l, 4).Value = sh0.Cells(i, j + 1).Value
Next
Next
Application.ScreenUpdating = True
End Sub

Pour la colonne B, j'ai pas compris comment fonctionnait la
numérotation, mais tu pourras rajouter toi-même la ligne de code qui
manque pour numéroter.


A+
Nicolas B.

Bonjour à tous

Voici le lien d'un sujet dans un forum, pour que vous puissez voir le code.

http://www.informatiquepourtous.com/services/forum/index.php?showtopic188&st=0&pR704&#entry52704

Merci d'avance.


Avatar
Artic-C
Bonjour *Nicolas B.* , donc, tu nous dis :

Salut,

Quelque chose comme ça ?

Sub MeF()
Dim i As Integer, j As Integer
Dim l As Integer
Dim sh0 As Worksheet, sh1 As Worksheet
Application.ScreenUpdating = False
Set sh0 = ActiveSheet
Set sh1 = Sheets.Add
For i = 2 To sh0.Range("A1").End(xlDown).Row
For j = 2 To sh0.Cells(i, 1).End(xlToRight).Column Step 2
l = l + 1
sh1.Cells(l, 1).Value = sh0.Cells(i, 1).Value
sh1.Cells(l, 3).Value = sh0.Cells(i, j).Value
sh1.Cells(l, 4).Value = sh0.Cells(i, j + 1).Value
Next
Next
Application.ScreenUpdating = True
End Sub

Pour la colonne B, j'ai pas compris comment fonctionnait la
numérotation, mais tu pourras rajouter toi-même la ligne de code qui
manque pour numéroter.


A+
Nicolas B.

Merci Nicolas

J'ai fait suivre la réponse sur le forum au cas ou, mais il ne semble pas
encore être repassé.
--
¥©¥
[MVP-Windows]
Des trucs, des liens, des utilitaires sur :
http://artic.mvps.org/

Avatar
Klendos
Voici la macro que j'ai faite :

Sub transpose()

nbcol = 3 ' nombre de couples de données à lire ope/tps
nbproduit = 4 ' nombre de produits

celluledepart = "C19" ' cellule de départ du tableau à remplir
cellulealire = "A2" ' cellule de départ des données à parcourir


For prod = 0 To nbproduit
For i = 0 To nbcol - 1
Range(celluledepart).Offset(i + (prod * nbcol), 0).Value =
Range(cellulealire).Offset(0 + prod, 0).Value
Range(celluledepart).Offset(i + (prod * nbcol), 1).Value = 10 + 10 * i
Range(celluledepart).Offset(i + (prod * nbcol), 2).Value =
Range(cellulealire).Offset(0 + prod, 2 + (5 * i))
Range(celluledepart).Offset(i + (prod * nbcol), 3).Value =
Range(cellulealire).Offset(0 + prod, 4 + (5 * i))
Next i
Next prod

End Sub


J'ai encore un probléme pour faire pointer cellulealire et celluledepart
dans deux feuilles différentes.

Meric pour votre aide.

Olivier







Bonjour *Nicolas B.* , donc, tu nous dis :

Salut,

Quelque chose comme ça ?

Sub MeF()
Dim i As Integer, j As Integer
Dim l As Integer
Dim sh0 As Worksheet, sh1 As Worksheet
Application.ScreenUpdating = False
Set sh0 = ActiveSheet
Set sh1 = Sheets.Add
For i = 2 To sh0.Range("A1").End(xlDown).Row
For j = 2 To sh0.Cells(i, 1).End(xlToRight).Column Step 2
l = l + 1
sh1.Cells(l, 1).Value = sh0.Cells(i, 1).Value
sh1.Cells(l, 3).Value = sh0.Cells(i, j).Value
sh1.Cells(l, 4).Value = sh0.Cells(i, j + 1).Value
Next
Next
Application.ScreenUpdating = True
End Sub

Pour la colonne B, j'ai pas compris comment fonctionnait la
numérotation, mais tu pourras rajouter toi-même la ligne de code qui
manque pour numéroter.


A+
Nicolas B.

Merci Nicolas

J'ai fait suivre la réponse sur le forum au cas ou, mais il ne semble pas
encore être repassé.
--
¥©¥
[MVP-Windows]
Des trucs, des liens, des utilitaires sur :
http://artic.mvps.org/





Avatar
Artic-C
Bonjour *Nicolas B.* , donc, tu nous dis :

Salut,

Quelque chose comme ça ?

Sub MeF()
Dim i As Integer, j As Integer
Dim l As Integer
Dim sh0 As Worksheet, sh1 As Worksheet
Application.ScreenUpdating = False
Set sh0 = ActiveSheet
Set sh1 = Sheets.Add
For i = 2 To sh0.Range("A1").End(xlDown).Row
For j = 2 To sh0.Cells(i, 1).End(xlToRight).Column Step 2
l = l + 1
sh1.Cells(l, 1).Value = sh0.Cells(i, 1).Value
sh1.Cells(l, 3).Value = sh0.Cells(i, j).Value
sh1.Cells(l, 4).Value = sh0.Cells(i, j + 1).Value
Next
Next
Application.ScreenUpdating = True
End Sub

Pour la colonne B, j'ai pas compris comment fonctionnait la
numérotation, mais tu pourras rajouter toi-même la ligne de code qui
manque pour numéroter.


Voici sa réponse

http://www.informatiquepourtous.com/services/forum/index.php?showtopic188&view=findpost&pR826
[CIT]
Mais je n'arrive à faire pointer cellualire et celluledepart dans 2 feuilles
différentes.

Merci pour votre aide.
[/CIT]

--
¥©¥
[MVP-Windows]
Des trucs, des liens, des utilitaires sur :
http://artic.mvps.org/

Avatar
Klendos
Voici au final ma macro:

[code]
Sub transpose()

nbcol = 12 ' nombre de couples de données à lire ope/tps
nbproduit = 18 ' nombre de produits


nomclasseur = "DUBILAODB1.xls" ' nom du classeur où se trouve les données
nomfeuille = "Feuil1" ' nom de la feuille

celluledepart = "C19" ' cellule de départ du tableau à remplir
cellulealire = "A2" ' cellule de départ des données à parcourir


For prod = 0 To nbproduit
For i = 0 To nbcol - 1
Range(celluledepart).Offset(i + (prod * nbcol), 0).Value =
Workbooks(nomclasseur).Worksheets(nomfeuille).Range(cellulealire).Offset(0 +
prod, 0).Value
Range(celluledepart).Offset(i + (prod * nbcol), 1).Value = 10 + 10 * i
Range(celluledepart).Offset(i + (prod * nbcol), 2).Value =
Workbooks(nomclasseur).Worksheets(nomfeuille).Range(cellulealire).Offset(0 +
prod, 2 + (5 * i))
Range(celluledepart).Offset(i + (prod * nbcol), 3).Value =
Workbooks(nomclasseur).Worksheets(nomfeuille).Range(cellulealire).Offset(0 +
prod, 4 + (5 * i))
Next i
Next prod

End Sub[/code]

Merci à tous pour votre aide.


Bonjour *Nicolas B.* , donc, tu nous dis :

Salut,

Quelque chose comme ça ?

Sub MeF()
Dim i As Integer, j As Integer
Dim l As Integer
Dim sh0 As Worksheet, sh1 As Worksheet
Application.ScreenUpdating = False
Set sh0 = ActiveSheet
Set sh1 = Sheets.Add
For i = 2 To sh0.Range("A1").End(xlDown).Row
For j = 2 To sh0.Cells(i, 1).End(xlToRight).Column Step 2
l = l + 1
sh1.Cells(l, 1).Value = sh0.Cells(i, 1).Value
sh1.Cells(l, 3).Value = sh0.Cells(i, j).Value
sh1.Cells(l, 4).Value = sh0.Cells(i, j + 1).Value
Next
Next
Application.ScreenUpdating = True
End Sub

Pour la colonne B, j'ai pas compris comment fonctionnait la
numérotation, mais tu pourras rajouter toi-même la ligne de code qui
manque pour numéroter.


Voici sa réponse

http://www.informatiquepourtous.com/services/forum/index.php?showtopic188&view=findpost&pR826
[CIT]
Mais je n'arrive à faire pointer cellualire et celluledepart dans 2 feuilles
différentes.

Merci pour votre aide.
[/CIT]

--
¥©¥
[MVP-Windows]
Des trucs, des liens, des utilitaires sur :
http://artic.mvps.org/