Sub Recopie()
Dim Cel As Range, Col As Integer, Dte As Date, Lg As Integer
Dim Plage As Range
'Désactivation du rafraîchissement écran pour accélérer le déroulement de la procédure
Application.ScreenUpdating = False
'La boucle analyse chaque cellule non vide de la colonne 3 de la feuille "Data"
For Each Cel In Feuil3.Range("B:B").SpecialCells(xlCellTypeConstants)
'Dte stocke la date du jour de la cellule en cours de lecture et du mois et de l'année en cours
Dte = Day(Cel) & "/" & Month(Date) & "/" & Year(Date)
'Si le jour de Dte est supérieur à 20, ajoute 1 au mois
If Day(Date) > 20 Then Dte = DateAdd("m", 1, Dte)
With Feuil1 'Toutes les références commençant par un "." se réfèrent à la feuille "Tableau"
'Lg récupère le numéro de la première cellule vide de Tableau1
'Attention: la numérotation se fait à partir du haut de Tableau1, c'est-à-dire la ligne 4 de la feuille "Tableau"
Lg = .Range("Tableau1").Columns(1).SpecialCells(xlCellTypeConstants).Count + 1
'Plage définit les cellules de Tableau1 correspondant à Lg, soit des colonnes B:O
Set Plage = .Range("Tableau1").Range("A" & Lg & ":N" & Lg)
'Insertion d'une ligne entière sur la feuille "Tableau" sur la ligne Lg +3
'et non dans Tableau1, ce qui provoquait une erreur
.Rows(Lg + 3).EntireRow.Insert Shift:=xlDown
'Copie de la ligne au-dessus de Lg sur la ligne Lg
.Rows(Lg + 2).EntireRow.Copy .Rows(Lg + 3)
'Copie et colle la zone B:I de la ligne de Cel sur la ligne active de la feuille "Tableau"
Feuil3.Range("B" & Cel.Row & ":I" & Cel.Row).Copy Plage.Offset(-1, 0)
'Met la date à jour dans la cellule B
Plage.Offset(-1, 0).Range("A1") = Dte
End With
Next
'Réactivation du rafraîchissement écran (à ne pas oublier)
Application.ScreenUpdating = True
End Sub