Tri de colonne avec une partie du texte de l'entête
Résolu
bassmart
Messages postés
281
Date d'inscription
Statut
Membre
Dernière intervention
-
bassmart Messages postés 281 Date d'inscription Statut Membre Dernière intervention -
bassmart Messages postés 281 Date d'inscription Statut Membre Dernière intervention -
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:
Merci pour votre aide!
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!
1 réponse
-
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 ?-
-
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!
-