Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
Supporter XLD
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

job75

XLDnaute Barbatruc
Bonjour Lionel, sylvanu,

Un tri peut se faire sur la base de n'importe quel critère pourvu qu'il soit bien défini.

Ici la question est : quelle ligne doit être considérée pour le déterminer ?

A+
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bjr sylvanu
Oui, j'ai pensé au filtre
Mais si c'est possible je préfère un tri
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
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
Supporter XLD
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
Supporter XLD
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.
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…