Tri données Excel avec VBA

Bonjour à tous les membres,

J'ai un code VBA qui me permet de générer des feuilles avec des équipements stockés dans des entrepôts.

J'aimerais pouvoir compléter mon code VBA et trier les cellules selon un ordre qui se trouve en feuille "Donnees". J'aimerais aussi les trier par lieu de stockage, soit dépôt A ou dépôt B.

PS: Il arrive qu'il y ait des éléments présents dans la feuille "Donnees" qui ne sont pas présents dans la feuille "Après TRI". Cela ne doit pas poser de problème lors du traitement VBA svp.

Pour expliquer au mieux ma demande, j'ai créé un onglet "Avant TRI" et "Après TRI" pour vous présenter ce que je souhaiterais obtenir.

Est-ce que quelqu'un aurait la possibilité de m'aider dans la création du code svp ?

Merci beaucoup

JB

9tri-jb.xlsm (12.43 Ko)

Bonsoir,

Une proposition avec power Query.

Cordialement.

6tri-jb.xlsm (23.60 Ko)

BonsoirZebulon2,

Merci pour votre retour. Il n'est pas possible de réaliser ce tri en utilisant VBA ?

Bonne soirée

JB

Bonsoir,

Je pense que oui, mais PQ le fait très bien.

Cordialement.

Bonjour,
Pour le principe avec VBA.
On crée une liste personnalisée !...
Cdlt.

15tri-jb-1.xlsm (21.36 Ko)
Public Sub SortData()
Dim wsData As Worksheet, wsList As Worksheet
Dim rngData As Range, rngList
Dim n As Long

    On Error GoTo errHandler

    Set wsData = ActiveWorkbook.Worksheets("Données")
    Set rngData = wsData.Range("A1:D17")

    Set wsList = ActiveWorkbook.Worksheets("Liste")
    Set rngList = wsList.Cells(1).CurrentRegion

    Application.AddCustomList ListArray:=rngList
    n = Application.CustomListCount

    With wsData.Sort
        .SortFields.Add _
                Key:=rngData(1), _
                SortOn:=xlSortOnValues, _
                Order:=xlAscending, _
                CustomOrder:=Application.CustomListCount
        .SortFields.Add _
                Key:=rngData(4), _
                SortOn:=xlSortOnValues, _
                Order:=xlAscending
        .SetRange rngData
        .Header = xlNo
        .Apply
        .SortFields.Clear
    End With

exitHandler:
    Application.DeleteCustomList n
    Exit Sub
errHandler:
    MsgBox "Erreur : " & Err.Number & Chr(10) & Err.Description
    Resume exitHandler

End Sub

Bonjour,
Un petit retour du dénommé JeanBaptisteP ?
Cdlt.

Bonsoir Jean-Eric,

Désolé de n'avoir pu répondre plus tôt j'ai été pris par mon travail. Votre code répond bien à ma demande, c'est parfait !

J'aurais juste voulu savoir s'il était possible de l'adapter car la plage de données peut être variable et non définie sur la plage "A1:D17"

Je pensais donc remplacer:

Set rngData = wsData.Range("A1:D17")

par

Set rngData = wsData.Cells(1).CurrentRegion

mais les infos en colonne D se retrouvent décalées :/

Comment dois-je procéder ?

@Zebulon2: Merci pour votre proposition avec Power Query mais je souhaite réaliser ce tri avec VBA car je dois pouvoir l'intégrer à la suite de mon code.

Bonne soirée

JB

re,

Décalée ? Cela veut dire que C est vide ?

Set rngData = wsData.Cells(1).CurrentRegion.resize(,4)

Bonjour à tous,
Bart a répondu à ta question.
Maintenant, côté plage variable, c'est en lignes simplement, ou le nombre de colonnes peut lui aussi varié ?
Bonne journée.

Bonjour Jean-Eric, BsAlv,

Merci pour vos retours.

@BsAlv: Dans mon exemple je n'avais rien mis en colonne C mais en réalité elle ne sera pas vide.

@BsAlv @Jean-Eric: Effectivement, le fait de mettre le code ci-dessous avec une colonne C vide pose problème, ce qui n'est pas le cas si elle est remplie. Dans mon cas ça fonctionne. Il y a uniquement le nombre de lignes qui varient. Tout est rentré dans l'ordre

Set rngData = wsData.Cells(1).CurrentRegion

J'en profite pour vous solliciter sur un autre besoin de tri.

J'aimerais pourvoir modifier le classement de données dans une plage EXCEL en utilisant une USF avec une listbox un peu comme un ordre de tabulation.

1) Quand je clique sur "TRI" je voudrais afficher ma plage de donnée dans une listbox => ça c'est ok

2) Ensuite je voudrais pouvoir faire monter ou descendre dans la listbox l'item sélectionné.

3) Une fois que je clique sur "OK" sur la USF, la plage EXCEL est classée comme celle de la listbox1.

Je joins le début de mon projet.

17tri2-jb.xlsm (17.14 Ko)

Bonne journée

JB

Bonjour,
Tu devrai clore le sujet lié au tri et ouvrir un nouveau sujet.
On ne parle pas de la même chose.
Cdlt.

D'accord Jean-Eric, je vais suivre votre conseil, je clos ce sujet.

Merci encore

JB

Rechercher des sujets similaires à "tri donnees vba"