Public Sub Macro1()
Dim o As Object 'déclare la variable o (Onglet)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim i As Integer 'déclare la variable i (Incrément)
Dim cg() As Variant 'déclare le tableau de variables indexées cg (Cellules en Gras)
Dim prm As Range 'déclare la variable prm (Plage des Références Majeures)
Set o = Sheets("Feuil1") 'définit l'onglet o
dl = o.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne dl de la colonne 1 (=A) de l'onglet o
Set pl = o.Range("A1:A" & dl) 'définit la plage pl
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
If cel.Font.Bold = True Then 'condition si la cellule est avec une police "gras"
ReDim Preserve cg(i) 'redimensionne le tableau de variable cg
cg(i) = cel.Row 'attribue le numéro de ligne à la variable indexée cg(i)
i = i + 1 'incrémente i
End If 'fin de la condition
Next cel 'prochaine cellule de la boucle
ReDim Preserve cg(i) 'redimensionne le tableau
cg(i) = dl + 1 'attribue la dernière ligne du tableau plus une à la variable indéxée cg(i)
For i = LBound(cg) To UBound(cg) - 1 'boucles sur toutes les variables sauf la dernière (toutes les ligne grises)
Set prm = o.Range(o.Cells(cg(i) + 1, 2), o.Cells(cg(i + 1) - 1, 251)) 'définit la plage prm comprise entre les lignes grises à partir de la colonne 2 jusq'à la colonne 251
For Each cel In prm 'boucle sur toutes les cellules cel de la plage prm (toutes les lignes grises
If cel.Value <> "" Then 'condition : si la cellule n'est pas vide
o.Cells(cg(i), cel.Column).Value = cel.Value 'récupère la valeur de la cellule dans la ligne grise
cel.Value = "" 'efface le contenu de la cellule
End If 'fin de la condition
Next cel 'prochaine celllule de la boucle
Next i 'prochaine variable indéxée de la boucle
End Sub