Tri liste ordre alphabetique

SAMWRC

XLDnaute Occasionnel
Bonjour le forum,

Voici mon problème :
J'ai une liste de noms dont je veux me servir comme base de données. Cette liste sera donc automatiquement mise à jour et stockée dans un onglet. Je veux utiliser cette liste de noms dans plusieurs autres onglets. Pour des questions pratiques, je souhaiterais que cette liste soit triée par ordre alphabétique lorsqu'elle est "recopiée" dans les autres onglets.

Après des recherches très intéressantes dans le forum, j'ai réussi à élaborer la solution en pj qui fonctionne a priori très bien. Cependant, elle fait appel à 2 colonnes intermédiaires (Classement ordre alphabétique / Index) dont j'aimerais bien me passer si possible.

Pour résumer, je souhaite trouver une formule qui, à partir de la liste "noms", me donne la liste "noms tries".

Merci d'avance pour votre aide.

Sam
 

Pièces jointes

  • Tri liste ordre alphabetique.xls
    16 KB · Affichages: 515

Softmama

XLDnaute Accro
Re : Tri liste ordre alphabetique

Bonsoir,

Une formule oui, mais une macro, plus simple !
Une macro d'une ligne qui te fait l'équivalent de Données/ Trier comme ceci :
que tu peux associer à un évènement lié à ta feuille, comme Activate par exemple, enfin à voir selon tes besoins...

Code:
Sub Trier()
    Range("A2").sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes
end sub

[Edit] Bsoir Aristote67
 

mercant76

XLDnaute Impliqué
Re : Tri liste ordre alphabetique

bonsoir à tous,

dans un premier temps , trier la liste avec l'icone A-Z et faire une copie avec liaison dans chaque onglet.

la première fois, c'est long, mais ensuite, la liste dans tous les onglets se met à jour toute seule.

@+
 

aristote67

XLDnaute Nouveau
Re : Tri liste ordre alphabetique

Re bonsoir

Petite erreur de manip
Tri de la ligne 2 à 500 tous les noms de la colonne A



Private Sub Worksheet_Change(ByVal Target As Range)
10 If Target.Column = 1 Then
20 Range("A2:A500").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
30 End If
End Sub

En espérant avoir répondu a ta question

Cordialement
 

david84

XLDnaute Barbatruc
Re : Tri liste ordre alphabetique

Bonsoir,
cf fichier.
A+
 

Pièces jointes

  • Copie de Tri liste ordre alphabetique.xls
    37.5 KB · Affichages: 582
  • Copie de Tri liste ordre alphabetique.xls
    37.5 KB · Affichages: 609
  • Copie de Tri liste ordre alphabetique.xls
    37.5 KB · Affichages: 610

SAMWRC

XLDnaute Occasionnel
Re : Tri liste ordre alphabetique

Merci a vous !

La solution de David est celle qui me convient le mieux.
Par contre, pour aller encore plus loin : les formules ne marchent plus lorsque la liste contient des cases vides. Je m'explique, la longueur de la liste initialement définie va évoluer au cours du temps. Il serait donc très pratique de pouvoir utiliser une formule sur une plage de cellule plus grande dont les dernières lignes sont vides.

Merci beaucoup pour votre aide
 

david84

XLDnaute Barbatruc
Re : Tri liste ordre alphabetique

Re
Par contre, pour aller encore plus loin : les formules ne marchent plus lorsque la liste contient des cases vides.[/B].
D'où l'intérêt de placer dès le départ un exemple explicite...
Je m'explique, la longueur de la liste initialement définie va évoluer au cours du temps. Il serait donc très pratique de pouvoir utiliser une formule sur une plage de cellule plus grande dont les dernières lignes sont vides

Dans ce cas nommer la plage de façon dynamique en utilisant la formule Decaler (faire une recherche dans l'aide d'Excel, touche F1).
Dans ton exemple, j'ai nommé cette plage "Nom" et utilisé ce nom dans la formule en remplaçant la plage par "nom" (surligner la plage et se servir de la touche F3 du clavier pour la remplacer par "Nom"). Les prénoms placés à la suite de la dernière cellule non vide seront pris en compte dans la formule.
Je te l'ai fait pour la 1ère formule. A toi de continuer pour les suivantes.
A+
 

Pièces jointes

  • Copie de Tri liste ordre alphabetique.xls
    46.5 KB · Affichages: 343
  • Copie de Tri liste ordre alphabetique.xls
    46.5 KB · Affichages: 347
  • Copie de Tri liste ordre alphabetique.xls
    46.5 KB · Affichages: 352
Dernière édition:

SAMWRC

XLDnaute Occasionnel
Re : Tri liste ordre alphabetique

Merci David, ça marche parfaitement.
Désolé de ne pas avoir été clair des le début.

Je me suis également servi de ton travail sur les listes ordonnées a partir d'un tableau, très impressionnant.

Encore merci et bonne journée
 

bleinma

XLDnaute Nouveau
Re : Tri liste ordre alphabetique

Re

D'où l'intérêt de placer dès le départ un exemple explicite...

Dans ce cas nommer la plage de façon dynamique en utilisant la formule Decaler (faire une recherche dans l'aide d'Excel, touche F1).
Dans ton exemple, j'ai nommé cette plage "Nom" et utilisé ce nom dans la formule en remplaçant la plage par "nom" (surligner la plage et se servir de la touche F3 du clavier pour la remplacer par "Nom"). Les prénoms placés à la suite de la dernière cellule non vide seront pris en compte dans la formule.
Je te l'ai fait pour la 1ère formule. A toi de continuer pour les suivantes.
A+


Salut !

Tes formules sont presque exactement ce que je recherche ...
Je les ai décortiquées pour les comprendre, mais il reste un problème à résoudre pour mon utilisation :
Si dans ma liste il y a un blanc (une case vide) aléatoire en position, le classement recommence à zéro ...

Comment on peut faire ?
J'imagine qu'en faisant une liste intermédiaire sans les blancs, puis un tri ça peut marcher, mais la formule est trop compliquée pour moi ...
 

david84

XLDnaute Barbatruc
Re : Tri liste ordre alphabetique

Bonjour tout le monde,
Tri sans doublons (propositions testées sur le fichier de Jacques que je salue) :
par formules (validation matricielle) :
Code:
=SI(LIGNES($1:1)<=SOMME(SI(A$2:A$28<>"";1/NB.SI(A$2:A$28;A$2:A$28)));INDEX(A$2:A$28;EQUIV(MIN(SI((NB.SI(F$1:F1;A$2:A$28)=0)*(A$2:A$28<>"");NB.SI(A$2:A$28;"<"&A$2:A$28)));SI((NB.SI(F$1:F1;A$2:A$28)=0)*(A$2:A$28<>"");NB.SI(A$2:A$28;"<"&A$2:A$28));0));"")

Par fonction personnalisée : adaptation de la proposition de JB (validation classique, entrer dans une cellule
Code:
=SansDoublonsTrié2(A$2:A$28;LIGNES($1:1))
et tirer la formule vers le bas) :
Code:
Function SansDoublonsTrié2(champ As Range, Rang As Integer)
  Set mondico = CreateObject("Scripting.Dictionary")
  temp = champ
  For i = LBound(temp, 1) To UBound(temp, 1)
    For j = LBound(temp, 2) To UBound(temp, 2)
      If Not mondico.Exists(temp(i, j)) And temp(i, j) <> "" Then mondico.Add temp(i, j), temp(i, j)
    Next j
  Next i
  Dim b()
  ReDim b(1 To champ.Count)
  i = 1
  For Each c In mondico.items
    b(i) = c
    i = i + 1
  Next
  Call tri(b, 1, mondico.Count)
  If Rang <= mondico.Count Then SansDoublonsTrié2 = b(Rang)
  'SansDoublonsTrié = Application.Transpose(b)
End Function
Sub tri(a, gauc, droi) ' Quick sort
  ref = a((gauc + droi) \ 2)
  g = gauc: d = droi
  Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
       temp = a(g): a(g) = a(d): a(d) = temp
       g = g + 1: d = d - 1
    End If
  Loop While g <= d
  If g < droi Then Call tri(a, g, droi)
  If gauc < d Then Call tri(a, gauc, d)
End Sub

Même type d'adaptation possible pour la fonction de tri.
A+
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Tri liste ordre alphabetique

Attention!, avec cette version, la fonction SansDoublonsTrié2(A$2:A$28;LIGNES($1:1)) est appelée autant de fois qu'il y a de lignes. Si le nombre d'items à trier est >100, le temps d'exécution devient important.

JB
 

Discussions similaires

Statistiques des forums

Discussions
312 231
Messages
2 086 443
Membres
103 211
dernier inscrit
pierrecharbs