Code VBA capable de faire un trie de ligne suivant plusieurs critère

image

Bonjour

je recherche un code VBA capable de faire un trie de ligne suivant plusieurs contrôle:

'premièrement trier les lignes en fonction de la date dans la colonne "A" (1er tri en jaune)
'les ranger dans un ordre chronologique
'lorsque plusieurs date sont identiques, les ranger entre elle en fonction du resultat dans la colone "B" (texte vrais ou faux) (2em tri en orange)
'si celle_si se retrouve encore identique prendre une autre date dans la colenne "C" pour les trier entre elle(3em tri en vert)

'et ainsi de suite

les lignes ne doivent pas être mélanger entre elle

je débute en VBA je rechercher un code facile a lire et a modifier

merci a vous tous

Bonjour à tous !

riv, bienvenue sur le forum

si vous voulez obtenir de l'aide joindre un fichier sans données confidentielles (lire la charte)

ici c'est pour excel je ne sais pas s'il existe un forum PhotoShop

Bonne journée !

Bonjour,

Un exemple, si la ligne d'entête de votre tableau est la ligne 1, à adapter si s'en est une autre:

Sub Tri()
    DerLig = Range("A" & Rows.Count).End(xlUp).Row
    Worksheets("Feuil1").Range("A2:C" & DerLig).Sort Key1:=Range("A1"), Key2:=Range("B1"), Key3:=Range("C1"), Header:=xlYes, Order1:=xlAscending
End Sub

Cdlt

bonjour Arturo83

merci pour ton code

peut tu me le détailler un peut stp

car a l'avenir je voudrais lancer le tri via un userforme et rajouter des ligne a ne pas trier

Il n'y a pas grand chose à dire ,

1ère ligne, on cherche à déterminer quelle est la dernière ligne du tableau de données.

2 ème ligne, le tri en fonction des 3 critères demandés dans l'ordre ascendant. Si vous utilisez l'enregistreur de macros pour faire votre tri, vous obtiendrez à peu près la même chose, dans le cas présent, c'est un peu retouché pour ne faire apparaître qu'une seule ligne. mais le résultat est le même, rien d'extraordinaire.

Cdlt

bonjour

encore merci, oui le début est simple j'avais déjà eu des piste de code, cela vas ce compliquer gentiment pour moi.

image

j'ai quelque question:

Range("A2: C" & Derlig).sort : que signifie ce code

Header:= xlYes : que signifie ce code

order:= xlAscending : est ce bien le rangement du tri

Key4:=Range("D1") : si je rajoute cela est ce que j'aurais un 4eme tri ?

comment je pourrais écrire dans mon code pour figer certaine ligne du tableau (ne pas les trier)

Bonjour,

Range("A2: C" & Derlig).sort : que signifie ce code. Cela représente la plage de cellules à trier (ici, de de la colonne A à la colonne C et de la ligne2 jusqu'à la dernière.

Header:= xlYes : que signifie ce code, on tient compte de la présence de la ligne d'entête, elle ne fera pas partie du tri.

order:= xlAscending : est ce bien le rangement du tri, OUI

Key4:=Range("D1") : si je rajoute cela est ce que j'aurais un 4eme tri ?, le mieux c'est de la tester, mais au-delà de 3 critères je pense qu'il faudra s'y prendre autrement.

comment je pourrais écrire dans mon code pour figer certaine ligne du tableau (ne pas les trier), le plus simple est de déposer un fichier bidon(sans données confidentielles) mais conçu de la même façon que le fichier réel et de demander ce qu'il y a à faire et si besoin, montrer le résultat attendu.

Généralement , (ce que je fais) , quand il faut un tri spécifique, il est parfois préférable d'utiliser une colonne supplémentaire pour y loger une formule qui retournera une valeur en fonction des critères choisis, et le tri se fera uniquement sur cette colonne.

Cdlt

image

voici ce que je souhaiterais faire

je souhaiterais créer des champs variables

Pour faire ce que vous souhaitez, il faut que votre tableau de données soit un tableau structuré, ainsi plus de problème pour chercher la ligne de début ou de fin, idem pour les colonnes, je vous ai demandé de nous fournir un fichier bidon (sans les données confidentielles) similaire à l'original afin qu'on puisse travailler sur du concret et vous fournir des réponses tout aussi concrètes.

7classeur1.xlsm (20.92 Ko)
capture

est ce que comme cela ca pourrais fonctionner ?

Bonsoir,

Je n'ai pas eu le temps de regarder aujourd'hui, je verrai ça demain, par contre pour le code que vous venez d'ajouter, si vous mettez le contenu des textboxes en variables, il ne faut pas les encadrer de guillemets dans la ligne de code de tri, mais comme ceci: Key1:=Range(Varkey1)

Cdlt

Bonjour,

Voici un premier jet.

Il y a la feuille "Liste des titres", cette dernière doit contenir, comme son nom l'indique, tous les titres ou entêtes de la "feuil1", ceci, afin de constituer les listes des Listes déroulantes du formulaire.

Cdlt

bonjour

j'ai tester c'est le top merci a toi

bonjour Arturo83

dsl de te déranger j'ai voulu ajouter ton tri a un autre tableau excel mais j'ai une erreur peut tu y regarder quand tu aura 2 min stp

1prod.xlsm (48.81 Ko)

dernière mise a jour

j'arrive a lancer par le play du visual basic mais pas en appel de macro

4prod.xlsm (61.23 Ko)

Bonjour,

il manquait de préciser sur quelle feuille (liste_des_titres) fallait chercher la dernière ligne de la liste lors de l'initialisation de l'userform.

La macro modifiée:

Private Sub UserForm_Initialize()
    Set f3 = Sheets("Liste_des_titres")
    Set d = CreateObject("Scripting.Dictionary")
    For Each c In f3.Range("A2:A" & f3.Range("A" & Rows.Count).End(xlUp).Row)
        If Not d.exists(c.Text) And c.Text <> "" Then d(c.Text) = ""
    Next c
    Me.ComboBox1.List = d.keys
    Me.ComboBox2.List = d.keys
    Me.ComboBox3.List = d.keys

    Me.ComboBox4.List = Array("Croissant", "Decroissant")
    Me.ComboBox5.List = Array("Croissant", "Decroissant")
    Me.ComboBox6.List = Array("Croissant", "Decroissant")
    Set f3 = Nothing
End Sub

Cdlt

bonjour Arturo83, Riv,

triage avec 5 keys et orders

7prod-3.xlsm (52.10 Ko)

bonjour arturo83

j'ai un problème sur le croissant décroissant maintenant

image

merci d'avant pour ton aide

bonjour Bsalv j'ai regarder ton code de tri c'est top ce que tu as fait aussi merci

Rechercher des sujets similaires à "code vba capable trie ligne suivant critere"