Trier avec l'enregistreur de Macros

recoverybis

XLDnaute Nouveau
Bonjour,

Je reviens vers vous car certaines incertitudes dues à mes modestes connaissances en VBA me chagrinent. Explication, ma base de données contient 25 colonnes du reste toutes ne sont pas forcément remplies et d’autres contiennent des formules après chaque insertion via un bouton sur l’Userform les données sont triées en ordre croissant pour ce faire j’ai utilisé l’enregistreur de Macro j’ai donc sélectionné la colonne des noms en l’occurrence la C et j’ai nommé le code qui en résulte Trier.

Ma réflexion est la suivante, compte tenu du nombre de colonnes avec en moyenne 400 abonnées.

Le code issu de l’enregistreur de macro ci dessous est – il suffisamment performant ?

En effet, existe – il un risque de sorte que les renseignements relatifs aux intéressés se concatènent sans cohérence après le tri ? Exemple :

Avant le tri

Nom Z Prénom Z Adresse Z Etc ……

Nom A Prénom A Adresse A Etc…..

Après le tri

Nom A Prénom Z Adresse A

Nom Z Prénom A Adresse Z

Merci à tous ceux qui m’accorderont quelques instants pour me répondre

Voici le code

Sub Trier()

' Trier Macro

Columns("C:C").Select

ActiveWorkbook.Worksheets("BD").Sort.SortFields.Clear

ActiveWorkbook.Worksheets("BD").Sort.SortFields.Add Key:=Range("C1"), SortOn _

:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

With ActiveWorkbook.Worksheets("BD").Sort

.SetRange Range("A2:V500")

.Header = xlNo

.MatchCase = False

.Orientation = xlTopToBottom

.SortMethod = xlPinYin

.Apply

End With

End Sub
 

recoverybis

XLDnaute Nouveau
Merci infiniment Lone Wolf d'avoir encore une fois consacré quelques instants afin d'améliorer le code pour trier mes données.
je me permets de te poser une question supplémentaire qui me vient à l'esprit si j'attribue une zone de nom à mon tableau que je nommerai "Usagers" par exemple via la formule suivante DECALER + NBVAL histoire de le rendre dynamique en effet pour le moment le trie s'effectue uniquement dans la zone "a2:v500"
alors est ce que le code ci dessous fonctionneraient aussi ?

Sub Trier()
With Sheets("BD")
.Range("Usagers").Sort .Range("c2"), xlAscending
End With
End Sub

Bien cordialement
 

Lone-wolf

XLDnaute Barbatruc
Re

Vu que la plage s'arrête à 500, pas besoin de mettre un nom; mais le code va fonctionner la même chose. Tu peux aussi créer une variable, exemple:

VB:
Option Explicit

Sub Trier()
Dim Usagers As Range

With Sheets("BD")
Set Usagers = .Range("a2:v500")

Usagers.Sort .Range("c2"), xlAscending
End With
End Sub
 

recoverybis

XLDnaute Nouveau
Re

Vu que la plage s'arrête à 500, pas besoin de mettre un nom; mais le code va fonctionner la même chose. Tu peux aussi créer une variable, exemple:

VB:
Option Explicit

Sub Trier()
Dim Usagers As Range

With Sheets("BD")
Set Usagers = .Range("a2:v500")

Usagers.Sort .Range("c2"), xlAscending
End With
End Sub
D'accord donc si la plage ne dépasse pas 500 je reste avec le code que tu m'as conseillé avec variable ou pas en revanche dans le cas contraire je peux attribué un nom ma plage ou modifier le code comme ceci
.Range("a2:v1000").Sort .Range("c2"), xlAscending
Encore merci pour ta disponibilité et surtout tes conseilles avisés
 

Lone-wolf

XLDnaute Barbatruc
Re

Si la plage est dynamique(de 2 à 65536 lignes), tu écrit le code comme ceci.

VB:
Option Explicit

Sub Trier()
Dim Usagers As Range, derlig As Long

    With Sheets("BD")
        derlig = .Range("a" & Rows.Count).End(xlUp).Row
        Set Usagers = .Range("a2:v" & derlig)

        Usagers.Sort .Range("c2"), xlAscending
    End With
End Sub

Oubien: Range("a2:v" & derlig).Sort .Range("c2"), xlAscending
 

Discussions similaires

Statistiques des forums

Discussions
312 086
Messages
2 085 197
Membres
102 814
dernier inscrit
JLGalley