3
votes

De la dernière ligne au décalage de la dernière ligne VBA

J'essaye de faire un AutoFill de la dernière ligne à une ligne ci-dessous. Donc LastRow à LastRow Offset (1) .

Je sais comment trouver la dernière ligne dans VBA, mais je ne trouve pas comment résoudre ce problème puzzle.

Je pense que cela ressemblera à quelque chose comme ceci:

LastRow = Cells(Rows.Count, 2).End(xlUp).Row
LastRow2 = Cells(Rows.Count, 2).End(xlUp).Offset(1)


Range("B" & LastRow : "AA" & LastRow).Select
Range("B" & LastRow2 : "AA" & LastRow2).Autofill

Si quelque chose n'est pas clair, veuillez demander, j'apprécierais toute aide p >


1 commentaires

LastRow2 n'est-il pas seulement LastRow + 1 ?


3 Réponses :


1
votes

Ajoutez .Row à la fin de votre variable LastRow2 :

LastRow2 = Cells(Rows.Count, 2).End(xlUp).Offset(1).Row


3 commentaires

Salut Mehmet, merci pour la réponse. Et vous avez probablement raison. Mon problème réside cependant avec - Range ("B" & LastRow: "AA" & LastRow) .Select - VBA ne reconnaît pas cette commande.


Vous pouvez vous référer à la réponse ci-dessous pour cela et essayer d'éviter de sélectionner autant que vous le pouvez chez vba.


@Peter vous avez corrigé votre code comme ceci - >> Range ("B" & LastRow & ": AA" & LastRow) .Sélectionnez



1
votes

Ajoutez .Row à la fin de votre variable LastRow2 et utilisez la Méthode Range.AutoFill correctement:

Dim SourceRange As Range
Set SourceRange = Cells(Rows.Count, 2).End(xlUp).Resize(1, 26) 'results in column B to AA

SourceRange.AutoFill Destination:=SourceRange.Resize(RowSize:=2) '1 down

où le DestinationRange doit inclure le SourceRange.

Je recommande vivement de éviter d'utiliser Select .

Dim LastCell As Range
Set LastCell = Cells(Rows.Count, 2).End(xlUp) 'without .Row

LastCell.Resize(1, 26).AutoFill Destination:=LastCell.Resize(2, 26) '1 down

Alternative:

LastRow = Cells(Rows.Count, 2).End(xlUp).Row

Range("B" & LastRow : "AA" & LastRow).Autofill Destination:=Range("B" & LastRow : "AA" & LastRow + 1)
                                                                        '^ Note this must be LastRow not LastRow + 1!

Alternative:

SourceRange.Autofill Destination:=DestinationRange


4 commentaires

Salut Peh, j'obtiens une erreur d'exécution (424) indiquant "Objet requis"


@Peter corrigé en LastCell.Resize (1, 26) .AutoFill Destination: = LastCell.Resize (1, 26) .Offset (1) voir ma réponse modifiée


Il est maintenant dit "La méthode AutoFill de la classe Range a échoué". Cette erreur se produit sur la dernière ligne de code.


@Peter Désolé mon mauvais, évidemment la plage de destination doit inclure la plage source. Voir ma réponse modifiée. Devrait fonctionner maintenant, testé.



1
votes

La plage de destination de la saisie automatique peut être déclarée comme ceci.

With ActiveSheet
    Set Rng = .Cells(.Rows.Count, "B").End(xlUp).Resize(2, 26)
End With


3 commentaires

êtes-vous sûr? La documentation indique le paramètre de destination dans La saisie automatique est obligatoire et non facultative.


Cela ne semble pas fonctionner, j'obtiens une erreur d'exécution disant - "Argument non facultatif"


@PEH Non, je ne suis pas sûr. C'est pourquoi j'ai dit "devrait fonctionner". Peter, désolé pour ça. Je pensais que vous saviez comment faire la partie AutoFill. J'essayais juste de montrer comment définir la plage. Je m'attendrais à devoir spécifier ce qu'il faut remplir automatiquement. Êtes-vous sûr que votre intention est de remplir automatiquement? Il semble que vous souhaitiez peut-être ajouter une ligne à la fin de votre tableau qui hérite du format de la dernière ligne utilisée. Cela ne serait pas fait en utilisant la saisie automatique. Utilisez l'enregistreur de macros pour savoir comment coder cela.