Tri de colonne avec une partie du texte de l'entête

Résolu/Fermé
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 - 17 août 2016 à 21:14
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 - 18 août 2016 à 15:04
Bonjour à tous,

Je voulais savoir si il était possible de trier des colonnes avec seulement une partie de l'entête sur mon Activesheet.

Dans mes entête de colonne, il y le texte suivant: Sensor Reading(kPa) - 1537516 - 32m. Ce que je veux faire c'est de trier à partir du dernier chiffre de ma chaîne de caractère et de les placer en ordre croissant. Ce chiffre représente une profondeur d'installation en mètre.

Mon range commence toujours en position: 1 ligne, 6 colonne et la fin du range est variable, donc j'utilise les variables DerLig et DerCol.

J'ai commencé un code sans tenir compte de ce problème , mais le tri ne fonctionne pas:
ActiveSheet.Sort.SortFields.Clear
ActiveSheet.Sort.SortFields.Add Key:=Range(Cells(1, 6), Cells(DerLig, DerCol - 3)), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

With ActiveSheet.Sort
.Header = xlGuess
.MatchCase = False
.Orientation = xlLeftToRight
.SortMethod = xlPinYin
End With


Merci pour votre aide!
A voir également:

1 réponse

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
17 août 2016 à 22:23
Bonjour,

Ce code devrait mieux fonctionner (non testé mais fonctionnel sur autre classeur) :
With ActiveSheet.Sort
    With .SortFields
        .Clear
        .Add Key:=Range(Cells(1, 6), Cells(DerLig, DerCol - 3)), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    End With

    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlLeftToRight
    .SortMethod = xlPinYin
    .Apply
End With

Cependant, je ne pense pas que tu puisses trier sur une partie de la cellule.
Pourquoi ne pas isoler cette partie dans une colonne supplémentaire ?
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
18 août 2016 à 13:53
Merci beaucoup pour la réponse,

Mais j'ai une erreur d'exécution '1004', Référence de tri non valide. Vérifiez qu'elle se trouve bien parmi les données à trier et que la zone Trier par n'"est pas identique ou vide.

J'ai vérifier mon range et tout semble ok! Je ne réussi pas à trouver mon erreur.
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
18 août 2016 à 15:04
Re,

J'ai finalement trouvé mon erreur! Dans la ligne Add Key le range qui est spécifier doit être la ligne à partir duquel on trie et ensuite on doit ajouter une ligne SetRange pour spécifier tout le range à trier. Pour trouver mon erreur, j'ai fait les opérations manuellement en enregistrant la macro et j'ai trouvé mon erreur facilement.

Pour le trie, j'ai appliquer ta solution, c'est-à-dire, j'ai ajouté une ligne en haut de mon tableau, j'extrait la dernière valeur de ma chaîne de caractère de la cellule en dessous (ligne 2) et je la colle dans ma cellule au dessus (ligne1). Ensuite, je trie à partir de cette ligne en ordre croissant les colonnes choisit.

Voici le code final:

'Ajout d'une ligne pour trie
'****************************
Rows(1).Insert shift:=xlDown
DerCol3 = ActiveSheet.Cells(2, Cells.Columns.Count).End(xlToLeft).Column
DerLig3 = Cells(Application.Rows.Count, DerCol3 - 4).End(xlUp).Row
    
With Range(Cells(1, 8), Cells(1, DerCol3 - 4))
    For e = 8 To DerCol3 - 4
        Prof = Left(Cells(2, e), Len(Cells(2, e)) - 1)
        Prof2 = Right(Prof, Len(Prof) - 32)
        Cells(1, e).Value = Prof2
    Next e
End With

'Trie des colonnes sensor reading du moins profondond au plus profond
'********************************************************************
With ActiveSheet.Sort
    With .SortFields
        .Clear
        .Add Key:=Range(Cells(1, 8), Cells(1, DerCol3 - 3)), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    End With
    .SetRange Range(Cells(1, 8), Cells(DerLig3, DerCol3 - 3))
    .Header = xlYes
    .MatchCase = False 'Qu'est ce que ça fait?
    .Orientation = xlLeftToRight
    .SortMethod = xlPinYin
    .Apply
End With


Merci beaucoup!
0