Bonsoir Langlais,
Ci-joint ton fichier avec la macro modifiée comme suit :
Sub CopieFormule()
Dim L As Long
'Combien de valeurs dans la colonne A ?
L = Range("A65536").End(xlUp).Row
'B1 = A1 + 1
Range("B1").Formula = "=A1 + 1"
'Copier la cellule B1
Range("B1").Copy
'Collage spécial formule dans la colonne B
Range(Range("B2"), Range("B" & L)).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End Sub
Dans ton code, si tu sélectionnes B2 puis tu fais
xlDown, tu te retrouves, au mieux, sur la dernière valeur existante dans cette même
colonne B et c'est pour ça que ta macro ne fonctionne pas au delà s'il y a des valeurs plus nombreuses en colonne A...
De plus, sache qu'en VBA il n'est point besoin de sélectionner une cellule avant de faire un traitement dessus (c'est même à éviter) :
Tu peux remplacer par exemple :
Range("B1").Select
Selection.Copy
par
Range("B1").Copy
Par ailleurs, pour être sûr de se placer sur la dernière valeur d'une colonne, il vaut mieux utiliser
Range("A65536").End(xlUp) que
Range("A1").End(xlDown). Pourquoi ? Tout simplement parce que si ta colonne de données contient une cellule vide,
Range("A1").End(xlDown) s'arrêtera à la hauteur de cette cellule vide et ne t'amènera pas jusqu'à la dernière valeur réelle de la colonne...
Pour info,
Range("A65536").End(xlUp), c'est comme si tu te plaçais sur la dernière cellule de la colonne A (tout en bas de la feuille) et que faisais CTRL + Flèche Haut.
Cordialement,
Didier_mDF