1 votes

VBA - Copier une ligne et l'insérer dans la ligne inférieure

En préambule, je précise que je n'ai aucune expérience de VBA, mais j'ai besoin de trier ces données assez rapidement. J'ai une importation de factures Sage 300 à faire. Je peux trier ces données par le biais de formules après qu'elles aient été faites une deuxième fois. Le fond du problème est que ces données doivent en fait être mises dans deux lignes pour une ligne, mais Excel saute des lignes.

J'ai un extrait de code partiel qui devrait fonctionner pour moi, mais j'obtiens une erreur de référence externe lorsque je l'exécute.

ActiveCell.EntireRow.Select
Selection.Copy
Selection.Insert Shift:=xlDown

Des conseils ou des astuces ? J'aimerais bien qu'il copie exactement cette ligne sur celle d'en dessous, jusqu'à ce qu'il trouve une ligne vide.

J'ai lu le commentaire sur le tri et il m'est apparu que je pouvais recopier les données et les trier par une valeur unique de façon à ce que tout arrive comme prévu - mais j'aimerais quand même connaître le code VBA.

2voto

Jesse Bunch Points 4251
Sub copyRowToBelow()
    Dim rng As Range
    Set rng = Range("A1") ' <~~  Change this

    Do While (rng.Value <> "")
        ' Insert a row below the current one
        rng.Offset(1).Insert

        ' Copy the current row and paste it into the row we just inserted
        rng.EntireRow.Copy rng.Offset(1)

        ' Set the range declaration for 2 rows below the current one
        Set rng = rng.Offset(2)
    Loop
End Sub

La ligne marquée ("Change this") peut être déclarée dans le code, ou vous pouvez la remplacer par Set rng = ActiveCell si vous voulez qu'elle s'exécute à partir de la cellule sur laquelle l'utilisateur travaille au moment de l'exécution de la macro.

Les commentaires ne sont pas nécessaires pour le code, ils sont là uniquement pour vous aider à mieux connaître VBA.

1voto

kurin123 Points 141

Sélectionnez la cellule à partir de laquelle vous voulez commencer à copier et exécutez cette macro.

Dim myCell
Set myCell = ActiveCell

While ActiveCell.Value <> ""
    Rows(ActiveCell.Row).Select
    Selection.Copy
    Selection.Insert Shift:=xlDown
    myCell.Offset(1, 0).Select
    Set myCell = ActiveCell
Wend

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X