Tri dans une cellule

Bjr,

J'utilise Excel 2013.

J'aimerais trier des nombres (5 maximum) dans une cellule avec un tiret (-) comme séparateur.

Les cellules se trouvent dans la colonne A300.

Voici un exemple de ce que je voudrais :

18-1-15-6-2

1-2-6-15-18

J'ai récupéré un code mais je n'arrive pas à l'adapter !

Est-ce que quelqu'un pourrait m'aider s'il vous plaît.

Merci

Voici le code que j'ai récupéré

Function trierlacellule(u As Range)
tableau = Split(u, "-")
NbMin = LBound(tableau)
For var1 = UBound(tableau) To LBound(tableau) Step -1
    For var2 = NbMin + 1 To var1
        If tableau(var2 - 1) > tableau(var2) Then
vartemp = tableau(var2 - 1)
            tableau(var2 - 1) = tableau(var2)
            tableau(var2) = vartemp
        End If
    Next var2
Next var1
For i = 0 To UBound(tableau)
j = j & "-" & tableau(i)
Next i
trierlacellule = Mid(j, 2)
End Function

Bonjour,

cette fonction trie le contenu de la cellule donnée en paramètre.

Qu'est-ce que tu voudrais y changer ?

Bjr,

J'aimerais pouvoir faire un tri dans la colonne A 300, à l'aide d'un macro.

J'ai entré ce code mais ça ne fonctionne pas !

Merci

bonjour,

fonction personnalisée transformée en macro pour traiter la cellule A300

sub trierlacellule()
tableau = Split(range("A300", "-")
NbMin = LBound(tableau)
For var1 = UBound(tableau) To LBound(tableau) Step -1
    For var2 = NbMin + 1 To var1
        If tableau(var2 - 1)+0 > tableau(var2)+0 Then
vartemp = tableau(var2 - 1)
            tableau(var2 - 1) = tableau(var2)
            tableau(var2) = vartemp
        End If
    Next var2
Next var1
For i = 0 To UBound(tableau)
j = j & "-" & tableau(i)
Next i
range("A300")= Mid(j, 2)
End Function

Bjr,

Je rencontre le même problème qu'avant : erreur de compilation et erreur de syntaxe.

Voici le fichier Excel.

Merci.

17tri-cellule.xlsm (11.28 Ko)

syntaxe corrigée

sub trierlacellule()
tableau = Split(range("A300"), "-")
NbMin = LBound(tableau)
For var1 = UBound(tableau) To LBound(tableau) Step -1
    For var2 = NbMin + 1 To var1
        If tableau(var2 - 1) > tableau(var2) Then
vartemp = tableau(var2 - 1)
            tableau(var2 - 1) = tableau(var2)
            tableau(var2) = vartemp
        End If
    Next var2
Next var1
For i = 0 To UBound(tableau)
j = j & "-" & tableau(i)
Next i
range("A300")= Mid(j, 2)
End sub

Merci ça fonctionne.

Une question sans vouloir abuser de trop abuser. Si jamais par la suite je dois effectuer une modification à toute la colonne. Est-ce bien cette ligne de code que je dois modifier :

tableau = Split(range("A300"), "-")

en

tableau = Split(range("AA"), "-")

Merci

bonjour,

code adapté pour prendre en compte la plage A300:A1000

la macro s'arrête dès qu'une cellule vide est trouvée.

Sub trierlacellule()
For Each c In Range("A300:A1000")
If c = Empty Then Exit For
tableau = Split(c.Value, "-")
NbMin = LBound(tableau)
For var1 = UBound(tableau) To LBound(tableau) Step -1
    For var2 = NbMin + 1 To var1
        If tableau(var2 - 1) > tableau(var2) Then
vartemp = tableau(var2 - 1)
            tableau(var2 - 1) = tableau(var2)
            tableau(var2) = vartemp
        End If
    Next var2
Next var1
For i = 0 To UBound(tableau)
j = j & "-" & tableau(i)
Next i
c.Value = Mid(j, 2)
Next
End Sub

Merci, c'est vraiment sympa.

Bonne journée

Re,

Désolé de vous déranger, mais je n'ai pas vérifié le 2ème code que vous m'aviez créé cet après-midi.

Il ne fonctionne pas. Je voulais un tri par cellule et par colonne, là ce n'est pas le cas. Cela aurait pu être bon si j'avais réussi à faire un collé-copié de la colonne A mais ça ne fonctionne pas non plus !

Si vous avez la gentillesse et le temps disponible de revoir le fichier Excel ci-joint je vous remercie.

Bonne soirée,

Sub trierlacellule()
For Each c In Range("A300:A1000")
If c = Empty Then Exit For
tableau = Split(c.Value, "-")
NbMin = LBound(tableau)
For var1 = UBound(tableau) To LBound(tableau) Step -1
    For var2 = NbMin + 1 To var1
        If tableau(var2 - 1) > tableau(var2) Then
vartemp = tableau(var2 - 1)
            tableau(var2 - 1) = tableau(var2)
            tableau(var2) = vartemp
        End If
    Next var2
Next var1
For i = 0 To UBound(tableau)
j = j & "-" & tableau(i)
Next i
c.Value = Mid(j, 2)
Next
End Subv

bonsoir,

voici le code adapté pour trier aussi les lignes

adapter pl et dl pour définir la plage

Sub trierlacellule()
    Columns(1).Insert shift:=xlToRight
    pl = 300 ' première ligne
    dl = 1000 ' dernière ligne
    For Each c In Range("B" & pl & ":B" & dl)
        If c = Empty Then Exit For
        tableau = Split(c.Value, "-")
        NbMin = LBound(tableau)
        j = ""
        j1 = ""
        For var1 = UBound(tableau) To LBound(tableau) Step -1
            For var2 = NbMin + 1 To var1
                If tableau(var2 - 1) + 0 > tableau(var2) + 0 Then
                    vartemp = tableau(var2 - 1)
                    tableau(var2 - 1) = tableau(var2)
                    tableau(var2) = vartemp
                End If
            Next var2
        Next var1
        For i = 0 To UBound(tableau)
            j = j & "-" & tableau(i)
            j1 = j1 & "-" & Format(tableau(i), "00")
        Next i
        c.Value = Mid(j, 2)
        c.Offset(0, -1) = Mid(j1, 2)
    Next
    Range("A" & pl & ":B" & dl).Sort key1:=Range("A" & pl), order1:=xlAscending, Header:=xlNo
    Columns(1).Delete shift:=xlToLeft
End Sub

Bjr et merci,

J'arriverai à faire avec cette version car j'arrive a faire un collé-copié de la colonne !

Bien que le tri ne s'effectue pas comme il le faudrait.

Je vous laisse le fichier Excel pour que vous puissiez le tester.

Néanmoins cela me conviens et je vous remercie de votre aide, car vous me rendez un très bon service.

Bien amicalement et très bon WK

Merci

Bonjour,

ton fichier est vide(pas de données). qu'est-ce qui ne va pas dans le tri proposé ?

Ah parfait je n'avais pas vue le 2 ème script tout fonctionne parfaitement grand merci.

Bon WK


Pas habitué au forum j'étais resté sur la page 1

Ma bonne conscience m'a indiqué de retourné voir et là j'ai trouvé le bon sript !

Merci.

Rechercher des sujets similaires à "tri"