Copier dans la ligne vide suivante - Conseils Excel

Table des matières

NYARCH écrit

Je souhaite qu'Excel copie une ligne entière dans une nouvelle feuille de calcul Excel basée sur une entrée de cellule. Par exemple, j'ai des données dans les cellules A8: AG8, je veux qu'Excel copie la ligne entière dans la feuille "a" si la valeur dans H8 est "ir" et dans la feuille "b" si la valeur dans H8 est "RR". La partie la plus compliquée et pas seulement copiée, j'ai besoin qu'elle soit copiée dans la ligne vide suivante de la feuille de calcul. Sur les 150 lignes environ, seulement 15 de chaque type seront effectivement copiées sur une nouvelle feuille.

MrExcel attribuera 50 points bonus à tout lecteur qui se souvient de l'article de Lotus Magazine offrant 10 bons conseils, où le conseil n ° 4 était "Utilisez la touche Fin pour passer à la fin d'une plage". Pour en revenir à l'époque de Lotus, vous pouviez placer le pointeur de cellule n'importe où dans un bloc de données, appuyer sur FIN puis vers le bas, et le pointeur de cellule irait à la fin de la plage. Excel a des fonctionnalités similaires, VBA a des fonctionnalités similaires, et c'est la clé pour trouver la dernière ligne de données sur une feuille.

La technique VBA consiste à utiliser End (xlDown) pour simuler la touche End + Down ou End (xlUp) pour simuler la touche End + Up. Appuyez sur cette séquence de touches pour déplacer le pointeur de cellule vers le bord suivant d'une plage contiguë de données. Imaginez qu'il y ait des valeurs dans A1: A10 et A20: A30. Commencez en A1. Appuyez sur Fin + Bas et le pointeur de cellule se déplace vers A10. Appuyez sur Fin + Bas et vous passez à A20, qui est le bord supérieur de la plage de données contiguë suivante. Appuyez sur Fin + Bas et vous irez à A30. Je ne sais pas comment expliquer ce comportement en anglais simple. Essayez-le et vous verrez comment cela fonctionne.

L'astuce que j'utilise est de commencer à la colonne A dans la dernière ligne de la feuille de calcul, puis d'appuyer sur Fin + Haut. Cela m'amènera à la dernière ligne avec des données. Je sais alors utiliser la ligne suivante comme ligne vide.

Voici une macro de force brute pour résoudre le problème de cette semaine. Oui, vous pouvez certainement le faire plus élégamment avec un filtre automatique. Les données se trouvent actuellement sur la feuille Sheet1, avec des en-têtes dans la ligne 2.

Public Sub CopyRows() Sheets("Sheet1").Select ' Find the last row of data FinalRow = Range("A65536").End(xlUp).Row ' Loop through each row For x = 2 To FinalRow ' Decide if to copy based on column H ThisValue = Range("H" & x).Value If ThisValue = "ir" Then Range("A" & x & ":AG" & x).Copy Sheets("a").Select NextRow = Range("A65536").End(xlUp).Row + 1 Range("A" & NextRow).Select ActiveSheet.Paste Sheets("Sheet1").Select ElseIf ThisValue = "RR" Then Range("A" & x & ":AG" & x).Copy Sheets("b").Select NextRow = Range("A65536").End(xlUp).Row + 1 Range("A" & NextRow).Select ActiveSheet.Paste Sheets("Sheet1").Select End If Next x End Sub

Étant donné qu'Excel 2007 a plus de 65 536 lignes, vous pouvez utiliser cette macro pour qu'elle soit compatible avec la transmission. Notez que j'utilise CELLS (Row, Column) au lieu de RANGE ici:

Public Sub CopyRows() Sheets("Sheet1").Select ' Find the last row of data FinalRow = Cells(Rows.Count, 1).End(xlUp).Row ' Loop through each row For x = 2 To FinalRow ' Decide if to copy based on column H ThisValue = Cells(x, 8).Value If ThisValue = "ir" Then Cells(x, 1).Resize(1, 33).Copy Sheets("a").Select NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(NextRow, 1).Select ActiveSheet.Paste Sheets("Sheet1").Select ElseIf ThisValue = "RR" Then Cells(x, 1).Resize(1, 33).Copy Sheets("b").Select NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(NextRow, 1).Select ActiveSheet.Paste Sheets("Sheet1").Select End If Next x End Sub

Pour obtenir des conseils sur l'utilisation d'une macro, consultez Présentation de l'éditeur Excel VBA.

Articles intéressants...