XL 2021 tri par lignes

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

rastafouette

XLDnaute Occasionnel
Bonjour à tous,

Voilà, j'ai une macro qui remplit un tableau avec les noms sur la ligne 5 et en dessous de chaque nom, ce que chacun a selectionné, ou pas (=> certaines colonnes ont un nom mais sont vides)
=> Je voudrais trier comme ça : que les colonnes non vides se regroupent sur la gauche, en ordre alphabetique, et les autres ensuite.
Le tout dans une macro

Pour le detail supplémentaire, dans le deroulement de ma macro, lorsqu'un nom s'ajoute, je voudrais l'ajouter en fin de ligne 5, sur la dernière cellule vide, avec ses choix en dessous, Puis ensuite, trier comme ci-dessus. Et ça je tourne autour sans y arriver : simplement trouver la dernière cellule vide de la ligne.

Merci d'avance de votre aide !
 

Pièces jointes

Bonjour,
Un essai
VB:
Sub Tri()
Dim Plg As Range
Dim DerCol As Long, DerLig As Long
Application.ScreenUpdating = False
DerCol = Cells(5, Columns.Count).End(xlToLeft).Column - 6
DerLig = Cells(Rows.Count, "B").End(xlUp).Row - 3
Set Plg = Range("G4").Resize(DerLig, DerCol)
Plg.Resize(1).FormulaR1C1 = "=COUNTA(R[2]C:R[" & DerLig - 1 & "]C)>0"
With ActiveWorkbook.Worksheets("aaaa").Sort
    .SortFields.Clear
    .SortFields.Add2 Key:=Plg.Resize(1), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    .SortFields.Add2 Key:=Plg.Offset(1).Resize(1), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SetRange Plg
    .Header = xlYes
    .Orientation = xlLeftToRight
    .Apply
End With
Plg.Resize(1).ClearContents
End Sub
Bon dimanche
 
Dernière édition:
Re,
Pour la macro du post #3, c'est une macro classique à mettre dans un module standard. Elle s'adapte au tableau quelle que soient le nombre de lignes et colonnes.
Juste une question : en colonne F pourqioi faire :
VB:
=SOMME(DECALER($E6;;2;):DECALER($E6;;NBVAL($G$5:$AZ$5)+1;))
au lieu de
=SOMME(G6:AZ6)
car comme vous utilisez déjà AZ5 cela signifie qu'il n'y a rien à droite du tableau.
 
Bonjour à tous,

Comme Cousinhub mais en un peu plus simple :
VB:
Sub TriHorizontal()
Dim dercel As Range
Set dercel = Cells.SpecialCells(xlCellTypeLastCell)
With Range([G4], dercel)
    .Rows(1) = "=SIGN(SUM(R[1]C:R" & dercel.Row & "C ))"
    .Sort .Rows(1), xlDescending, .Rows(2), , xlAscending, Header:=xlNo, Orientation:=2
    .Rows(1).ClearContents 'RAZ
End With
End Sub
J'ai nettoyé le UsedRange pour que la dernière cellule soit W18, ce n'est pas indispensable mais c'est plus propre.

A+
 

Pièces jointes

Dernière édition:
Pour la question, j'ai simplifié mon tableau d'exemple avec $AZ$5. Cette formule était utile l'an dernier mais effectivememnt, avec les changememtns que je fais en ce moment, je pourrai changer.
J'ai encore des choses sous le tableau donc je dois adapter vos solutions.
Je suis partie pour adapter la solution de Cousinhub car j'avoue que je ne pige pas trop la tienne sylvanu.
 
Bon avec cette solution vous pouvez mettre tout ce que vous voulez sous le tableau.

La macro réunit toutes les cellules de la feuille colorées en bleu :
VB:
Sub TriHorizontal()
Dim c As Range, P As Range
Application.ScreenUpdating = False
For Each c In ActiveSheet.UsedRange
    If c.Interior.Color = RGB(217, 225, 242) Then Set P = Union(IIf(P Is Nothing, c, P), c)
Next
Set P = Union(P.Rows(0), P)
P.Rows(1) = "=SIGN(SUM(R[1]C:R" & P.Row + P.Rows.Count - 1 & "C ))"
P.Sort P.Rows(1), xlDescending, P.Rows(2), , xlAscending, Header:=xlNo, Orientation:=2
P.Rows(1).ClearContents 'RAZ
End Sub
Edit : j'ai ajouté Application.ScreenUpdating = False
 

Pièces jointes

Dernière édition:
Pour être plus précise
La hauteur du tableau sera limitée à la colonne B et aux codes, si la colonne B est remplie dans cette zone. Et la longueur à droite au nombre d'adhérents, le jour où on arrive à 50 je sabre le champagne.
La ligne en dessous, ce sont des sommeprod avec des mfc qui verifient les prix.

J'améliore mon fichier d'année en année (une grosse userform, plusieurs onglets...) mais j'ai sans doute pas mal de mini usine à gaz dans tout ça, j'essaie de simplifier en furetant ici, même si ce n'est pas évident de trouver dans le flot de messages.
Mon but est surtout de faire un fichier qui se modifie tout seul selon les options des adhérents, pour que ça puisse conitnuer à fonctionner tout seul, même quand je ne serai pas là, donc sans aller changer les numéros de colonne et autre dans le code.

En exemple d'usine à gaz, j'ai une partie de mon usf qui est très longue en traitement alors qu'objectivement elle ne fait pas grand chose. Auriez vous qques posts qui traiteraient de ça par hasard ?
 
Bonjour à tous,

Je viens vers vous pour un complément sur mon fichier.
Voilà. En plus de votre aide pour le tri, (encore merci !!) j'ai rajouté un petit truc dans mon code pour que les nouvelles personnes se rajoutent automatiquement avec leurs données.
Ce que je cherche à faire, que je voudrais automatique (via une formule(?) mais je ne trouve pas), c'est le fait de passer du tableau bleu au tableau vert en dessous ( que je mets dans un autre onglet, dans les faits), c'est à dire, qque soit ce qu'on modifie/rajoute dans le bleu, le vert se mets à jour (ordre alphabetique des personnes).

Est ce que, à tout hasard, vous auriez une petite idée ?
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
548
Réponses
7
Affichages
968
Réponses
2
Affichages
1 K
Retour