XL 2021 Tri les lignes dans l'ordre du 1er "mot" de chaque cellule de la colonne à trier (col D pour l'exemple)

Usine à gaz

XLDnaute Barbatruc
Bjr à toutes et à tous :)

Comme d'habitude, je me tourne vers nos chers ténors :
Est-il possible de faire un Tri sur le 1er mot rencontré dans les cellules ?


Par exemple
15-05-23 12:52 : Pas intéressé(e) pour l'instant - RdV incertain = tri sur "Pas"
15-05-23 14:32 : Ne prend pas les appels - 24-04-23 17:55 : Répondeur - 24-04-23 15:37 : Répondeur - = tri sur "Ne"
etc...

Qu'en pensez-vous ?
Je joins un petit fichier test,
Merci à toutes et à tous
:)
 

Pièces jointes

  • tri test.xlsm
    13.9 KB · Affichages: 8
Solution
Cz code est placé dans un module standard :
VB:
Sub Tri()
Application.ScreenUpdating = False
Columns(4).Insert 'insère une colonne auxiliaire
With Range("D1:D" & Cells.SpecialCells(xlCellTypeLastCell).Row)
    .Formula = "=Ext(E1)"
    .Value = .Value 'supprime les formules
    .EntireRow.Sort .Cells, xlAscending, Header:=xlYes 'tri
    .EntireColumn.Delete 'supprime la colonne auxiliaire
End With
End Sub

Function Ext(x$) As String
Dim s
s = Split(x)
If UBound(s) > 2 Then Ext = s(3)
End Function

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lionel,
Pourquoi ne pas faire simplement :
VB:
Sub TriSurNe()
    Application.ScreenUpdating = False
    ActiveSheet.Range("$D$1:$D$1000").AutoFilter Field:=1
    ActiveSheet.Range("$D$1:$D$1000").AutoFilter Field:=1, Criteria1:="=*: Ne*", Operator:=xlAnd
End Sub
Sub SansFiltre()
    Application.ScreenUpdating = False
    ActiveSheet.Range("$D$1:$D$1000").AutoFilter Field:=1
End Sub
 

Pièces jointes

  • tri test.xlsm
    19.9 KB · Affichages: 1

Usine à gaz

XLDnaute Barbatruc
Bonjour Lionel,
Pourquoi ne pas faire simplement :
VB:
Sub TriSurNe()
    Application.ScreenUpdating = False
    ActiveSheet.Range("$D$1:$D$1000").AutoFilter Field:=1
    ActiveSheet.Range("$D$1:$D$1000").AutoFilter Field:=1, Criteria1:="=*: Ne*", Operator:=xlAnd
End Sub
Sub SansFiltre()
    Application.ScreenUpdating = False
    ActiveSheet.Range("$D$1:$D$1000").AutoFilter Field:=1
End Sub
Bjr sylvanu :)
Oui, j'ai pensé au filtre
Mais si c'est possible je préfère un tri :)
 

Usine à gaz

XLDnaute Barbatruc
re,
Merci pour le retour. Dans le cadre de l'usine à gaz, la colonne cachée.
Cordialement
Merci à toi pour ce nouvel essai.
Le but serait d'intégrer dans mes fichiers de prospections... ça ne me semble pas possible.

Ne vous embêtez pas, je pensais qu'un "simple" tri avec critère (Tri sur 1er mot de la cellule) serait possible mais il semble que ce ne soit pas le cas.

Ce n'est pas pour moi un "besoin brûlant" mais je pense que la question est intéressante.
Merci à tous d'avoir bien voulu vous pencher sur ma question et d'avoir apporté de bonnes solutions certainement utiles pour d'autres demandeurs.
:)
 
Dernière édition:

job75

XLDnaute Barbatruc
Cz code est placé dans un module standard :
VB:
Sub Tri()
Application.ScreenUpdating = False
Columns(4).Insert 'insère une colonne auxiliaire
With Range("D1:D" & Cells.SpecialCells(xlCellTypeLastCell).Row)
    .Formula = "=Ext(E1)"
    .Value = .Value 'supprime les formules
    .EntireRow.Sort .Cells, xlAscending, Header:=xlYes 'tri
    .EntireColumn.Delete 'supprime la colonne auxiliaire
End With
End Sub

Function Ext(x$) As String
Dim s
s = Split(x)
If UBound(s) > 2 Then Ext = s(3)
End Function
 

Pièces jointes

  • tri test.xlsm
    22.9 KB · Affichages: 6
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Cz code est placé dans un module standard :
VB:
Sub Tri()
Dim s
Application.ScreenUpdating = False
Columns(4).Insert 'insère une colonne auxiliaire
With Range("D1:D" & Cells.SpecialCells(xlCellTypeLastCell).Row)
    .Formula = "=Ext(E1)"
    .Value = .Value 'supprime les formules
    .EntireRow.Sort .Cells, xlAscending, Header:=xlYes 'tri
    .EntireColumn.Delete 'supprime la colonne auxiliaire
End With
End Sub

Function Ext(x$) As String
Dim s
s = Split(x)
If UBound(s) > 2 Then Ext = s(3)
End Function
Bjr Gérard :)
Ce code est nickel et pas "trop" compliqué pour moi.
Nickel, merci encore.
Mais la fonction à laquelle je ne comprends rien me rappelle une chanson de Claude François
lol 🙃🤪

Merci à tous :)
 

job75

XLDnaute Barbatruc
Il y a des lignes (11 13 15 17...) avec 2 espaces devant "Répondeur".

Pour supprimer l'espace superflu utilisons TRIM (SUPPRESPACE) :
VB:
Sub Tri()
Application.ScreenUpdating = False
Columns(4).Insert 'insère une colonne auxiliaire
With Range("D1:D" & Cells.SpecialCells(xlCellTypeLastCell).Row)
    .Formula = "=Ext(TRIM(E1))"
    .Value = .Value 'supprime les formules
    .EntireRow.Sort .Cells, xlAscending, Header:=xlYes 'tri
    .EntireColumn.Delete 'supprime la colonne auxiliaire
End With
End Sub
 

Pièces jointes

  • tri test(1).xlsm
    22.9 KB · Affichages: 2

Usine à gaz

XLDnaute Barbatruc
Il y a des lignes (11 13 15 17...) avec 2 espaces devant "Répondeur".

Pour supprimer l'espace superflu utilisons TRIM (SUPPRESPACE) :
VB:
Sub Tri()
Application.ScreenUpdating = False
Columns(4).Insert 'insère une colonne auxiliaire
With Range("D1:D" & Cells.SpecialCells(xlCellTypeLastCell).Row)
    .Formula = "=Ext(TRIM(E1))"
    .Value = .Value 'supprime les formules
    .EntireRow.Sort .Cells, xlAscending, Header:=xlYes 'tri
    .EntireColumn.Delete 'supprime la colonne auxiliaire
End With
End Sub
Encore merci Gérard :)
lol C'est surtout la fonction que je n'arrive pas à comprendre :
VB:
Function Ext(x$) As String
Dim s
s = Split(x)
If UBound(s) > 2 Then Ext = s(3)
End Function
s = Split(x) ?
UBound(s) >2 ?
Ext = s(3) ?
:)
 

job75

XLDnaute Barbatruc
Renseigne-toi sur la fonction Split.

Quand le séparateur n'est pas indiqué il s'agit de l'espace.

La fonction renvoie un tableau à une dimension de dimension (UBound) égale au nombre d'espace.

S'il s'agit d'un texte vide le UBound vaut -1.
 

Statistiques des forums

Discussions
315 093
Messages
2 116 122
Membres
112 666
dernier inscrit
Coco0505