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 SubCordialement
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
(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" ???
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...