Bonjour !
Comment peut-on faire respecter au tri VBA l'ordre des caractères ASCII ?
Par exemple:
Comment trier par ordre alphabétique sur une colonne qui contient des noms,
dont certains sont entre {Accolades}
Le tri met ces personnes en tête, alors que je les désire en fin.
De même, il met systématiquement à la fin, les lignes d'argument vide, alors
que Rien, c'est < à qqch.
Actuellement, j'utilise une colonne auxiliaire pour m'en sortir.
Merci d'avance
Papy Jean
Bonjour !
Comment peut-on faire respecter au tri VBA l'ordre des caractères ASCII ?
Par exemple:
Comment trier par ordre alphabétique sur une colonne qui contient des noms,
dont certains sont entre {Accolades}
Le tri met ces personnes en tête, alors que je les désire en fin.
De même, il met systématiquement à la fin, les lignes d'argument vide, alors
que Rien, c'est < à qqch.
Actuellement, j'utilise une colonne auxiliaire pour m'en sortir.
Merci d'avance
Papy Jean
Bonjour !
Comment peut-on faire respecter au tri VBA l'ordre des caractères ASCII ?
Par exemple:
Comment trier par ordre alphabétique sur une colonne qui contient des noms,
dont certains sont entre {Accolades}
Le tri met ces personnes en tête, alors que je les désire en fin.
De même, il met systématiquement à la fin, les lignes d'argument vide, alors
que Rien, c'est < à qqch.
Actuellement, j'utilise une colonne auxiliaire pour m'en sortir.
Merci d'avance
Papy Jean
Bonjour,
Voici un code qui peut-être va solutionner votre problème.
ATTENTION: testez sur une copie de votre classeur.
CELA FAIT:
1) On monte dans un variant simulant un tableau VB toutes
les valeurs de la plage préselectionnée au moyen de l'InputBox
2) On balaie les valeurs et on leur octroie la chaîne {1000 + la valeur
ASCII
de l'initiale } en la concaténant devant. Ouf!
Ex: TOTO (dont l'Asc de l'initiale "T" est 84) donne 1084TOTO
3) On inscrit le variant dans la plage concernée et on effectue un tri
4) On remonte la plage concernée dans le variant et, à la suite d'un
balayage, on retire les 4 premiers caractères.
5) On réinscrit le variant dans la plage concernée et on a le résultat.
'*****************************
Option Explicit
Sub TriAscendASCII()
Dim R As Range
Dim var
Dim i&
Dim Col&
Dim Lig&
Dim A$
On Error GoTo Erreur
Set R = Application.InputBox(prompt:= _
"Veuillez sélectionner la plage à trier" & _
vbCrLf & "(uniquement sur une colonne)", _
Title:="Tri par ordre ASCII", Type:=8)
On Error GoTo 0
If R.Columns.Count > 1 Then
MsgBox "Veuillez ne sélectionner qu'une seule colonne"
Exit Sub
End If
var = R
For i& = 1 To UBound(var, 1)
If Not IsEmpty(var(i&, 1)) Then
var(i&, 1) = 1000 + Asc(var(i&, 1)) & var(i&, 1)
Else
var(i&, 1) = 1000 & var(i&, 1)
End If
Next i&
R = var
A$ = R.Address(ReferenceStyle:=xlR1C1)
Lig& = CLng(Mid(A$, 2, InStr(1, A$, "C") - 2))
A$ = Mid(A$, 1, InStr(1, A$, ":") - 1)
Col& = CLng(Mid(A$, InStr(1, A$, "C") + 1))
R.Sort Key1:=Range(Cells(Lig&, Col&), Cells(Lig&, Col&)), _
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, _
Orientation:=xlTopToBottom
var = R
For i& = 1 To UBound(var, 1)
var(i&, 1) = Mid(var(i&, 1), 5)
Next i&
R = var
Erreur:
End Sub
'*****************************
Est-ce que ça vous convient ?
PMO
Patrick MorangeBonjour !
Comment peut-on faire respecter au tri VBA l'ordre des caractères ASCII ?
Par exemple:
Comment trier par ordre alphabétique sur une colonne qui contient des
noms,
dont certains sont entre {Accolades}
Le tri met ces personnes en tête, alors que je les désire en fin.
De même, il met systématiquement à la fin, les lignes d'argument vide,
alors
que Rien, c'est < à qqch.
Actuellement, j'utilise une colonne auxiliaire pour m'en sortir.
Merci d'avance
Papy Jean
Bonjour,
Voici un code qui peut-être va solutionner votre problème.
ATTENTION: testez sur une copie de votre classeur.
CELA FAIT:
1) On monte dans un variant simulant un tableau VB toutes
les valeurs de la plage préselectionnée au moyen de l'InputBox
2) On balaie les valeurs et on leur octroie la chaîne {1000 + la valeur
ASCII
de l'initiale } en la concaténant devant. Ouf!
Ex: TOTO (dont l'Asc de l'initiale "T" est 84) donne 1084TOTO
3) On inscrit le variant dans la plage concernée et on effectue un tri
4) On remonte la plage concernée dans le variant et, à la suite d'un
balayage, on retire les 4 premiers caractères.
5) On réinscrit le variant dans la plage concernée et on a le résultat.
'*****************************
Option Explicit
Sub TriAscendASCII()
Dim R As Range
Dim var
Dim i&
Dim Col&
Dim Lig&
Dim A$
On Error GoTo Erreur
Set R = Application.InputBox(prompt:= _
"Veuillez sélectionner la plage à trier" & _
vbCrLf & "(uniquement sur une colonne)", _
Title:="Tri par ordre ASCII", Type:=8)
On Error GoTo 0
If R.Columns.Count > 1 Then
MsgBox "Veuillez ne sélectionner qu'une seule colonne"
Exit Sub
End If
var = R
For i& = 1 To UBound(var, 1)
If Not IsEmpty(var(i&, 1)) Then
var(i&, 1) = 1000 + Asc(var(i&, 1)) & var(i&, 1)
Else
var(i&, 1) = 1000 & var(i&, 1)
End If
Next i&
R = var
A$ = R.Address(ReferenceStyle:=xlR1C1)
Lig& = CLng(Mid(A$, 2, InStr(1, A$, "C") - 2))
A$ = Mid(A$, 1, InStr(1, A$, ":") - 1)
Col& = CLng(Mid(A$, InStr(1, A$, "C") + 1))
R.Sort Key1:=Range(Cells(Lig&, Col&), Cells(Lig&, Col&)), _
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, _
Orientation:=xlTopToBottom
var = R
For i& = 1 To UBound(var, 1)
var(i&, 1) = Mid(var(i&, 1), 5)
Next i&
R = var
Erreur:
End Sub
'*****************************
Est-ce que ça vous convient ?
PMO
Patrick Morange
Bonjour !
Comment peut-on faire respecter au tri VBA l'ordre des caractères ASCII ?
Par exemple:
Comment trier par ordre alphabétique sur une colonne qui contient des
noms,
dont certains sont entre {Accolades}
Le tri met ces personnes en tête, alors que je les désire en fin.
De même, il met systématiquement à la fin, les lignes d'argument vide,
alors
que Rien, c'est < à qqch.
Actuellement, j'utilise une colonne auxiliaire pour m'en sortir.
Merci d'avance
Papy Jean
Bonjour,
Voici un code qui peut-être va solutionner votre problème.
ATTENTION: testez sur une copie de votre classeur.
CELA FAIT:
1) On monte dans un variant simulant un tableau VB toutes
les valeurs de la plage préselectionnée au moyen de l'InputBox
2) On balaie les valeurs et on leur octroie la chaîne {1000 + la valeur
ASCII
de l'initiale } en la concaténant devant. Ouf!
Ex: TOTO (dont l'Asc de l'initiale "T" est 84) donne 1084TOTO
3) On inscrit le variant dans la plage concernée et on effectue un tri
4) On remonte la plage concernée dans le variant et, à la suite d'un
balayage, on retire les 4 premiers caractères.
5) On réinscrit le variant dans la plage concernée et on a le résultat.
'*****************************
Option Explicit
Sub TriAscendASCII()
Dim R As Range
Dim var
Dim i&
Dim Col&
Dim Lig&
Dim A$
On Error GoTo Erreur
Set R = Application.InputBox(prompt:= _
"Veuillez sélectionner la plage à trier" & _
vbCrLf & "(uniquement sur une colonne)", _
Title:="Tri par ordre ASCII", Type:=8)
On Error GoTo 0
If R.Columns.Count > 1 Then
MsgBox "Veuillez ne sélectionner qu'une seule colonne"
Exit Sub
End If
var = R
For i& = 1 To UBound(var, 1)
If Not IsEmpty(var(i&, 1)) Then
var(i&, 1) = 1000 + Asc(var(i&, 1)) & var(i&, 1)
Else
var(i&, 1) = 1000 & var(i&, 1)
End If
Next i&
R = var
A$ = R.Address(ReferenceStyle:=xlR1C1)
Lig& = CLng(Mid(A$, 2, InStr(1, A$, "C") - 2))
A$ = Mid(A$, 1, InStr(1, A$, ":") - 1)
Col& = CLng(Mid(A$, InStr(1, A$, "C") + 1))
R.Sort Key1:=Range(Cells(Lig&, Col&), Cells(Lig&, Col&)), _
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, _
Orientation:=xlTopToBottom
var = R
For i& = 1 To UBound(var, 1)
var(i&, 1) = Mid(var(i&, 1), 5)
Next i&
R = var
Erreur:
End Sub
'*****************************
Est-ce que ça vous convient ?
PMO
Patrick MorangeBonjour !
Comment peut-on faire respecter au tri VBA l'ordre des caractères ASCII ?
Par exemple:
Comment trier par ordre alphabétique sur une colonne qui contient des
noms,
dont certains sont entre {Accolades}
Le tri met ces personnes en tête, alors que je les désire en fin.
De même, il met systématiquement à la fin, les lignes d'argument vide,
alors
que Rien, c'est < à qqch.
Actuellement, j'utilise une colonne auxiliaire pour m'en sortir.
Merci d'avance
Papy Jean
Bonjour !
Merci de votre réponse,
J'avais fait quelque chose de voisin, mais j'espérais qu'il y aurait
un des
paramètres de SORT qui permettrait de trier dans l'ordre des codes
ASCII.
Salutations
Papy Jean
"PMO" a écrit dans le message de
news:
Bonjour,
Voici un code qui peut-être va solutionner votre problème.
ATTENTION: testez sur une copie de votre classeur.
CELA FAIT:
1) On monte dans un variant simulant un tableau VB toutes
les valeurs de la plage préselectionnée au moyen de l'InputBox
2) On balaie les valeurs et on leur octroie la chaîne {1000 + la
valeur
ASCII
de l'initiale } en la concaténant devant. Ouf!
Ex: TOTO (dont l'Asc de l'initiale "T" est 84) donne
1084TOTO
3) On inscrit le variant dans la plage concernée et on effectue un
tri
4) On remonte la plage concernée dans le variant et, à la suite
d'un
balayage, on retire les 4 premiers caractères.
5) On réinscrit le variant dans la plage concernée et on a le
résultat.
'*****************************
Option Explicit
Sub TriAscendASCII()
Dim R As Range
Dim var
Dim i&
Dim Col&
Dim Lig&
Dim A$
On Error GoTo Erreur
Set R = Application.InputBox(prompt:= _
"Veuillez sélectionner la plage à trier" & _
vbCrLf & "(uniquement sur une colonne)", _
Title:="Tri par ordre ASCII", Type:=8)
On Error GoTo 0
If R.Columns.Count > 1 Then
MsgBox "Veuillez ne sélectionner qu'une seule colonne"
Exit Sub
End If
var = R
For i& = 1 To UBound(var, 1)
If Not IsEmpty(var(i&, 1)) Then
var(i&, 1) = 1000 + Asc(var(i&, 1)) & var(i&, 1)
Else
var(i&, 1) = 1000 & var(i&, 1)
End If
Next i&
R = var
A$ = R.Address(ReferenceStyle:=xlR1C1)
Lig& = CLng(Mid(A$, 2, InStr(1, A$, "C") - 2))
A$ = Mid(A$, 1, InStr(1, A$, ":") - 1)
Col& = CLng(Mid(A$, InStr(1, A$, "C") + 1))
R.Sort Key1:=Range(Cells(Lig&, Col&), Cells(Lig&, Col&)), _
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, _
Orientation:=xlTopToBottom
var = R
For i& = 1 To UBound(var, 1)
var(i&, 1) = Mid(var(i&, 1), 5)
Next i&
R = var
Erreur:
End Sub
'*****************************
Est-ce que ça vous convient ?
PMO
Patrick MorangeBonjour !
Comment peut-on faire respecter au tri VBA l'ordre des caractères
ASCII ?
Par exemple:
Comment trier par ordre alphabétique sur une colonne qui contient
des
noms,
dont certains sont entre {Accolades}
Le tri met ces personnes en tête, alors que je les désire en fin.
De même, il met systématiquement à la fin, les lignes d'argument
vide,
alors
que Rien, c'est < à qqch.
Actuellement, j'utilise une colonne auxiliaire pour m'en sortir.
Merci d'avance
Papy Jean
Bonjour !
Merci de votre réponse,
J'avais fait quelque chose de voisin, mais j'espérais qu'il y aurait
un des
paramètres de SORT qui permettrait de trier dans l'ordre des codes
ASCII.
Salutations
Papy Jean
"PMO" <PMO@discussions.microsoft.com> a écrit dans le message de
news:
9B23F7F6-D0A5-45B2-8B98-D038111DA575@microsoft.com...
Bonjour,
Voici un code qui peut-être va solutionner votre problème.
ATTENTION: testez sur une copie de votre classeur.
CELA FAIT:
1) On monte dans un variant simulant un tableau VB toutes
les valeurs de la plage préselectionnée au moyen de l'InputBox
2) On balaie les valeurs et on leur octroie la chaîne {1000 + la
valeur
ASCII
de l'initiale } en la concaténant devant. Ouf!
Ex: TOTO (dont l'Asc de l'initiale "T" est 84) donne
1084TOTO
3) On inscrit le variant dans la plage concernée et on effectue un
tri
4) On remonte la plage concernée dans le variant et, à la suite
d'un
balayage, on retire les 4 premiers caractères.
5) On réinscrit le variant dans la plage concernée et on a le
résultat.
'*****************************
Option Explicit
Sub TriAscendASCII()
Dim R As Range
Dim var
Dim i&
Dim Col&
Dim Lig&
Dim A$
On Error GoTo Erreur
Set R = Application.InputBox(prompt:= _
"Veuillez sélectionner la plage à trier" & _
vbCrLf & "(uniquement sur une colonne)", _
Title:="Tri par ordre ASCII", Type:=8)
On Error GoTo 0
If R.Columns.Count > 1 Then
MsgBox "Veuillez ne sélectionner qu'une seule colonne"
Exit Sub
End If
var = R
For i& = 1 To UBound(var, 1)
If Not IsEmpty(var(i&, 1)) Then
var(i&, 1) = 1000 + Asc(var(i&, 1)) & var(i&, 1)
Else
var(i&, 1) = 1000 & var(i&, 1)
End If
Next i&
R = var
A$ = R.Address(ReferenceStyle:=xlR1C1)
Lig& = CLng(Mid(A$, 2, InStr(1, A$, "C") - 2))
A$ = Mid(A$, 1, InStr(1, A$, ":") - 1)
Col& = CLng(Mid(A$, InStr(1, A$, "C") + 1))
R.Sort Key1:=Range(Cells(Lig&, Col&), Cells(Lig&, Col&)), _
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, _
Orientation:=xlTopToBottom
var = R
For i& = 1 To UBound(var, 1)
var(i&, 1) = Mid(var(i&, 1), 5)
Next i&
R = var
Erreur:
End Sub
'*****************************
Est-ce que ça vous convient ?
PMO
Patrick Morange
Bonjour !
Comment peut-on faire respecter au tri VBA l'ordre des caractères
ASCII ?
Par exemple:
Comment trier par ordre alphabétique sur une colonne qui contient
des
noms,
dont certains sont entre {Accolades}
Le tri met ces personnes en tête, alors que je les désire en fin.
De même, il met systématiquement à la fin, les lignes d'argument
vide,
alors
que Rien, c'est < à qqch.
Actuellement, j'utilise une colonne auxiliaire pour m'en sortir.
Merci d'avance
Papy Jean
Bonjour !
Merci de votre réponse,
J'avais fait quelque chose de voisin, mais j'espérais qu'il y aurait
un des
paramètres de SORT qui permettrait de trier dans l'ordre des codes
ASCII.
Salutations
Papy Jean
"PMO" a écrit dans le message de
news:
Bonjour,
Voici un code qui peut-être va solutionner votre problème.
ATTENTION: testez sur une copie de votre classeur.
CELA FAIT:
1) On monte dans un variant simulant un tableau VB toutes
les valeurs de la plage préselectionnée au moyen de l'InputBox
2) On balaie les valeurs et on leur octroie la chaîne {1000 + la
valeur
ASCII
de l'initiale } en la concaténant devant. Ouf!
Ex: TOTO (dont l'Asc de l'initiale "T" est 84) donne
1084TOTO
3) On inscrit le variant dans la plage concernée et on effectue un
tri
4) On remonte la plage concernée dans le variant et, à la suite
d'un
balayage, on retire les 4 premiers caractères.
5) On réinscrit le variant dans la plage concernée et on a le
résultat.
'*****************************
Option Explicit
Sub TriAscendASCII()
Dim R As Range
Dim var
Dim i&
Dim Col&
Dim Lig&
Dim A$
On Error GoTo Erreur
Set R = Application.InputBox(prompt:= _
"Veuillez sélectionner la plage à trier" & _
vbCrLf & "(uniquement sur une colonne)", _
Title:="Tri par ordre ASCII", Type:=8)
On Error GoTo 0
If R.Columns.Count > 1 Then
MsgBox "Veuillez ne sélectionner qu'une seule colonne"
Exit Sub
End If
var = R
For i& = 1 To UBound(var, 1)
If Not IsEmpty(var(i&, 1)) Then
var(i&, 1) = 1000 + Asc(var(i&, 1)) & var(i&, 1)
Else
var(i&, 1) = 1000 & var(i&, 1)
End If
Next i&
R = var
A$ = R.Address(ReferenceStyle:=xlR1C1)
Lig& = CLng(Mid(A$, 2, InStr(1, A$, "C") - 2))
A$ = Mid(A$, 1, InStr(1, A$, ":") - 1)
Col& = CLng(Mid(A$, InStr(1, A$, "C") + 1))
R.Sort Key1:=Range(Cells(Lig&, Col&), Cells(Lig&, Col&)), _
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, _
Orientation:=xlTopToBottom
var = R
For i& = 1 To UBound(var, 1)
var(i&, 1) = Mid(var(i&, 1), 5)
Next i&
R = var
Erreur:
End Sub
'*****************************
Est-ce que ça vous convient ?
PMO
Patrick MorangeBonjour !
Comment peut-on faire respecter au tri VBA l'ordre des caractères
ASCII ?
Par exemple:
Comment trier par ordre alphabétique sur une colonne qui contient
des
noms,
dont certains sont entre {Accolades}
Le tri met ces personnes en tête, alors que je les désire en fin.
De même, il met systématiquement à la fin, les lignes d'argument
vide,
alors
que Rien, c'est < à qqch.
Actuellement, j'utilise une colonne auxiliaire pour m'en sortir.
Merci d'avance
Papy Jean
Bonjour,
Si j'ai bien compris
Option compare binary
dans l'entête du module.
"Papy Jean" a écrit dans le message de
news:41b5bf2f$0$2769$Bonjour !
Merci de votre réponse,
J'avais fait quelque chose de voisin, mais j'espérais qu'il y aurait
un desparamètres de SORT qui permettrait de trier dans l'ordre des codes
ASCII.
Salutations
Papy Jean
"PMO" a écrit dans le message de
news:Bonjour,
Voici un code qui peut-être va solutionner votre problème.
ATTENTION: testez sur une copie de votre classeur.
CELA FAIT:
1) On monte dans un variant simulant un tableau VB toutes
les valeurs de la plage préselectionnée au moyen de l'InputBox
2) On balaie les valeurs et on leur octroie la chaîne {1000 + la
valeurASCII
de l'initiale } en la concaténant devant. Ouf!
Ex: TOTO (dont l'Asc de l'initiale "T" est 84) donne
1084TOTO3) On inscrit le variant dans la plage concernée et on effectue un
tri4) On remonte la plage concernée dans le variant et, à la suite
d'unbalayage, on retire les 4 premiers caractères.
5) On réinscrit le variant dans la plage concernée et on a le
résultat.
'*****************************
Option Explicit
Sub TriAscendASCII()
Dim R As Range
Dim var
Dim i&
Dim Col&
Dim Lig&
Dim A$
On Error GoTo Erreur
Set R = Application.InputBox(prompt:= _
"Veuillez sélectionner la plage à trier" & _
vbCrLf & "(uniquement sur une colonne)", _
Title:="Tri par ordre ASCII", Type:=8)
On Error GoTo 0
If R.Columns.Count > 1 Then
MsgBox "Veuillez ne sélectionner qu'une seule colonne"
Exit Sub
End If
var = R
For i& = 1 To UBound(var, 1)
If Not IsEmpty(var(i&, 1)) Then
var(i&, 1) = 1000 + Asc(var(i&, 1)) & var(i&, 1)
Else
var(i&, 1) = 1000 & var(i&, 1)
End If
Next i&
R = var
A$ = R.Address(ReferenceStyle:=xlR1C1)
Lig& = CLng(Mid(A$, 2, InStr(1, A$, "C") - 2))
A$ = Mid(A$, 1, InStr(1, A$, ":") - 1)
Col& = CLng(Mid(A$, InStr(1, A$, "C") + 1))
R.Sort Key1:=Range(Cells(Lig&, Col&), Cells(Lig&, Col&)), _
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, _
Orientation:=xlTopToBottom
var = R
For i& = 1 To UBound(var, 1)
var(i&, 1) = Mid(var(i&, 1), 5)
Next i&
R = var
Erreur:
End Sub
'*****************************
Est-ce que ça vous convient ?
PMO
Patrick MorangeBonjour !
Comment peut-on faire respecter au tri VBA l'ordre des caractères
ASCII ?
Par exemple:
Comment trier par ordre alphabétique sur une colonne qui contient
desnoms,
dont certains sont entre {Accolades}
Le tri met ces personnes en tête, alors que je les désire en fin.
De même, il met systématiquement à la fin, les lignes d'argument
vide,alors
que Rien, c'est < à qqch.
Actuellement, j'utilise une colonne auxiliaire pour m'en sortir.
Merci d'avance
Papy Jean
Bonjour,
Si j'ai bien compris
Option compare binary
dans l'entête du module.
"Papy Jean" <aj.azerty@wanadoo.fr> a écrit dans le message de
news:41b5bf2f$0$2769$8fcfb975@news.wanadoo.fr...
Bonjour !
Merci de votre réponse,
J'avais fait quelque chose de voisin, mais j'espérais qu'il y aurait
un des
paramètres de SORT qui permettrait de trier dans l'ordre des codes
ASCII.
Salutations
Papy Jean
"PMO" <PMO@discussions.microsoft.com> a écrit dans le message de
news:
9B23F7F6-D0A5-45B2-8B98-D038111DA575@microsoft.com...
Bonjour,
Voici un code qui peut-être va solutionner votre problème.
ATTENTION: testez sur une copie de votre classeur.
CELA FAIT:
1) On monte dans un variant simulant un tableau VB toutes
les valeurs de la plage préselectionnée au moyen de l'InputBox
2) On balaie les valeurs et on leur octroie la chaîne {1000 + la
valeur
ASCII
de l'initiale } en la concaténant devant. Ouf!
Ex: TOTO (dont l'Asc de l'initiale "T" est 84) donne
1084TOTO
3) On inscrit le variant dans la plage concernée et on effectue un
tri
4) On remonte la plage concernée dans le variant et, à la suite
d'un
balayage, on retire les 4 premiers caractères.
5) On réinscrit le variant dans la plage concernée et on a le
résultat.
'*****************************
Option Explicit
Sub TriAscendASCII()
Dim R As Range
Dim var
Dim i&
Dim Col&
Dim Lig&
Dim A$
On Error GoTo Erreur
Set R = Application.InputBox(prompt:= _
"Veuillez sélectionner la plage à trier" & _
vbCrLf & "(uniquement sur une colonne)", _
Title:="Tri par ordre ASCII", Type:=8)
On Error GoTo 0
If R.Columns.Count > 1 Then
MsgBox "Veuillez ne sélectionner qu'une seule colonne"
Exit Sub
End If
var = R
For i& = 1 To UBound(var, 1)
If Not IsEmpty(var(i&, 1)) Then
var(i&, 1) = 1000 + Asc(var(i&, 1)) & var(i&, 1)
Else
var(i&, 1) = 1000 & var(i&, 1)
End If
Next i&
R = var
A$ = R.Address(ReferenceStyle:=xlR1C1)
Lig& = CLng(Mid(A$, 2, InStr(1, A$, "C") - 2))
A$ = Mid(A$, 1, InStr(1, A$, ":") - 1)
Col& = CLng(Mid(A$, InStr(1, A$, "C") + 1))
R.Sort Key1:=Range(Cells(Lig&, Col&), Cells(Lig&, Col&)), _
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, _
Orientation:=xlTopToBottom
var = R
For i& = 1 To UBound(var, 1)
var(i&, 1) = Mid(var(i&, 1), 5)
Next i&
R = var
Erreur:
End Sub
'*****************************
Est-ce que ça vous convient ?
PMO
Patrick Morange
Bonjour !
Comment peut-on faire respecter au tri VBA l'ordre des caractères
ASCII ?
Par exemple:
Comment trier par ordre alphabétique sur une colonne qui contient
des
noms,
dont certains sont entre {Accolades}
Le tri met ces personnes en tête, alors que je les désire en fin.
De même, il met systématiquement à la fin, les lignes d'argument
vide,
alors
que Rien, c'est < à qqch.
Actuellement, j'utilise une colonne auxiliaire pour m'en sortir.
Merci d'avance
Papy Jean
Bonjour,
Si j'ai bien compris
Option compare binary
dans l'entête du module.
"Papy Jean" a écrit dans le message de
news:41b5bf2f$0$2769$Bonjour !
Merci de votre réponse,
J'avais fait quelque chose de voisin, mais j'espérais qu'il y aurait
un desparamètres de SORT qui permettrait de trier dans l'ordre des codes
ASCII.
Salutations
Papy Jean
"PMO" a écrit dans le message de
news:Bonjour,
Voici un code qui peut-être va solutionner votre problème.
ATTENTION: testez sur une copie de votre classeur.
CELA FAIT:
1) On monte dans un variant simulant un tableau VB toutes
les valeurs de la plage préselectionnée au moyen de l'InputBox
2) On balaie les valeurs et on leur octroie la chaîne {1000 + la
valeurASCII
de l'initiale } en la concaténant devant. Ouf!
Ex: TOTO (dont l'Asc de l'initiale "T" est 84) donne
1084TOTO3) On inscrit le variant dans la plage concernée et on effectue un
tri4) On remonte la plage concernée dans le variant et, à la suite
d'unbalayage, on retire les 4 premiers caractères.
5) On réinscrit le variant dans la plage concernée et on a le
résultat.
'*****************************
Option Explicit
Sub TriAscendASCII()
Dim R As Range
Dim var
Dim i&
Dim Col&
Dim Lig&
Dim A$
On Error GoTo Erreur
Set R = Application.InputBox(prompt:= _
"Veuillez sélectionner la plage à trier" & _
vbCrLf & "(uniquement sur une colonne)", _
Title:="Tri par ordre ASCII", Type:=8)
On Error GoTo 0
If R.Columns.Count > 1 Then
MsgBox "Veuillez ne sélectionner qu'une seule colonne"
Exit Sub
End If
var = R
For i& = 1 To UBound(var, 1)
If Not IsEmpty(var(i&, 1)) Then
var(i&, 1) = 1000 + Asc(var(i&, 1)) & var(i&, 1)
Else
var(i&, 1) = 1000 & var(i&, 1)
End If
Next i&
R = var
A$ = R.Address(ReferenceStyle:=xlR1C1)
Lig& = CLng(Mid(A$, 2, InStr(1, A$, "C") - 2))
A$ = Mid(A$, 1, InStr(1, A$, ":") - 1)
Col& = CLng(Mid(A$, InStr(1, A$, "C") + 1))
R.Sort Key1:=Range(Cells(Lig&, Col&), Cells(Lig&, Col&)), _
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, _
Orientation:=xlTopToBottom
var = R
For i& = 1 To UBound(var, 1)
var(i&, 1) = Mid(var(i&, 1), 5)
Next i&
R = var
Erreur:
End Sub
'*****************************
Est-ce que ça vous convient ?
PMO
Patrick MorangeBonjour !
Comment peut-on faire respecter au tri VBA l'ordre des caractères
ASCII ?
Par exemple:
Comment trier par ordre alphabétique sur une colonne qui contient
desnoms,
dont certains sont entre {Accolades}
Le tri met ces personnes en tête, alors que je les désire en fin.
De même, il met systématiquement à la fin, les lignes d'argument
vide,alors
que Rien, c'est < à qqch.
Actuellement, j'utilise une colonne auxiliaire pour m'en sortir.
Merci d'avance
Papy Jean
J'ai honte, mais j'avais trompé: ça marche bien
Encore merci
J'ai honte, mais j'avais trompé: ça marche bien
Encore merci
J'ai honte, mais j'avais trompé: ça marche bien
Encore merci