[ RESOLU ] Classer par ordre alphabetique!!!!!

Guido

XLDnaute Accro
Bonjour Le Forum

J'aimerais classer une plage par ordre alphabetique..

Voir petit fichier

Merci

Guido
 

Pièces jointes

  • Classement a-z.xls
    19 KB · Affichages: 103
  • Classement a-z.xls
    19 KB · Affichages: 105

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Classer par ordre alphabetique!!!!!

Bonjour Guido,

une solution par macro en versions 2003 et 2007

à+
Philippe
 

Pièces jointes

  • 111.xls
    36 KB · Affichages: 84
  • 111.xlsm
    20.3 KB · Affichages: 87
  • 111.xls
    36 KB · Affichages: 74
  • 111.xlsm
    20.3 KB · Affichages: 90
Dernière édition:

JHA

XLDnaute Barbatruc
Re : Classer par ordre alphabetique!!!!!

Bonjour à tous,

Un essai en pièce jointe
Autrement par un simple trie Sélectionner la plage "B2:H22"
Ruban onglet Données/trier /Trier par: sélectionner "Lgt"

JHA
 

Pièces jointes

  • Classement a-z.xls
    34 KB · Affichages: 98
  • Classement a-z.xls
    34 KB · Affichages: 92
Dernière édition:

Guido

XLDnaute Accro
Re : Classer par ordre alphabetique!!!!!

Bonjour Phillipe,et JHA et le Forum

BHA..

J'ai bien fais comme tu la dit

Je selectionne les cellules B2:H22,ensuite donnees ,trié

J'ai le chois colonnes de B a H, mais pas Lgt.

donc je choisi la plage B2:H22

ca ne fonctionne pas

voir capture de l'ecran

Ou ais je fait l'erreur...

Merci

Guido
 

Pièces jointes

  • Capture du resultat.....jpg
    Capture du resultat.....jpg
    59.3 KB · Affichages: 95

JHA

XLDnaute Barbatruc
Re : Classer par ordre alphabetique!!!!!

Bonjour à tous,

Essayez de sélectionner "B3:H22"
trier colonne "H"

J'ai réalisé le trie sur la feuille 1

JHA
 

Pièces jointes

  • Classement a-z.xls
    33 KB · Affichages: 87
  • Classement a-z.xls
    33 KB · Affichages: 80

job75

XLDnaute Barbatruc
Re : Classer par ordre alphabetique!!!!!

Bonjour Guido, Philippe, JHA,

Avec la fonction personnalisée TriAlpha et la macro de tri Quick sort :

Code:
Function TriAlpha(r1, r2)
Dim a, b, vide&, i&, c()
a = r2: b = r1
vide = 2
For i = 1 To UBound(a)
  If a(i, 1) = "" Then
    vide = vide + 1
    a(i, 1) = String(vide, "z")
  End If
Next
tri a, b, 1, UBound(a)
ReDim c(1 To UBound(a), 1 To 2)
For i = 1 To UBound(a)
  If a(i, 1) Like "zzz*" Then a(i, 1) = ""
  c(i, 1) = b(i, 1)
  c(i, 2) = a(i, 1)
Next
TriAlpha = c 'matrice
End Function

Sub tri(a, b, gauc, droi)     ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2, 1)
g = gauc: d = droi
Do
    Do While a(g, 1) < ref: g = g + 1: Loop
    Do While ref < a(d, 1): d = d - 1: Loop
    If g <= d Then
      temp = a(g, 1): a(g, 1) = a(d, 1): a(d, 1) = temp
      temp = b(g, 1): b(g, 1) = b(d, 1): b(d, 1) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, b, g, droi)
If gauc < d Then Call tri(a, b, gauc, d)
End Sub
La fonction est entrée matriciellement sur toute la plage V3:W22.

Fichier joint.

A+
 

Pièces jointes

  • Classement a-z(1).xls
    43.5 KB · Affichages: 78

job75

XLDnaute Barbatruc
Re : Classer par ordre alphabetique!!!!!

Re,

Sur Excel 2003 et versions antérieures il faut peut-être (je ne me souviens plus) une formule pour la MFC :

Code:
=W3<>""
Fichier (2).

A+
 

Pièces jointes

  • Classement a-z(2).xls
    40 KB · Affichages: 91

job75

XLDnaute Barbatruc
Re : Classer par ordre alphabetique!!!!!

Re,

Une autre solution avec cette macro évènementielle :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range
On Error Resume Next
Set P = [A:A].SpecialCells(xlCellTypeConstants, 1).EntireRow
On Error GoTo 0
If P Is Nothing Then Exit Sub
For Each P In P.Areas
  If Not Intersect(Target, P) Is Nothing Then
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Union(P(0, 2), P(0, 8), P.Columns(2), P.Columns(8)).Copy P(0, 22) 'avec titres
    P.Sort P.Columns(8), xlAscending, Header:=xlNo
    P.Resize(, 21).Sort P.Columns(1), xlAscending, Header:=xlNo
    Application.EnableEvents = True
  End If
Next
End Sub
Fichier joint.

Noter que la plage V3:W22 est rétablie si l'on essaie de la modifier manuellement...

Noter que la macro peut fonctionner sur plusieurs tableaux placés les uns au-dessous des autres.

A+
 

Pièces jointes

  • Classement a-z macro évènementielle(1).xls
    38.5 KB · Affichages: 85
Dernière édition:

Guido

XLDnaute Accro
Re : Classer par ordre alphabetique!!!!!

Bonjour a Tous,ttes

Je reviens vers Vous.

Je n'ai pas reussit a inserer vos proposition dans ma feuille,

Dommage. Donc je Vous propose de m'aider ( une fois de plus,merci ) a faire adapté ma demande sur le fichier ci joint

Merci a plus

Guido
 

Pièces jointes

  • Classer par ordre alphabetique.SVP.xls
    309 KB · Affichages: 96

job75

XLDnaute Barbatruc
Re : Classer par ordre alphabetique!!!!!

Bonjour Guido,

Trop souvent vous présentez des problèmes qu'ensuite vous compliquez :rolleyes:

Alors bien sûr les solutions proposées ne fonctionnent pas, ou vous ne savez pas les adapter.

Je pense cependant qu'ici ma solution avec la fonction TriAlpha est facile à adapter.

A+
 

job75

XLDnaute Barbatruc
Re : Classer par ordre alphabetique!!!!!

Re,

Fichier joint, il suffit d'appliquer la méthode de mon post #6 (sans oublier la MFC).

Et pour la plage AJ3:AL4 c'est basique [EDIT] =REPT(W3;W3<>"") en AK3 c'est mieux.

A+
 

Pièces jointes

  • Classer par ordre alphabetique.SVP(1).xls
    331.5 KB · Affichages: 69
Dernière édition:

job75

XLDnaute Barbatruc
Re : Classer par ordre alphabetique!!!!!

Re,

En vous relisant, je comprends que les formules ne vous intéressent pas.

Vous voulez un bouton, alors affectez-lui cette macro :

Code:
Sub Classer()
Dim i&, P As Range, j As Byte
Application.ScreenUpdating = False
For i = 1 To ActiveSheet.UsedRange.Rows.Count
  If Cells(i, 2) = "N°" Then
    Set P = Rows(i + 1).Resize(20).Cells
    Union(P(0, 2), P(0, 8), P.Columns(2), P.Columns(8)).Copy P(0, 22) 'avec titres
    P.Columns(22).Resize(, 2).Sort P.Columns(23), xlAscending, Header:=xlNo
    P(1, 36).Resize(2, 3) = "" 'RAZ
    For j = 1 To 2 'les 2 premiers
      If P(j, 23) <> "" Then
        P(j, 36) = P(j, 22)
        P(j, 37) = P(j, 23)
        P(j, 38) = Application.VLookup(P(j, 36), P.Columns(2).Resize(, 3), 3, 0)
      End If
    Next j
  End If
Next i
End Sub
Fichier (2).

Bonne fin de soirée.
 

Pièces jointes

  • Classer par ordre alphabetique.SVP(2).xls
    321.5 KB · Affichages: 96

Discussions similaires

Statistiques des forums

Discussions
314 207
Messages
2 107 261
Membres
109 790
dernier inscrit
hakim.kerbiche