2012-08-06 4 views
0

J'ai une feuille de calcul avec un tas de rangées sans ordre particulier. Pour accélérer ma macro je veux trier les entrées par ordre alphabétique par "Nom" (colonne B). Cependant, mon patron ne veut pas que la feuille soit triée - Dieu sait pourquoi, mais c'est le patron.Excel VBA: Trier une feuille de calcul virtuellement?

Fondamentalement, ce que je voudrais faire est de trier la gamme, exécuter ma macro et puis le retourner à l'ordre d'origine. Mais comme il n'y a pas de «commande» à l'ordre d'origine, je ne peux pas simplement utiliser une méthode de tri différente.

Je connais l'algorithme de tri rapide et je pourrais toujours diviser la plage en un tableau de plages, une entrée pour chaque ligne, puis trier ce tableau. Mais je me demandais s'il y avait une méthode plus efficace?

+1

Le plus simple serait de créer une copie de la feuille. Faites le tri et d'autres choses nécessaires et supprimez la feuille une fois terminé. De cette façon, votre feuille d'origine reste intacte. –

Répondre

1

Suite à mon commentaire, voici un exemple qui conserve votre feuille d'origine intacte.

Sub Sample() 
    Dim ws As Worksheet 

    Set ws = Sheets("Sheet1").Copy(Before:=Sheets(1)) 

    With ws 
     .Columns("B:B").Sort key1:=.Range("B1"), order1:=xlAscending 

     ' 
     '~~> Do your stuff 
     ' 
    End With 

    '~~> Delete sheet once you are done.  
    Application.DisplayAlerts = False 
    ws.Delete 
    Application.DisplayAlerts = True 

    Set ws = Nothing 
End Sub 
1

Vous pouvez ajouter une autre colonne à votre feuille (de manière permanente ou temporaire), qui contient un numéro d'index de tri (numéros séquentiels sur la feuille). Une fois que vous avez fait ce que vous avez à faire, le tri sur cette colonne supplémentaire remettra les données telles qu'elles étaient.

Questions connexes