Microsoft 365 transposer en colonne

kenny

XLDnaute Occasionnel
Bonjour,

J'aimerais transposer les données de ma feuille 1 en colonne comme dans l'onglet 2 (je le fais avec collage spécial transposé). dans mon onglet remplissage tableau reporter les données transposées car chaque semaine de l'année j'aurais ce fichier.

En sachant que dans ma feuille 1 je peux avoir plus de nom donc pas limité à Dupont 33.
Pourrait -on le faire par VBA Excel.

Merci d'avance (fichier test joint)
 

Pièces jointes

  • Transpose_test.xls
    43 KB · Affichages: 71

Staple1600

XLDnaute Barbatruc
Re

=>Amilo
Merci pour le feedback.
Merci pour le lien.
Le plus dur avec PowerQuery, c'est de perdre le réflexe de partir d'emblée sur VBA.
C'était d'ailleurs déjà le cas, avec les TCD.
Nombre de questions sur XLD pouvaient se traiter par TCD, mais bizarrement, c'était des réponses par VBA qui fusaient.
 

Amilo

XLDnaute Accro
@kenny ,
Il faudrait présenter un fichier avec un échantillon le plus représentatif possible.
Comment et où sont présentées/ ajoutées les données de l'année ?
Est-ce que vous avez un onglet pour chaque semaine ?

Désolé je quitte pour ce soir, je repasserai dans la semaine pour éventuellement une proposition avec Power query.

Cordialement
 
Dernière édition:

laurent950

XLDnaute Accro
Bonjour,
En VBA

VB:
Sub Transpose()
Dim t() As Variant, i, j As Integer
Dim Feuil1, Feuil2 As Worksheet
Set Feuil1 = Worksheets("Feuil1")
Set Feuil2 = Worksheets("remplissage tableau")
ReDim t(1 To 4, 1 To 1)
For i = 2 To Feuil1.Cells(1, 256).End(xlToLeft).Column
    For j = 1 To Feuil1.Cells(65536, 1).End(xlUp).Row
        If j = 4 Then t(j, i - 1) = Format(Cells(j, i), "hh:mm:ss") Else t(j, i - 1) = Cells(j, i)
    Next j
    Debug.Print UBound(t, 2)
    ReDim Preserve t(1 To 4, 1 To UBound(t, 2) + 1)
Next i
' Restitution du tableau
ReDim Preserve t(1 To 4, 1 To UBound(t, 2) - 1)
For i = LBound(t, 2) To UBound(t, 2)
Feuil2.Cells(i + 2, 2).Resize(1, UBound(t, 1)) = Application.Transpose(Application.Index(t, , i))
Next i
End Sub

Ou

VB:
Sub Transpose()
Dim t() As Variant, i, j As Integer
Dim Feuil1, Feuil2 As Worksheet
    Set Feuil1 = Worksheets("Feuil1")
    Set Feuil2 = Worksheets("TableauResultat")
Dim Rgn As Range
    Set Rgn = Feuil1.Range(Feuil1.Cells(1, 1), Feuil1.Cells(Feuil1.Cells(65536, 1).End(xlUp).Row, Feuil1.Cells(1, 256).End(xlToLeft).Column))
    Rgn.Copy
    Feuil2.Cells(1, 1).Select: Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    Feuil2.Cells(1, 1).Resize(Rgn.Columns.Count, Rgn.Rows.Count) = Application.Transpose(Rgn)
End Sub
 
Dernière édition:

kenny

XLDnaute Occasionnel
RE

Je confirme la demande d'Amilo : on manque de précisions

Surtout si le tableau peut avoir plus ou moins de colonnes selon les semaines
Bonsoir Chris, bonsoir Amilo.
En fait les colonnes c'est moi qui les incrémenteraient en fonction des semaines.
Quand je disais il peut avoir plus ou moins de colonnes en fait c'était plus des lignes pour les standardistes. Exemples, je peux avoir tant de standardiste en semaine 1 et moins en semaine 2 ou plus. Mais de ce coté c'est régler avec les mise à jour de PQW. Maintenant il s'agit de reporter le nbre d'appel et le temps passé dans mon onglet base. J'ai fait un exemple bidon pour illustrer.
 

Pièces jointes

  • Transpose_Revu224.xlsx
    31.7 KB · Affichages: 9

chris

XLDnaute Barbatruc
Bonjour

Pas sûr de tout comprendre
L'onglet feuil 1 est un déversoir hebdomadaire ?
Il y a bien un nombre de colonnes variable chaque semaine : il faut donc une stratégie adaptée pour que la requête fonctionne bien.

Tu copies colles après le résultat en valeurs dans l'autre tableau ?
 

kenny

XLDnaute Occasionnel
Bonjour

Pas sûr de tout comprendre
L'onglet feuil 1 est un déversoir hebdomadaire ?
Il y a bien un nombre de colonnes variable chaque semaine : il faut donc une stratégie adaptée pour que la requête fonctionne bien.

Tu copies colles après le résultat en valeurs dans l'autre tableau ?
@chris si tu veux la feuil feuil1je le reçois chaque semaine avec powerquery je met en colonne et je dois reporter les correspondance dans l'onglet base
 

kenny

XLDnaute Occasionnel
Bonjour,
En VBA

VB:
Sub Transpose()
Dim t() As Variant, i, j As Integer
Dim Feuil1, Feuil2 As Worksheet
Set Feuil1 = Worksheets("Feuil1")
Set Feuil2 = Worksheets("remplissage tableau")
ReDim t(1 To 4, 1 To 1)
For i = 2 To Feuil1.Cells(1, 256).End(xlToLeft).Column
    For j = 1 To Feuil1.Cells(65536, 1).End(xlUp).Row
        If j = 4 Then t(j, i - 1) = Format(Cells(j, i), "hh:mm:ss") Else t(j, i - 1) = Cells(j, i)
    Next j
    Debug.Print UBound(t, 2)
    ReDim Preserve t(1 To 4, 1 To UBound(t, 2) + 1)
Next i
' Restitution du tableau
ReDim Preserve t(1 To 4, 1 To UBound(t, 2) - 1)
For i = LBound(t, 2) To UBound(t, 2)
Feuil2.Cells(i + 2, 2).Resize(1, UBound(t, 1)) = Application.Transpose(Application.Index(t, , i))
Next i
End Sub
merci Laurent ;o))
 

kenny

XLDnaute Occasionnel
Bonjour à tous,
Dans la continuité est il possible à partir de mes données hebdos de remplir un fichier mensuels à partir du fichier des stats hebdos.
Mon fichier doit peut $etre avoir la même forme ??
 

Pièces jointes

  • test_ HEBDOS.xlsm
    58.6 KB · Affichages: 5
  • test_mensuels.xlsm
    38.6 KB · Affichages: 3

chris

XLDnaute Barbatruc
RE

SI tes sources disparaissent au fil du temps il faut
  • soit les sauvegarder dans un dossier avec un nom permettant d'en déduire la date afin de reconstituer les périodes si on compile par PQ
  • soit les compiler par VBA dans un unique classeur toujours avec une date (colonne dans ce cas)
 

Discussions similaires

Réponses
11
Affichages
444

Statistiques des forums

Discussions
311 713
Messages
2 081 806
Membres
101 819
dernier inscrit
lukumubarth