Il y a bien une boucle :
For i = 0 To .ListCount - 1
Mais vos instructions utilisent une variable, ligne, qui est indépendante de cette boucle, cela répète donc la même opération d'où le problème.
Ici, il suffit de remplacer ligne par l'itérateur de la boucle, à savoir i.
With Sheets(mois)
Set cel = .Range("a3")
cel.Offset(i, 6) = "CB"
End With
Merci de me confirmer que cela fonctionne.