XL 2013 RESOLU - Tri personnalisé VBA

niniylle

XLDnaute Nouveau
Bonjour à tous,

Je vous solicite à nouveau pour un petit problème que je ne parviens pas à régler.
Dans une feuille excel "Project", j'ai une plage de données de la colonne C à la colonne R.

C10:R11 = En tête de colonnes (il y a des cellules fusionnées)
A partir de C12 = Données à trier.

A partir de la ligne 12, je souhaite trier mes données de la manière suivante :

Colonne R : Tri de Z à A
Colonne C : Tri personnalisé, avec une liste déjà créée (General, ProgM,BP, Other)

J'ai créé la macro ci-dessous
Elle fonctionne sur toutes mes données, sauf pour la 1ère ligne de ma plage : la ligne 12.

Pourriez-vous m'éclairer sur ce qui cloche svp ?

VB:
Sub Tri()
'Tri personnalisé
    Range("C10:C11").Select
    ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Add Key:= _
        Range("R11:R163"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption _
        :=xlSortNormal
    With ActiveWorkbook.Worksheets("Project").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Add Key:= _
        Range("C12:C163"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder _
        :="General,ProgM,BP,Other", DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Project").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Mille merci par avance,
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re

Un essai comme ceci

VB:
Sub Tri()
dim fin&
'Tri personnalisé

    With Sheets("Project")
         fin = .Range("L" & Rows.Count).End(xlUp).Row
        .AutoFilter.Sort.SortFields.Clear
        .AutoFilter.Sort.SortFields.Add Key:= _
        .Range("r12:r" & fin), SortOn:=xlSortOnValues, Order:=xlDescending, _
        DataOption:=xlSortNormal

        .AutoFilter.Sort.SortFields.Add Key:= _
        .Range("c12:c" & fin), SortOn:=xlSortOnValues, Order:=xlAscending, _
        CustomOrder:="General,ProgM,BP,Other", DataOption:=xlSortNormal
        With .AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello
essaie avec ce code (que j'ai obtenu avec l'enregistreur de macro) puis quelques modifs
VB:
Sub Macro1()
'
' Macro1 Macro

    LastLine = ActiveSheet.Range("R" & Rows.Count).End(xlUp).Row
    Range("C12:R" & LastLine).Select
    ActiveWorkbook.Worksheets("Project").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Project").Sort.SortFields.Add Key:=Range("R12:R" & LastLine), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Project").Sort.SortFields.Add Key:=Range("C12:C" & LastLine), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Project").Sort
        .SetRange Range("C12:R" & LastLine)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
 

niniylle

XLDnaute Nouveau
Re

Un essai comme ceci

VB:
Sub Tri()
'Tri personnalisé

    With Sheets("Project")
        .AutoFilter.Sort.SortFields.Clear
        .AutoFilter.Sort.SortFields.Add Key:= _
        .Range("R12:R163"), SortOn:=xlSortOnValues, Order:=xlDescending, _
        DataOption:=xlSortNormal

        .AutoFilter.Sort.SortFields.Add Key:= _
        .Range("C12:C163"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        CustomOrder:="General,ProgM,BP,Other", DataOption:=xlSortNormal
        With .AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub


Re Lone-Wolfe

Décidément, merci pour ton aide :)

J'ai essayé, mais j'ai exactement le même problème.
Cela fonctionne, sauf pour la ligne 12 :'(
 

niniylle

XLDnaute Nouveau
Hello
essaie avec ce code (que j'ai obtenu avec l'enregistreur de macro) puis quelques modifs
VB:
Sub Macro1()
'
' Macro1 Macro

    LastLine = ActiveSheet.Range("R" & Rows.Count).End(xlUp).Row
    Range("C12:R" & LastLine).Select
    ActiveWorkbook.Worksheets("Project").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Project").Sort.SortFields.Add Key:=Range("R12:R" & LastLine), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Project").Sort.SortFields.Add Key:=Range("C12:C" & LastLine), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Project").Sort
        .SetRange Range("C12:R" & LastLine)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub


Salut Vgendron,

Merci pour ta réponse.
Cependant, le tri personnalisé n'apparait pas dans le code :S
 

niniylle

XLDnaute Nouveau
Je viens d'essayer un autre code ci-dessous, et comme les autres, il ne fonctionne toujours pas sur la ligne 12 :(

VB:
Sub TriBis()
derliR = Sheets("Project").Range("R" & Rows.Count).End(xlUp).Offset(1, 0).Row
derliC = Sheets("Project").Range("C" & Rows.Count).End(xlUp).Offset(1, 0).Row

'Dim LignR As Row

  
    ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Clear
  


    ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Add Key:= _
        Range("R12:R" & derliR), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Project").AutoFilter.Sort
      
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
      
        ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Clear
  

    ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Add Key:= _
        Range("C12:C" & derliC), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder _
        := _
       "General,ProgM,BP,Other" _
        , DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Project").AutoFilter.Sort
    
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
   End Sub
 

vgendron

XLDnaute Barbatruc
il te suffit de remplacer la ligne du tri A Z de la colonne C par ton tri perso

VB:
Sub Macro1()
'
' Macro1 Macro
  
    LastLine = ActiveSheet.Range("R" & Rows.Count).End(xlUp).Row
    Range("C12:R" & LastLine).Select
    ActiveWorkbook.Worksheets("Project").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Project").Sort.SortFields.Add Key:=Range("R12:R" & LastLine), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Project").Sort.SortFields.Add Key:=Range("C12:C" & LastLine), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="General,ProgM,BP,Other", DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Project").Sort
        .SetRange Range("C12:R" & LastLine)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

@Lone-wolf : pour les activeworkbook.. j'ai juste laissé ce que l'enregistreur avait mis.. :-D
 

Lone-wolf

XLDnaute Barbatruc
Re

@niniylle

EDIT : petite correction de la macro de vgendron.

VB:
Sub Tri_Perso()
Dim LastLine&, plage As Range
    ' Macro1 Macro
    With Sheets("Project")
        LastLine = .Range("r" & Rows.Count).End(xlUp).Row
        Set plage = .Range("c12:r" & LastLine)
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=Range("r12:r" & LastLine), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .Sort.SortFields.Add Key:=Range("c12:c" & LastLine), SortOn:=xlSortOnValues, _
        Order:=xlAscending, CustomOrder:="General,ProgM,BP,Other", DataOption:=xlSortNormal
       
        With .Sort
            .SetRange plage
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub
 
Dernière édition:

Statistiques des forums

Discussions
312 329
Messages
2 087 327
Membres
103 517
dernier inscrit
hbenaoun63