Microsoft 365 transposer en colonne

  • Initiateur de la discussion Initiateur de la discussion kenny
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
 
@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:
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:
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

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 ?
 
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
 
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))
 
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)
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
48
Affichages
845
Réponses
4
Affichages
118
Retour