Savoir si une liste est triée par ordre alphabétique ou pas

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

J'ai une liste sur une seule colonne.
Je voudrais savoir comment on peut vérifier si le tri de cette liste l'est par ordre alphabétique ou pas.

Merci pour votre aide.
 
C

Compte Supprimé 979

Guest
Re : Savoir si une liste est triée par ordre alphabétique ou pas

Bonjour Magic_Doctor ;)

Si la liste est triée, la cellule de dessous est supérieure à celle en cours
Donc il suffit de faire une boucle et de tester jusqu'au bout si la cellule suivante est bien supérieure à celle en cours

Ou sinon, faire automatiquement un tri

A+
 

job75

XLDnaute Barbatruc
Re : Savoir si une liste est triée par ordre alphabétique ou pas

Bonsoir Magic_Doctor, Bruno,

Si la plage à étudier est nommée Liste, utilise cette formule :

Code:
="Liste "&REPT("non ";SIGNE(SOMMEPROD(N(DECALER(Liste;;;NBVAL(Liste)-1)>DECALER(Liste;1;;NBVAL(Liste)-1)))))&"triée"
A la place du nom Liste on peut tout aussi bien mettre sa référence.

A+
 

job75

XLDnaute Barbatruc
Re : Savoir si une liste est triée par ordre alphabétique ou pas

Re,

S'il y a des textes vides "" dans Liste utiliser :

Code:
="Liste "&REPT("non ";SIGNE(SOMMEPROD(N(DECALER(Liste;;;NB.SI(Liste;"><")-1)>DECALER(Liste;1;;NB.SI(Liste;"><")-1)))))&"triée"
A+
 

job75

XLDnaute Barbatruc
Re : Savoir si une liste est triée par ordre alphabétique ou pas

Re,

Ah oui j'oubliais que tu travailles sur une version espagnole, alors vois les formules dans le fichier joint.

A+
 

Pièces jointes

  • Liste triée(1).xls
    21.5 KB · Affichages: 55

Magic_Doctor

XLDnaute Barbatruc
Re : Savoir si une liste est triée par ordre alphabétique ou pas

Bonjour job,

Gracias pour ta réponse. Je conserve tes formules au cas où j'en aurais besoin, n'étant pas très à l'aise avec les formules.
Je signale que, pour les chiffres (sait-on jamais...), la 1ère formule marche apparemment mieux que la seconde ; du moins dans mes essais.
Seulement, voilà, je voudrais faire ce test non pas par formules mais par macro. Et je ne vois pas comment, en VBA, je peux comparer les cellules qui se succèdent tout au long d'un tableau en fonction de leur, disons, chronologie alphabétique.
 

job75

XLDnaute Barbatruc
Re : Savoir si une liste est triée par ordre alphabétique ou pas

Re Magic_Doctor, bonsoir 00 :)

Ma 2ème formule (avec NB.SI) ne fonctionne que sur des valeurs textes.

On peut bien sûr utiliser une fonction VBA :

Code:
Function TEST(liste As Range) As String
Dim i&
For i = 2 To liste.Count
  If liste(i) <> "" Then If liste(i - 1) > liste(i) _
    Or liste(i - 1) = "" Then TEST = "Liste non triée": Exit Function
Next
TEST = "Liste triée"
End Function
Fichier (2).

A+
 

Pièces jointes

  • Liste triée(2).xls
    43 KB · Affichages: 51
Dernière édition:

Gardien de phare

XLDnaute Accro
Re : Savoir si une liste est triée par ordre alphabétique ou pas

Re,

Bonsoir le forum, Job, tout le monde et "double zero",

J'ai testé, j'aime bien, c'est simple et efficace.

Ps1 en hommage à un MP qui m'avait touché
Ps2 pas dit que les autres solutions n'étaient pas bien ! :eek:
 

job75

XLDnaute Barbatruc
Re : Savoir si une liste est triée par ordre alphabétique ou pas

Re, salut Gardien de phare,

J'ai enfin testé ta solution DoubleZero.

Elle est excellente car elle effectue une comparaison avec un tri effectif.

Plus de problème avec les textes vides (qui se retrouvent en tête avec un tri croissant).

A+
 
C

Compte Supprimé 979

Guest
Re : Savoir si une liste est triée par ordre alphabétique ou pas

Bonsoir le fil ;)

Sinon le code dont j'avais parlé au début
Code:
Option Compare Text

Sub BrunoM45TriOuiNon()
  Dim DLig As Long, Lig As Long
  DLig = Range("A" & Rows.Count).End(xlUp).Row
  For Lig = 2 To DLig
    If Range("A" & Lig + 1) < Range("A" & Lig) Then Exit For
  Next Lig
  If Lig < DLig Then MsgBox "Tri non effectué" Else MsgBox "Tri effectué"
End Sub

Effectivement il ne faut par oublier : Option Compare Text

A+
 

job75

XLDnaute Barbatruc
Re : Savoir si une liste est triée par ordre alphabétique ou pas

Re,

Finalement il faut utiliser IsEmpty :

Code:
Function TEST(liste As Range) As String
Dim i&
For i = 2 To liste.Count
  If Not IsEmpty(liste(i)) Then If liste(i - 1) > liste(i) _
    Or IsEmpty(liste(i - 1)) Then TEST = "Liste non triée": Exit Function
Next
TEST = "Liste triée"
End Function
Fichier (3).

Edit pour Bruno : OK pour Option Compare Text si l'on ne veut pas tenir compte de la casse.

A+
 

Pièces jointes

  • Liste triée(3).xls
    43 KB · Affichages: 46
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 185
dernier inscrit
salhit