Voici le nouveau code :
Sub test()
Dim tablo
Dim i&, j&, derlgn&
Dim c As Boolean
derlgn = Sheets("Feuil1").Range("D" & Rows.Count).End(xlUp).Row
tablo = Sheets("Feuil1").Range("A3:G" & derlgn)
For i = UBound(tablo, 1) To 3 Step -1
c = False
If tablo(i, 7) <> Empty And tablo(i, 7) <> "" Then
If CInt(tablo(i, 7)) > 1 And IsNumeric(CInt(tablo(i, 7))) Then
Sheets("Feuil1").Rows(i + 3).Resize(tablo(i, 7) - 1).Insert Shift:=xlDown
For j = 1 To CInt(tablo(i, 7)) - 1
If c = False Then
Sheets("Feuil1").Range("E" & j + i + 2) = CDate(Sheets("Feuil1").Range("E" & i + 2)) + 1: c = True
Else
Sheets("Feuil1").Range("E" & j + i + 2) = CDate(Sheets("Feuil1").Range("E" & j + i + 1)) + 1
End If
Sheets("Feuil1").Range("B" & j + i + 2) = Sheets("Feuil1").Range("B" & i + 2)
Sheets("Feuil1").Range("D" & j + i + 2) = Sheets("Feuil1").Range("D" & i + 2)
Next j
End If
End If
Next i
End Sub
Cette méthode fonctionne mais n'est pas adapté à des grands tableaux ( environ > 10000 lignes ), plus ton tableau sera grand plus le temps d’exécution sera long. Si le temps d’exécution devient long il faudra changer le code pour utiliser des variables de types "Array" pour avoir un temps d’exécution presque instantanées.