Trier suivant un caractère

Bonjour à toutes et tous,

J'ai récupéré ce bout de code sur internet qui permet de trier des données d'après un caractère.

Mon souci, c'est que les éléments contenant ce caractère sont placés à la fin. Ce que je souhaiterais, c'est qu'ils soient placés au début.

Merci d'avance

Sub TrierSiContientCaractere()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim j As Long
    Dim temp As String
    Dim charToFind As String

    ' Définir la feuille de calcul et le caractère à rechercher
    Set ws = ThisWorkbook.Sheets("Feuil1")
    charToFind = "A" ' Remplacez "A" par le caractère que vous recherchez

    ' Trouver la dernière ligne utilisée dans la colonne A
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' Boucle pour trier les cellules contenant le caractère
    For i = 1 To lastRow - 1
        For j = i + 1 To lastRow
            If InStr(1, ws.Cells(i, 1).Value, charToFind) > 0 And InStr(1, ws.Cells(j, 1).Value, charToFind) = 0 Then
                ' Échanger les valeurs des cellules
                temp = ws.Cells(i, 1).Value
                ws.Cells(i, 1).Value = ws.Cells(j, 1).Value
                ws.Cells(j, 1).Value = temp
            End If
        Next j
    Next i
End Sub

Bonjour,

Un fichier joint sans données confidentielles, avec le résultat attendu serait souhaitable.

Cdlt

Re, je vous fait ça

Re,

Le fichier est joint :

Dans le premier tableau -> les données telles qu'elles arrivent.

Dans les second tableau -> Ce que je souhaite.

l'ordre de tries :

1. les éléments possédant le caractère "|" doivent être tout en haut.

2. tous les éléments sont regroupés par leur matière (colonne J & U)

3. Au sein des mêmes matières, les éléments sont classés suivant leur dénomination

Voilà, Merci d'avance

Pour trier avec les "|" en première ligne, on peut créer une formule qui permettra de monter ces cellules en haut de la feuille, exemple en colonne K:

=NBCAR(A1)-NBCAR(SUBSTITUE(A1;"|";""))

puis appliquer le tri avec comme premier critère cette colonne, c'est pour le tri des autres que je n'ai pas bien compris,

Voici ce que j'ai fait, mais le résultat des matières ne correspond pas à votre 2ème tableau,

image

Re,

En me creusant les méninges, j'ai fini par réussir. Ci-joint le code qui permet de trier la liste suivant les critères mentionnés précédemment.

Sub Tri()

Worksheets("export").Activate

    If Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column - 7) = vbNullString Then ColBloc1 = Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column - 7).Column - 1
    ColBloc2 = ActiveSheet.UsedRange.Columns.Count
    NbLigBloc1 = Cells(1, ColBloc1 + 1).End(xlDown).Row - 1
    NbLigBloc2 = Cells(Rows.Count, "A").End(xlUp).Row

    'ColBloc1 = nombre de colonne utilisées pour les caissons
    'ColBloc2 = nombre de colonne utilisées pour les pièces
    'NbLigBloc1 = nombre de ligne utilisées pour les caissons
    'NbLigBloc2 = nombre de ligne utilisiés pour les pièces

        For i = 1 To NbLigBloc1
            Matière = Cells(i, "J")

                For j = i To NbLigBloc1
                    Matière2 = Cells(j, "J")

                        If j > i + 1 And Matière = Matière2 Then
                            Rows(j & ":" & j).Select
                            Selection.Cut
                            Rows(i + 1 & ":" & i + 1).Select
                            Selection.Insert Shift:=xlDown
                        End If

                Next j

        Next i

'----------Tri des caissons

        For i = NbLigBloc1 + 1 To NbLigBloc2
            Matière = Cells(i, "J")

                For j = i To NbLigBloc2
                    Matière2 = Cells(j, "J")

                         If j > i + 1 And Matière = Matière2 Then
                            Rows(j & ":" & j).Select
                            Selection.Cut
                            Rows(i + 1 & ":" & i + 1).Select
                            Selection.Insert Shift:=xlDown
                        End If

                Next j

        Next i

'----------Tri des matières pièces

        For i = NbLigBloc1 + 1 To NbLigBloc2
            Dénomination = Cells(i, "A")
            Matière = Cells(i, "J")

                For j = i To NbLigBloc2
                    Dénomination2 = Cells(j, "A")
                    Matière2 = Cells(j, "J")

                         If j > i + 1 And Dénomination = Dénomination2 And Matière = Matière2 Then
                            Rows(j & ":" & j).Select
                            Selection.Cut
                            Rows(i + 1 & ":" & i + 1).Select
                            Selection.Insert Shift:=xlDown
                        End If

                Next j

        Next i

'----------Tri des dénominations pièces

End Sub
Rechercher des sujets similaires à "trier suivant caractere"