Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim PS As Range 'déclare la variable PS (Plage Source)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim C As Integer 'déclare la variable C (Compteur)
Dim K As Integer 'déclare la variable K (incrément)
Dim I As Integer 'déclare la variable I (Incrément)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Set OS = Worksheets("FeuilA") 'définit l'onglet source OS
Set OD = Worksheets("FeuilB") 'définit l'onglet destination OD
Set PS = OS.Range("B3").CurrentRegion 'définit la plage source PS
Set PS = PS.Offset(1, 0).Resize(PS.Rows.Count - 1) 'redéfinit la plage source PS (sans la première ligne)
Set DEST = OD.Cells(Application.Rows.Count, "C").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
PS.Copy DEST 'copie la plage source PS dans la cellule de destination DEST
TV = OD.Range("C2").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 4) <> "" Then 'condition 1 : si la donnée ligne I colonne 4 de TV n'est pas vide
K = K + 1: C = C + 1 'incrémente le compteur C, incrémente la variable K
ReDim Preserve TL(1 To 4, 1 To K) 'redimensionne les tableau des lignes TL (4 lignes, K colonnes)
TL(1, K) = C 'définit la donnée ligne 1 colonne K de TL
TL(2, K) = CDate(TV(I, 2)) 'récupère la donnée ligne I colonne 2 de TV dans la ligne 2 colonne K de TL (=> transposition)
If UBound(Split(TV(I, 3), " / ")) > 0 Then 'condition 2 : si les caractères " / " existent
TL(3, K) = Split(TV(I, 3), " / ")(1) 'récupère le texte àprès les caractères dans la ligne 3 colonne K de TL
Else 'sinon
TL(3, K) = TV(I, 3) 'récupère la donnée ligne I colonne 3 de TV dans la ligne 3 colonne K de TL (=> transposition)
End If 'fin de la condition 2
TL(4, K) = TV(I, 4) 'récupère la donnée ligne I colonne 4 de TV dans la ligne 4 colonne K de TL (=> transposition)
End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle
OD.Range("C2").CurrentRegion.Offset(1, 0).ClearContents 'efface les anciennes données
OD.Range("C3").Resize(K, 4).Value = Application.Transpose(TL) 'renvoie dans C3 redimensionnée le tableau TL transposé
OD.Columns(4).HorizontalAlignment = xlRight 'alligmenet des dates à droite
DL = OD.Cells(Application.Rows.Count, "C").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne C de l'onglet OD
OD.Rows(DL + 1 & ":" & Application.Rows.Count).Delete 'efface toutes les lignes après DL
OD.Activate 'active l'onglet OD
End Sub