Problème de Tri

Bonjour,

J'ai un petit problème de tri dans mes tableaux.

J'aimerai en fonction d'un tableau trier d'abord un index du plus grand au plus petit, puis trier un prix du plus petit au plus grand pour chaque index.

Dans la pièce jointe, le tableau 1 est le tableau de données, maximum 18 N°; le tableau 2 est un tri par index , le tableau 3 est le résultat final que j'aimerai obtenir tri par prix par index.

Serait-il possible de faire un macro pour ces tris ? Comment faire ?

Merci pour votre aide.

12essaitri.xlsx (11.38 Ko)

Patron

Bonjour,
Une proposition avec les données sous forme de tableau structuré.
Cdlt.

7essaitri.xlsx (31.59 Ko)

Bonjour Patron28

Pour obtenir le tableau 2

ActiveSheet.Range("A2:C19").Sort Key1:=Range("B2"), Order1:=xlDescending

Le problème c'est que le tri n'est pas copié dans un autre emplacement

Pour obtenir le tableau 3

ActiveSheet.Range("A2:C19").Sort Key1:=Range("B2"), Order1:=xlDescending, Key2:=Range("C2"), Order2:=xlAscending

Bonjour à tous ?

En passer par VBA est une nécessité absolue ?

Pourquoi ne pas utiliser la fonctionnalité d'Excel ?

image

Vous sélectionnez la plage et ensuite vos critères de tri.

EDIT : Oups.... en retard et pas de rafraichissement....

Re,
Une version VBA et tableau structuré.
Cdlt.

7essaitri.xlsm (41.18 Ko)
Sub Button1_Click()
Dim TD As Range
    Set TD = Range("t_data")
    If TD.ListObject.DataBodyRange Is Nothing = False Then
        With TD.ListObject.Sort
            .SortFields.Clear
            .SortFields.Add Key:=TD(0, 2), Order:=xlDescending
            .SortFields.Add Key:=TD(0, 3), Order:=xlAscending
            .Header = xlYes
            .Apply
        End With
    End If
End Sub

Re bonjour,

Merci pour vos différentes solutions et réponses.

Super réactif, merci encore.

A moi de choisir dans vos solutions.

Patron

Bonjour à tous de nouveau !

Bien...

Je vous remercie de ce retour.

bonjour le fil,

je préfère encore la methode courte "old school"

Sub OldSchool()
     With Range("t_data").ListObject.Range
          .Sort key1:=.Range("B1"), order1:=xlDescending, key2:=.Range("C1"), order2:=xlAscending, Header:=xlYes
     End With
End Sub

Merci pour les réponses.

j'ai fait un test avec la solution de Jean-Eric Button1 macro, mais avec cette fois si 14 lignes au lieu de 18 ligne comme le premier tableau.

Quand je clic sur le bouton, cela tri mais me met les lignes vide au-dessus du tableau comme dans le pièce joint.

J'aimerai l'inverse. a savoir que le nombre de ligne peut varier mais jamais plus de 18 lignes de données.

Merci pour la solution.

essaitri

Patron

Re,
Je ne comprends pas ton résultat avec ma procédure.
Joins un fichier et reformules ta demande initiale.
Cdlt.

re,

un tableau structuré n'aime pas des lignes vides, elles sont inutiles.

C'est le problème, je peux avoir des lignes vide, je peux avoir des données entre 7 à 18 lignes, donc forcément des lignes vide.

Voici l'exemple que j'ai avec le fichier macro en pièce jointe, quand cela tri j'ai les lignes vide en premier alors qu'elles devraient être en dernier.

Voir pièce jointe.

Comment faire pour avoir ce tableau trié avec les lignes vide en fond de tableau.Merci pour l'aide.

Patron

6essaitri.xlsm (41.87 Ko)

Re,
Une nouvelle tentative !?
Cdlt.

11essaitri.xlsm (18.47 Ko)

Sorry mais cela ne fonctionne pas chez moi.

Quand je regarde la macro, c'est la même que le fichier d'avant.

le tableau initial c'est quoi ?

Patron

re,

on dirait que les cellules sont vides mais ce n'est "vraiment" le cas que pour A20:C20 !!! Le reste est rempli avec "rien". Je ne sais pas l'origine de ces cellules vides ... .

donc un ajout à ma macro

Sub OldSchool()
     With Range("t_data").ListObject.Range
          .Value = .Value 'vider les cellules "vides"
          .Sort key1:=.Range("B1"), order1:=xlDescending, key2:=.Range("C1"), order2:=xlAscending, Header:=xlYes
     End With
End Sub

on peut faire quelque chose pareil pour @Jean-Eric avec

    Range("t_data").Value = Range("t_data").Value
 

Bonjour,

Merci pour les réponses.

Un petite demande, j'ai des données que varient en Colonne ABC c'est a dire que le nombre de ligne change (max 18 lignes)

J'aimerai trier ces données et le copier en colonne I J K, je dois ajouter quoi dans la macro ?

Merci pour vos réponse

Patron

re,

Sub OldSchool()
     Range("I1:K1").EntireColumn.Clear       'Contents
     With Range("t_data").ListObject
          .DataBodyRange.Value = .DataBodyRange.Value     'vider les cellules "vides"
          .Range.Sort key1:=.Range.Range("B1"), order1:=xlDescending, key2:=.Range.Range("C1"), order2:=xlAscending, Header:=xlYes
          .Range.Copy Range("I1")
     End With
End Sub

Bonjour,

Merci pour la réponse BsAlv, mais j'ai une erreur quand je lance la macro.

En pièce jointe.

macrotri

Je mets le fichier avec:

8tri.xlsm (18.89 Ko)

Merci pour l'aide.

Patron

re,

il n'y a pas un tableau structuré "t_data" !

3tri.xlsm (25.79 Ko)

Bonjour BSAlv,

Merci pour la réponse.

Juste une demande, j'aimerai que les colonnes A,B,C ne bouge pas et que le tri soit fait uniquement en colonne I,J,K.

Les colonnes A,B,C peuvent changer en terme de ligne et ces mes données a trier.

Comme sur le pièce jointe.

3tri.xlsm (22.21 Ko)
Rechercher des sujets similaires à "probleme tri"