Sub Transposition()
Dim Wsh2 As Worksheet, ZFrml As Range, ZT As Range, ZF As Range, ZD As Range, Cible As Range
Dim Date1 As Long, NbCol As Long, col_cible As Long, NbAnciennes As Long
Application.ScreenUpdating = False
Set Wsh2 = Sheet2 'Feuille contennant la plage à transposer et le tableau cible
With ThisWorkbook 'Récupération des plages nommées du classeur
Set ZT = Evaluate("'" & .Name & "'!Zone_Tampon") 'Plage (transposée) à recopier nommée "Zone_Tampon"
Set ZD = Evaluate("'" & .Name & "'!Zone_Dates") 'Plage contenant les dates du tableau cible
Set ZF = Evaluate("'" & .Name & "'!Zone_Fin") 'Plage nommée "Zone_Fin" (zone en gris située à la fin de la zone de recopie)
Set ZFrml = Evaluate("'" & .Name & "'!Zone_Formules") 'Plage contenant les formules nommée "Zone_Formules"
Set ZFN = Evaluate("'" & .Name & "'!ZFN") 'Plage contenant les formats à appliquer pour les nouvelles données
Set ZFA = Evaluate("'" & .Name & "'!ZFA") 'Plage contenant les formats à appliquer pour les anciennes données
End With
'1ère date de la zone tampon
Date1 = ZT.Cells(1, 1).Value2
'Vérifier si cette date n'est pas déjà dans la plage de données
col_cible = -1: On Error Resume Next: col_cible = WorksheetFunction.Match(Date1, ZD, 0): On Error GoTo 0
If col_cible <> -1 Then
'Si c'est le cas, supprimer les données à partir de cette date incluse
ZF.Offset(0, col_cible - ZF.Column).Resize(, ZF.Column - col_cible).Delete
End If
'Insérer le nbre de colonnes nécessaires à la transposition
NbCol = ZT.Rows.Count 'nbre de colonnes = nbre de lignes de la zone tampon à transposer
ZF.Resize(, NbCol).Insert Shift:=xlToRight
'Zone cible de la transposition
Set Cible = ZF.Offset(0, -NbCol).Resize(, NbCol)
'Recopier les formules
ZFrml.Copy
Cible.Resize(, ZT.Rows.Count).PasteSpecial Paste:=xlPasteFormulas
'Transposer les données
ZT.Copy
Cible.Resize(ZT.Columns.Count, ZT.Rows.Count).PasteSpecial Paste:=xlPasteValues, Transpose:=True
'Figer les valeurs
Cible.Value = Cible.Value
'Formatage des nouvelles données
ZFN.Copy: Cible.PasteSpecial Paste:=xlPasteFormats
'Formatage des anciennes données (s'il y en a)
NbAnciennes = Cible.Column - 2
If NbAnciennes > 0 Then
'Il y a des anciennes données :
ZFA.Copy
Cible.Offset(0, -NbAnciennes).Resize(, NbAnciennes).PasteSpecial Paste:=xlPasteFormats
End If
'Effacement de la zone tampon
ZT.ClearContents
Application.ScreenUpdating = True
End Sub