Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tri en lisant le nombre à l'envers

6 réponses
Avatar
ivburo
Ma question va paraître bizarre mais j'aurais besoin que excel me trie une
liste en lisant les chiffres de la colonne concernée à l'envers. En fait mes
références finissent toutes par 3 ou 2 et je voudrais les trier pour les
séparer.
J'espère que c'est compréhensible. :~

6 réponses

Avatar
MichDenis
Bonjour Ivburo,

Tu copies ce qui suit dans un module STANDARD.
dans la procédure TEST, tu adaptes le nom de la feuille (Propriété Name)
ainsi que la plage de cellules où sont tes données.
La procédure utilise la colonne à droite des données de façon
temporaire. n'importe quelle colonne peut faire l'affaire. Tu
adaptes le "1" dans la procédure pour la colonne de ton choix.

'-------------------------------------------------------
Sub test()
Dim X
Dim Rg As Range
Application.ScreenUpdating = False
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Set Rg = Range("C1:C" & Range("C65536").End(xlUp).Row)
Rg.Offset(, 1).Formula = "=Inverse(" & Rg(1).Address(0, 0) & ")"
'1 représente une colonne à droite d'où sont les données
X = Rg.Offset(, 1)
Rg.Offset(, 1).Clear
Rg = BubbleSort(X)
Application.ScreenUpdating = True
End Sub
'-------------------------------------------------------
Function Inverse(Rg)
Inverse = VBA.StrReverse(Rg)
End Function
'-------------------------------------------------------
Function BubbleSort(List)
' Sorts the List array in ascending order
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp

First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i, 1) > List(j, 1) Then
Temp = List(j, 1)
List(j, 1) = List(i, 1)
List(i, 1) = Temp
End If
Next j
Next i
BubbleSort = List
End Function
'-------------------------------------------------------



"ivburo" a écrit dans le message de groupe de
discussion :
Ma question va paraître bizarre mais j'aurais besoin que excel me trie une
liste en lisant les chiffres de la colonne concernée à l'envers. En fait mes
références finissent toutes par 3 ou 2 et je voudrais les trier pour les
séparer.
J'espère que c'est compréhensible. :~
Avatar
MichDenis
Moi, je préfère celle-ci :

Sub test()

Dim Rg As Range
Application.ScreenUpdating = False
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Set Rg = Range("C1:C" & Range("C65536").End(xlUp).Row)
With Rg.Offset(, 1)
.Formula = "=Inverse(" & Rg(1).Address(0, 0) & ")"
.Value = .Value
.Sort Key1:=.Item(1), Order1:=xlAscending, Header:=xlNo
.Copy Rg
.Clear
End With
Application.ScreenUpdating = True
End Sub
'-------------------------------
Function Inverse(Rg)
Inverse = VBA.StrReverse(Rg)
End Function
'--------------------------------




"MichDenis" a écrit dans le message de groupe de discussion :
#
Bonjour Ivburo,

Tu copies ce qui suit dans un module STANDARD.
dans la procédure TEST, tu adaptes le nom de la feuille (Propriété Name)
ainsi que la plage de cellules où sont tes données.
La procédure utilise la colonne à droite des données de façon
temporaire. n'importe quelle colonne peut faire l'affaire. Tu
adaptes le "1" dans la procédure pour la colonne de ton choix.

'-------------------------------------------------------
Sub test()
Dim X
Dim Rg As Range
Application.ScreenUpdating = False
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Set Rg = Range("C1:C" & Range("C65536").End(xlUp).Row)
Rg.Offset(, 1).Formula = "=Inverse(" & Rg(1).Address(0, 0) & ")"
'1 représente une colonne à droite d'où sont les données
X = Rg.Offset(, 1)
Rg.Offset(, 1).Clear
Rg = BubbleSort(X)
Application.ScreenUpdating = True
End Sub
'-------------------------------------------------------
Function Inverse(Rg)
Inverse = VBA.StrReverse(Rg)
End Function
'-------------------------------------------------------
Function BubbleSort(List)
' Sorts the List array in ascending order
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp

First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i, 1) > List(j, 1) Then
Temp = List(j, 1)
List(j, 1) = List(i, 1)
List(i, 1) = Temp
End If
Next j
Next i
BubbleSort = List
End Function
'-------------------------------------------------------



"ivburo" a écrit dans le message de groupe de
discussion :
Ma question va paraître bizarre mais j'aurais besoin que excel me trie une
liste en lisant les chiffres de la colonne concernée à l'envers. En fait mes
références finissent toutes par 3 ou 2 et je voudrais les trier pour les
séparer.
J'espère que c'est compréhensible. :~
Avatar
Jac
… autre solution en utilisant une colonne supplémentaire et le calcul
suivant : =Droite(A1;1) afin d'extraire le dernier caractère de chaque
valeur.

Jac

ivburo a utilisé son clavier pour écrire :
Ma question va paraître bizarre mais j'aurais besoin que excel me trie une
liste en lisant les chiffres de la colonne concernée à l'envers. En fait mes
références finissent toutes par 3 ou 2 et je voudrais les trier pour les
séparer.
J'espère que c'est compréhensible. :~


Avatar
Péhemme
Bonjour Denis,
Si tu lis ces lignes, à quoi sert le :
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
de ta macro ?
Par l'utilisation de celle-ci, pour autant que la colonne "C" soit remplie
elle fonctionne parfaitement.
Je teste pas à pas mais ne comprends pas.
Merci d'avance.
Bien amicalement
Michel



"MichDenis" a écrit dans le message de
news:%
Moi, je préfère celle-ci :

Sub test()

Dim Rg As Range
Application.ScreenUpdating = False
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Set Rg = Range("C1:C" & Range("C65536").End(xlUp).Row)
With Rg.Offset(, 1)
.Formula = "=Inverse(" & Rg(1).Address(0, 0) & ")"
.Value = .Value
.Sort Key1:=.Item(1), Order1:=xlAscending, Header:=xlNo
.Copy Rg
.Clear
End With
Application.ScreenUpdating = True
End Sub
'-------------------------------
Function Inverse(Rg)
Inverse = VBA.StrReverse(Rg)
End Function
'--------------------------------




"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour Ivburo,

Tu copies ce qui suit dans un module STANDARD.
dans la procédure TEST, tu adaptes le nom de la feuille (Propriété Name)
ainsi que la plage de cellules où sont tes données.
La procédure utilise la colonne à droite des données de façon
temporaire. n'importe quelle colonne peut faire l'affaire. Tu
adaptes le "1" dans la procédure pour la colonne de ton choix.

'-------------------------------------------------------
Sub test()
Dim X
Dim Rg As Range
Application.ScreenUpdating = False
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Set Rg = Range("C1:C" & Range("C65536").End(xlUp).Row)
Rg.Offset(, 1).Formula = "=Inverse(" & Rg(1).Address(0, 0) & ")"
'1 représente une colonne à droite d'où sont les données
X = Rg.Offset(, 1)
Rg.Offset(, 1).Clear
Rg = BubbleSort(X)
Application.ScreenUpdating = True
End Sub
'-------------------------------------------------------
Function Inverse(Rg)
Inverse = VBA.StrReverse(Rg)
End Function
'-------------------------------------------------------
Function BubbleSort(List)
' Sorts the List array in ascending order
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp

First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i, 1) > List(j, 1) Then
Temp = List(j, 1)
List(j, 1) = List(i, 1)
List(i, 1) = Temp
End If
Next j
Next i
BubbleSort = List
End Function
'-------------------------------------------------------



"ivburo" a écrit dans le message de
groupe de
discussion :
Ma question va paraître bizarre mais j'aurais besoin que excel me trie une
liste en lisant les chiffres de la colonne concernée à l'envers. En fait
mes
références finissent toutes par 3 ou 2 et je voudrais les trier pour les
séparer.
J'espère que c'est compréhensible. :~



Avatar
MichDenis
Bonjour Péhemme,

Tu as parfaitement raison : ceci aurait été suffisant en supposant
que les données sont en colonne A.
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Pourquoi j'ai inséré cette ligne de code par la suite :
Set Rg = Range("C1:C" & Range("C65536").End(xlUp).Row)
Sûrement, suite à une distraction... merci de l'avoir souligné.



"Péhemme" a écrit dans le message de groupe de discussion :

Bonjour Denis,
Si tu lis ces lignes, à quoi sert le :
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
de ta macro ?
Par l'utilisation de celle-ci, pour autant que la colonne "C" soit remplie
elle fonctionne parfaitement.
Je teste pas à pas mais ne comprends pas.
Merci d'avance.
Bien amicalement
Michel



"MichDenis" a écrit dans le message de
news:%
Moi, je préfère celle-ci :

Sub test()

Dim Rg As Range
Application.ScreenUpdating = False
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Set Rg = Range("C1:C" & Range("C65536").End(xlUp).Row)
With Rg.Offset(, 1)
.Formula = "=Inverse(" & Rg(1).Address(0, 0) & ")"
.Value = .Value
.Sort Key1:=.Item(1), Order1:=xlAscending, Header:=xlNo
.Copy Rg
.Clear
End With
Application.ScreenUpdating = True
End Sub
'-------------------------------
Function Inverse(Rg)
Inverse = VBA.StrReverse(Rg)
End Function
'--------------------------------




"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour Ivburo,

Tu copies ce qui suit dans un module STANDARD.
dans la procédure TEST, tu adaptes le nom de la feuille (Propriété Name)
ainsi que la plage de cellules où sont tes données.
La procédure utilise la colonne à droite des données de façon
temporaire. n'importe quelle colonne peut faire l'affaire. Tu
adaptes le "1" dans la procédure pour la colonne de ton choix.

'-------------------------------------------------------
Sub test()
Dim X
Dim Rg As Range
Application.ScreenUpdating = False
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Set Rg = Range("C1:C" & Range("C65536").End(xlUp).Row)
Rg.Offset(, 1).Formula = "=Inverse(" & Rg(1).Address(0, 0) & ")"
'1 représente une colonne à droite d'où sont les données
X = Rg.Offset(, 1)
Rg.Offset(, 1).Clear
Rg = BubbleSort(X)
Application.ScreenUpdating = True
End Sub
'-------------------------------------------------------
Function Inverse(Rg)
Inverse = VBA.StrReverse(Rg)
End Function
'-------------------------------------------------------
Function BubbleSort(List)
' Sorts the List array in ascending order
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp

First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i, 1) > List(j, 1) Then
Temp = List(j, 1)
List(j, 1) = List(i, 1)
List(i, 1) = Temp
End If
Next j
Next i
BubbleSort = List
End Function
'-------------------------------------------------------



"ivburo" a écrit dans le message de
groupe de
discussion :
Ma question va paraître bizarre mais j'aurais besoin que excel me trie une
liste en lisant les chiffres de la colonne concernée à l'envers. En fait
mes
références finissent toutes par 3 ou 2 et je voudrais les trier pour les
séparer.
J'espère que c'est compréhensible. :~



Avatar
Péhemme
Merci.
Tu vois, à force de m'apprendre, je deviens bon, enfin... je m'accroche...
;-)
et bises à JPS (il comprendra)
Michel


"MichDenis" a écrit dans le message de
news:
Bonjour Péhemme,

Tu as parfaitement raison : ceci aurait été suffisant en supposant
que les données sont en colonne A.
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Pourquoi j'ai inséré cette ligne de code par la suite :
Set Rg = Range("C1:C" & Range("C65536").End(xlUp).Row)
Sûrement, suite à une distraction... merci de l'avoir souligné.



"Péhemme" a écrit dans le message de groupe de discussion :

Bonjour Denis,
Si tu lis ces lignes, à quoi sert le :
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
de ta macro ?
Par l'utilisation de celle-ci, pour autant que la colonne "C" soit remplie
elle fonctionne parfaitement.
Je teste pas à pas mais ne comprends pas.
Merci d'avance.
Bien amicalement
Michel



"MichDenis" a écrit dans le message de
news:%
Moi, je préfère celle-ci :

Sub test()

Dim Rg As Range
Application.ScreenUpdating = False
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Set Rg = Range("C1:C" & Range("C65536").End(xlUp).Row)
With Rg.Offset(, 1)
.Formula = "=Inverse(" & Rg(1).Address(0, 0) & ")"
.Value = .Value
.Sort Key1:=.Item(1), Order1:=xlAscending, Header:=xlNo
.Copy Rg
.Clear
End With
Application.ScreenUpdating = True
End Sub
'-------------------------------
Function Inverse(Rg)
Inverse = VBA.StrReverse(Rg)
End Function
'--------------------------------




"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour Ivburo,

Tu copies ce qui suit dans un module STANDARD.
dans la procédure TEST, tu adaptes le nom de la feuille (Propriété Name)
ainsi que la plage de cellules où sont tes données.
La procédure utilise la colonne à droite des données de façon
temporaire. n'importe quelle colonne peut faire l'affaire. Tu
adaptes le "1" dans la procédure pour la colonne de ton choix.

'-------------------------------------------------------
Sub test()
Dim X
Dim Rg As Range
Application.ScreenUpdating = False
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Set Rg = Range("C1:C" & Range("C65536").End(xlUp).Row)
Rg.Offset(, 1).Formula = "=Inverse(" & Rg(1).Address(0, 0) & ")"
'1 représente une colonne à droite d'où sont les données
X = Rg.Offset(, 1)
Rg.Offset(, 1).Clear
Rg = BubbleSort(X)
Application.ScreenUpdating = True
End Sub
'-------------------------------------------------------
Function Inverse(Rg)
Inverse = VBA.StrReverse(Rg)
End Function
'-------------------------------------------------------
Function BubbleSort(List)
' Sorts the List array in ascending order
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp

First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i, 1) > List(j, 1) Then
Temp = List(j, 1)
List(j, 1) = List(i, 1)
List(i, 1) = Temp
End If
Next j
Next i
BubbleSort = List
End Function
'-------------------------------------------------------



"ivburo" a écrit dans le message de
groupe de
discussion :
Ma question va paraître bizarre mais j'aurais besoin que excel me trie
une
liste en lisant les chiffres de la colonne concernée à l'envers. En fait
mes
références finissent toutes par 3 ou 2 et je voudrais les trier pour les
séparer.
J'espère que c'est compréhensible. :~