XL 2019 Tri sans modifier la mise en forme

MarcDJ

XLDnaute Junior
Bonjour,

Je voudrais trier une plage de cellules par Nom, dans laquelle, il y a des cellules vides qui seront remplies plus tard.

Bien sûr la mise en page de la feuille ne doit pas être modifiée.

Merci d'avance pour vos réponses.
 

MarcDJ

XLDnaute Junior
Bonjour fanch55,

Merci pour votre réponse rapide, je joins un fichier.

En fait, j'ai créé une macro, qui remplit les champs Nom, Prénom, Téléphone, Courriel à partir de la feuille "Inscription des participants" non présente..

Ce remplissage se fait à chaque participant introduit dans la liste et doit se trier à chaque remplissage, mais le tri n'est pas fait correctement puisqu'il ne respecte pas les cases sous les renseignements des participants qui devront être remplies par la suite.

Un autre problème me tarabuste également, c'est la bordure rouge qui n'est pas complète pour les participants déjà introduits.

J'en demande beaucoup pour une première intervention, mais je n'ai pas assez d'expérience pour résoudre ce genre de problèmes.

Merci beaucoup.
 

Pièces jointes

  • Tri.xlsx
    114.8 KB · Affichages: 29

TooFatBoy

XLDnaute Barbatruc
On sait donc maintenant ce que tu voulais dire par "garder la mise en page".👍


Je ne sais pas si des cellules fusionnées peuvent aider à résoudre le problème plus simplement.

Avec du VBA "tout" est possible. 😉
En revanche, sans PC, ce n'est pas moi qui pourrait te donner la solution. Désolé.
 
Dernière édition:

fanch55

XLDnaute Barbatruc
Code à exécuter à chaque mise à jour de la liste ( code spécifique au classeur fourni ) :
VB:
Sub Tri_Tableau()
Dim Sh          As Worksheet: Set Sh = ActiveWorkbook.Worksheets("Feuil1")
Dim Start_Row   As Long:      Start_Row = 11
Dim End_Row     As Long:        End_Row = 28

Application.ScreenUpdating = False

    With Sh.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Sh.Columns("C").Rows(Start_Row & ":" & End_Row), _
             SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SortFields.Add Key:=Sh.Columns("D").Rows(Start_Row & ":" & End_Row), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Sh.Columns("A:T").Rows(Start_Row & ":" & End_Row)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    For Each L In Sh.Columns("A:T").Rows(Start_Row & ":" & End_Row).Rows
        If L.Cells(1) = "" Then
            L.Columns("A:D").Borders.LineStyle = xlLineStyleNone
            For Each Cell In L.Columns("E:T").Cells
                Cell.BorderAround LineStyle:=xlContinuous, Weight:=xlThin, ColorIndex:=0
            Next
        Else
            For Each Cell In L.Columns("A:T").Cells
                Cell.BorderAround LineStyle:=xlContinuous, Weight:=xlThick, Color:=vbRed
            Next
        End If
    Next
End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

On trie par bloc de 6 lignes. On ne perd plus les bordures rouges => on garde le formatage (car on ne trie que les valeurs). Cliquez sur l'image (jaune) du tri.
La feuille "Feuil1" n'est là que pour la mise au point. Si la macro fonctionne, vous pouvez la supprimez.

VB:
Sub TestTri()
Dim der&, N&, last&, t, i&, j&, k&, aux, ech As Boolean

   der = Cells(Rows.Count, "c").End(xlUp).Row
   If der <= 11 Then Exit Sub
   t = Range("a11:t" & 10 + 6 * (1 + Int((der - 11) / 6)))
   For i = 1 To UBound(t) - 1 Step 6: t(i, 3) = t(i, 3) & "\" & t(i, 4): Next
   Do
      ech = False
      For i = 1 To UBound(t) - 6 Step 6
         If t(i, 3) > t(i + 6, 3) Then
            ech = True
            For k = 0 To 5
               For j = 1 To UBound(t, 2)
                  aux = t(i + k, j): t(i + k, j) = t(i + k + 6, j): t(i + k + 6, j) = aux
               Next j
            Next k
         End If
      Next i
      If Not ech Then Exit Do
   Loop
   For i = 1 To UBound(t) - 1 Step 6: t(i, 3) = Split(t(i, 3), "\")(0): Next
   Range("a11").Resize(UBound(t), UBound(t, 2)) = t
End Sub
 

Pièces jointes

  • MarcDJ- tric par bloc de lignes- v1.xlsm
    130.1 KB · Affichages: 10
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Je n'avais pas compris qu'il y avait une notion de groupe ....
Re @fanch55 ;)
Sois rassuré. Contrairement à la numérotation de mon fichier téléversé sur le site (v1), j'avais comme toi fait un premier jet sans tenir compte des blocs. Ensuite, j'ai tout réécrit suite à la question de @Marcel32 :) et à la réponse du demandeur.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 331
Membres
103 519
dernier inscrit
Thomas_grc11