Tri sur une partie de la cellule c'est possible?

Bonjour,

J'ai une liste qui comporte des doublons identifiés par "-2eRUN":

896

898

1024

896-2eRUN

898-2eRUN

1024-2eRUN

Lorsque j'effectue un tri par macro (ou par le menu tri classique d'ailleurs...) j'obtiens la liste précédente mais je voudrais que ce tri ce fasse sans tenir compte du "-2eRUN" pour obtenir:

896

896-2eRUN

898

898-2eRUN

1024

1024-2eRUN

Je pensais que l'argument " DataOption1:=xlSortTextAsNumbers" m'aiderai, mais en fait pas du tout.

Existe t il un argument qui me permettrait d'ignorer ce bout de valeur commune lors du tri ?

Faut il passer par une étape intermédiaire qui copierai toutes les valeurs dans une autres colonne, supprimerai "-2eRUN", trierai et effacerai cette colonne intermédiaire?

Merci

Bonjour

En faisant comme tu suggères.

Première valeur en A2

Sub Trier()
Application.ScreenUpdating = False
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=SUBSTITUTE(RC1,""-2eRUN"","",""&ROW())*1"
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B7")
    Range("A2:B2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Columns("B:B").Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select
End Sub

Cordialement

17trier.zip (7.10 Ko)

Merci pour ta réponse.

La mauvaise nouvelle c'est qu'il n'y a pas de syntaxe simple mais qu'il faut passer par une colonne intermédiaire.

Ton code fonctionne parfaitement, j'étais moi même arriver à un résultat identique par une autre méthode que j'ai mise dans le module2 du fichier joint.

J'ai voulu adapter ce tri à un tableau dont les dimensions seraient variables en ligne et en colonne, j'ai donc mis la colonne temporaire en "IV".

C'est fonctionnel mais pas élégant.

J'ai donc essayer de dynamiser tout ça sur mon "module1" en demandant à ce que la colonne temporaire soit juste après la dernière colonne pleine du tableau et d'effectuer mon code sur cette dernière mais ça fonctionne pas du tout je tourne en rond sur des problèmes d'incompatibilité de type, ou même de range.

(J'arrive pas à faire un range sur toutes les cellules de la dernière colonne du tableau par exemple...)

Je vais essayer d'adapter ton code pour voir si j'ai plus de chance....

EDIT: quelqu'un peut il me dire comment faire un range sur toutes les cellules de la dernière colonne d'un tableau quand cette dernière colonne n'est pas connue et récupérée par "dercol = Range("IV2").End(xlToLeft).Column" ???

20test-trier.zip (24.43 Ko)

Sujet résolu, j'ai codé comme suit:

Sub replace_tri()
Dim plagetemp As Range, plagesource As Range, plagetarget As Range
Dim coltarget As Integer

With activesheets

coltarget = Range("IV2").End(xlToLeft).Column + 1 'colonne cible
Set plagesource = Range("A2", Range("A65536").End(xlUp)) 'données à trier
Set plagetarget = Cells(2, coltarget) 'début de la plagecible temporaire
Set plagetemp = Range(Cells(coltarget), Cells(Range("A65536").End(xlUp).Row, coltarget)) ' range entierement la plagecible temporaire
plagesource.Select
    Selection.Copy plagetarget 'copie les données à trier vers la plagecible temporaire

For Each Cell In plagetemp
    Cell.Value = Replace(Cell, "-2eRUN", "", 1)  'supprime dans les cellules la valeur -2eRUN
Next Cell

ActiveSheet.UsedRange.Rows("2:" & ActiveSheet.UsedRange.Rows.Count).Select 'selectionne le tableau

Selection.Sort Key1:=plagetemp, Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False,  _Orientation:=xlTopToBottom,  DataOption1:=xlSortNormal 'tri le tableau par plagecible nettoyé croissante

plagetemp.ClearContents 'supprime la plage cible

End With

  End Sub

  

sauf si j'ai fait une erreur qui vous saute aux yeux...

Rechercher des sujets similaires à "tri partie possible"