Tri en lisant le nombre à l'envers

Le
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. :~
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #19515631
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" 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. :~
MichDenis
Le #19515611
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" #
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" 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. :~
Jac
Le #19521451
… 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. :~


Péhemme
Le #19628061
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" 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" 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" 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. :~



MichDenis
Le #19628261
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"
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" 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" 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" 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. :~



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


"MichDenis" 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"
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" 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" 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" 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. :~






Publicité
Poster une réponse
Anonyme