Sub Copy2()
Dim TabInit() As Variant
Dim TabFinal() As Variant
If Range("G2").Text <> "" Then Exit Sub ' --->> pour ne pas risquer de refaire sur ce qui est fait.
With ActiveSheet 'dans la feuille active : evite les .activate, ou autre .select
dl = .Range("H" & .Rows.Count).End(xlUp).Row 'récupère la dernière ligne de la feuille
TabInit = .Range("A2:R" & dl).Value 'on place toute la feuille dans un tableau (sauf la ligne d'entete) colonnes A à R
Set pl = Range("H2:H" & dl) 'set plage =colonne H
ReDim TabFinal(1 To dl + WorksheetFunction.CountIf(pl, "*/*"), 1 To UBound(TabInit, 2)) 'on dimensionne le tablo final : taille tablo Init + nb de lignes à insérer (=nb de "/")
IndF = 1 'initialisation de l'indice sur tablo Final
For i = LBound(TabInit, 1) To UBound(TabInit, 1) 'pour chaque ligne du tablo Init
pos = InStr(TabInit(i, 8), "/") 'recherche du caractère "/"
If pos = 0 Then 'pas de "/"
TabInit(i, 7) = TabInit(i, 8) 'on recopie la colonne H en colonne G dans le Tablo Init
For j = LBound(TabInit, 2) To UBound(TabInit, 2) 'on recopie toutes les colonnes de la ligne
TabFinal(IndF, j) = TabInit(i, j)
Next j
IndF = IndF + 1
Else
'1ere ligne nouvelle avec partie AVANT "/"
TabFinal(IndF, 8) = TabInit(i, 8) 'colonne H du tablo final prend la colonne H du TabInit
TabFinal(IndF, 7) = Split(TabInit(i, 8), "/")(0) 'on sépare (split) la valeur de la colonne H pour prendre la première partie (0) avant le /
For j = 1 To UBound(TabInit, 2) 'pour toutes les colonnes du tableau==> on recopie les éléments qui ne doivent pas bouger
If j <> 7 And j <> 8 Then 'pour ne pas effacer les colonne G et H qu'on vient de traiter au dessus
TabFinal(IndF, j) = TabInit(i, j)
End If
Next j
'2eme ligne nouvelle avec partie APRES "/"
TabFinal(IndF + 1, 8) = TabInit(i, 8) 'colonne H du tablo final prend la colonne H du TabInit
TabFinal(IndF + 1, 7) = Left(Split(TabInit(i, 8), "/")(0), 2) & Split(TabInit(i, 8), "/")(1)
For j = 1 To UBound(TabInit, 2) 'pour toutes les colonnes du tableau==> on recopie les éléments qui ne doivent pas bouger
If j <> 7 And j <> 8 Then 'pour ne pas effacer les colonne G et H qu'on vient de traiter au dessus
TabFinal(IndF + 1, j) = TabInit(i, j)
End If
Next j
IndF = IndF + 2
End If
Next i
.Range("A2:R" & UBound(TabFinal, 1)).Value = TabFinal 'on recopie le tablo final dans la feuille
.Range("G2:H" & .Rows.Count).NumberFormat = "0000" 'on applique le format "000" sur les deux colonnes G et H
End With
End Sub