VBA AutoFill

Bonjour,

J'ai une erreur sur ma macro que je n'arrive pas à résoudre:

Sub DiapMacro()
'
Dim NbLigne As Integer
Dim DernLigne As Integer

'Selection de la feuille Sortie
With Worksheets("Sortie")
'Formule Date
    .Range("J2").FormulaR1C1 = "=TEXT(RC[-2],""mmm aaaa"")"
'Etendre la formule jusqu'à la dernière ligne
    DernLigne = .Range("H" & .Rows.Count).End(xlUp).Row
    If DernLigne = 1 Then
    .Range ("J2")
    Else
    .Range("J2").AutoFill.Range ("J2:J" & DernLigne)
    End If
    .Range("J1").FormulaR1C1 = "DateTCD"
End With

L'erreur se trouve au niveau de la ligne "AutoFill". J'ai modifié récemment cette macro car auparavant je n'avais pas pris en compte le faite que ma feuille "sortie" puisse comporter seulement 1 ligne (Ligne 2).

Je suis vraiment une débutante en vba...

Merci d'avance

Un fichier pour exemple en Pièce jointe

71test1.xlsm (12.06 Ko)

Bonjour marlene65,

Essaie en supprimant le point entre AutoFill et Range, en le remplaçant par un caractère d'espacement (et en supprimant l'espace entre le mot Range et la parenthèse qui suit).

... ou alors, tu peux écrire:

.Range("J2").AutoFill Destination:=Range("J2:J" & DernLigne)

Bonjour,

Merci votre correction marche parfaitement.

Par contre je pense que j'ai mal écrit ma condition. Car quand j'ai une seule ligne ma condition passe quand même dans le elle est bug

Re-bonjour,

Je n'ai pas regardé le reste: je pensais que tu avais déjà testé en long et en large!

Tu observeras que dans ton code, après la ligne If DernLigne = 1 Then il y a aussi un espacement entre Range et la parenthèse qui suit (c'est souvent mauvais signe ) Dans J2, tu as déjà inscris ta formule ... donc si DerLigne vaut 1, il ne faut rien faire (pas même inscrire la formule en J2, me semble-il!?)

À vérifier donc, mais je dirais que ton code peut devenir:

Sub DiapMacro()
'
Dim NbLigne As Integer
Dim DernLigne As Integer

'Selection de la feuille Sortie
With Worksheets("Sortie")
    DernLigne = .Range("H" & .Rows.Count).End(xlUp).Row
    If DernLigne > 1 Then
        'Formule Date
        .Range("J2").FormulaR1C1 = "=TEXT(RC[-2],""mmm aaaa"")"
        'Etendre la formule jusqu'à la dernière ligne
        .Range("J2").AutoFill Range("J2:J" & DernLigne)
        .Range("J1").FormulaR1C1 = "DateTCD"
    End If
End With

End Sub

Je pense que je me suis mal exprimé :/.

La condition que je souhaite :

SI DernLigne = 2 (dont 2 lignes car il y a la ligne de titre et ensuite la 1ère ligne de données) ALORS

Je veux que sur la cellule J2 la formule =TEXT s’inscrive

SINON (signifiant que si il y a plus de 2 lignes)

On a plus de 2 lignes alors la formule =TEXT doit être étendue jusqu'à la dernière H avec de la donnée.

Essayons, alors ce qui suit:

Sub DiapMacro()
'
Dim NbLigne As Integer
Dim DernLigne As Integer

'Selection de la feuille Sortie
With Worksheets("Sortie")
    DernLigne = .Range("H" & .Rows.Count).End(xlUp).Row
    If DernLigne < 2 Then Exit Sub
    'Formule Date
    If DernLigne = 2 Then .Range("J2").FormulaR1C1 = "=TEXT(RC[-2],""mmm aaaa"")"
    If DernLigne > 2 Then 'Etendre la formule jusqu'à la dernière ligne
        .Range("J2").FormulaR1C1 = "=TEXT(RC[-2],""mmm aaaa"")"
        .Range("J2").AutoFill Range("J2:J" & DernLigne)
        .Range("J1").FormulaR1C1 = "DateTCD"
    End If
End With

End Sub

En fait on peut se simplifier la vie, en n'utilisant pas AutoFill, mais en collant directement la formule dans la plage concernée:

Sub DiapMacro()
'
Dim NbLigne As Integer
Dim DernLigne As Integer

'Selection de la feuille Sortie
With Worksheets("Sortie")
    DernLigne = .Range("H" & .Rows.Count).End(xlUp).Row
    If DernLigne < 2 Then Exit Sub
    'Formule Date dans toute la plage
    .Range("J2:J" & DernLigne).FormulaR1C1 = "=TEXT(RC[-2],""mmm aaaa"")"
    .Range("J1") = "DateTCD"
End With

End Sub

Super c'est exactement ce que je souhaitais faire!

Merci beaucoup.

J'avais mal ordonné ma condition et mal exprimé...

Rechercher des sujets similaires à "vba autofill"