Classemment par ordre sur 2 colonne

Bonjour,

Je ne trouve pas comment faire une macro qui:

quand j'ouvre ma feuille il me classe ma base de donner par:

J'ai une base de donnée de colonne A a J que je veux classer comme suit:

premièrement colonne J toute ceux qui son sélectionner d'un x en haut

deuxièmement colonne H classer ceux qui sont marquer d'un x par ordre d'arriver (du plus ancien au plus récent)

Je vous joint un petit exemple,

j’espère me faire comprendre

Merci

13exp.xlsx (10.67 Ko)

Bonjour Ambroise

Sur ton fichier et avec l'enregistreur de macro, voici ce que cela donne

Sub TriSpé()
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("J4:J6") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
        .SetRange Rows("3:6")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("4:5") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
        .SetRange Range("4:5")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

A adapter à ton vrai fichier

A+

merci Bruno,

j'ai essayer de l'adapter a mon fichier, mais il ne fonctionne pas,

Sur la ligne ou est mis Range( " 4 : J 6 " ) j'ai mit ( " J 2 : J 1048576 " ) car c'est indéfini le nb d’entrée que je peux faire:

et sur les ligne ou il y a ( " 3 : 6 " ) et ( " 4 : 5 " ) j'ai simplement mit ( " j " ) je ne sais pas trop quoi mettre car les quantité de ligne peuvent changer (bien sur sans les espace c'est juste pour être plus lisible

Re,

Utilises ce code, fait sur 2003 mais qui doit fonctionner sur 2007 et supérieur

Sub TriSpé()
  Dim DLig As Long
  ' Avec la feuille
  With Sheets("NomDeLaFeuille")
    ' Trouver al dernière ligne
    DLig = .Range("A" & Rows.Count).End(xlUp).Row
    ' Trier les lignes contenant les X en premier = décroissant
    .Rows("2:" & DLig).Sort Key1:=.Range("J2"), Order1:=xlDescending, Header:=xlNo _
        , OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    ' Trouver la dernière ligne contenant un X
    DLig = .Range("J" & Rows.Count).End(xlUp).Row
    ' Trier ensuite ces lignes par ordre Croissant
    .Rows("2:" & DLig).Sort Key1:=Range("H2"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
  End With
End Sub

A+

Super merci beaucoup mais il y a un petit problem, quand le X est supprimer avec le clavier ca marche mais quand c'est supprimer depuis mon formulaire via une macro qui donne l'instruction de mettre rien "" cela ne les classe pas au niveaux des x, j'ai essayer que a la place de "", il mette auttre chose mais pareille??

Sinon y a t'il une solution aussi pour que la macro s'execute automatiquement au moment ou on ouvre la feuille??

Salut Ambroise

1) Plutôt que d'inscrire rien, mieux vaut effacer la valeur ou ne pas en mettre

2) Pour lancer automatiquement à l'ouverture, mettre le code dans ThisWorkbook

dans l'évènement Open()

A+

OK bruno,

C'est ce que j'ai essayer de faire mais comment indiquer aucune valeur dans une celle

exp:

=si(A1="x";"x";"") que mettre a la place des "" j'ai essayer de les supprimer mais ça fait 0

ou sinon dans le code VBA

Sheets("info.").Range("BC" & ligneRes) = Sheets("formulaire").Range("G58") Comment mettre un Si par exemple G58="";mettre une autre cellule qui elle est vide?

Bonjour

Je te propose une macro

Ton tableau commence en A1

    Range("A2:J" & Range("A" & Rows.Count).End(xlUp).Row).Sort _
            Key1:=Range("J2"), Order1:=xlDescending, _
            Key2:=Range("H2"), Order2:=xlAscending, _
            Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal, DataOption2:=xlSortNormal

Pour le reste il faut que tu envoies ton fichier (anonymisé si besoin) mais surtout soit avec la formule en place ou la macro, afin de tester

C'est vrais c'est plus simple que je te passe mon fichier, je te donne les page ou j'ai les problème,

donc dans info. les x ne se classe pas comme il faut du a la case S80 dans le formulaire

Sinon je n'ai pas très bien compris (pas encore chercher) pour faire le tri automatiquement

en tous cas en grand merci pour ton aide precieuse

9planning-exp.xlsm (149.40 Ko)

Bonjour

Peut-être que je ne fais pas les choses comme il faut mais je n'ai aucun souci

Pour faire le tri automatiquement

Il se fera à chaque fois que tu reviendras dans cette page (Info.)

Code à placer dans le module de feuille (à la place de ta macro Sub TriSpé())

Important ne changes pas le nom de la macro

Private Sub Worksheet_Activate()
Range("A2:BD" & Range("A" & Rows.Count).End(xlUp).Row).Sort _
            Key1:=Range("BD2"), Order1:=xlDescending, _
            Key2:=Range("H2"), Order2:=xlAscending, _
            Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal, DataOption2:=xlSortNormal

End Sub

Merci c'est bon ça marche je suis vraiment long a la compréhension

merci beaucoup

Rechercher des sujets similaires à "classemment ordre colonne"