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

  • Initiateur de la discussion Initiateur de la discussion Guido
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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: 98
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

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

Dernière édition:
Re : Classer par ordre alphabetique!!!!!

Bonjour Guido,

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

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+
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
171
Réponses
16
Affichages
402
Réponses
4
Affichages
197
Réponses
5
Affichages
201
Réponses
15
Affichages
686
Retour