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