Le problème vient du fait que l'instruction "UsedRange.Rows.Count" renvoie le nombre de lignes utilisées sur la feuille.
Si la feuille est vierge, la valeur renvoyée est 1
Si la première ligne est saisie, la valeur renvoyée est toujours 1
Il est donc préférable d'utiliser "Cells(65535, 1).End(xlUp).Row" qui permet en plus de préciser la colonne concernée (deuxième paramètre).
Le code est modifié comme suit:
Private Sub Btn_Valider_Click()
Dim F As Worksheet
Set F = Sheets("Histo")
DerligneF = F.Cells(65535, 1).End(xlUp).Row 'dernière ligne utilisée de la colonne 1
If DerligneF = 1 And IsEmpty(F.Cells(1, 1)) Then
DerligneF = 0
End If
Dim Coul As String
Dim J As String
If Question.Op1.Value Then Coul = "Rouge"
If Question.Op2.Value Then Coul = "Verte"
If Question.Op3.Value Then Coul = "Jaune"
J = Question.Lst_Jours.Value
F.Cells(DerligneF + 1, 1).Value = J & " et la couleur " & Coul 'écriture sur première ligne non utilisée de la colonne 1
MsgBox "Enregistré sur onglet HISTO"
End Sub
En revanche, si tu souhaites plutôt combler les trous et servir la première cellule vide c'est un autre algorithme.
Il faut se positionner sur la première cellule de la colonne et descendre en boucle (Structure Do...Until) jusqu'à atteindre une cellule vide (if isempty...).
J'espère avoir répondu à ton interrogation !