Tri horizontal en VBA
Bonjour, je débute sur les macros VBA (et sur ce forum) et j'aimerais savoir comment faire un tri horizontal (tri par ligne) par couleur en VBA.
SACHANT QUE :
- Je suis attaché à ce tri horizontal et je ne souhaite pas inverser le sens de mon tableau pour un tri par colonne
- Mon tableau comportera un nombre de colonne variable par ligne
Je connais la manip manuelle pour faire ce tri, du coup j'ai enregistré une macro et j'ai essayé sur une ligne pour voir. J'ai donc effectué la commande Ctrl+Shift+flèche de droite, et fait un tri horizontal sur cette dernière. Et j'obtiens le script suivant :
Sub Macro6()
'
' Macro6 Macro
'
'
Range("B1").Select
Range(Selection, Selection.End(xlToRight)).Select
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add(Range("B1:G1"), _
xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(255, 0 _
, 0)
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add(Range("B1:G1"), _
xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(255, _
192, 0)
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add(Range("B1:G1"), _
xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(255, _
255, 0)
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add(Range("B1:G1"), _
xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(0, 176 _
, 80)
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add(Range("B1:G1"), _
xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(217, _
217, 217)
With ActiveWorkbook.Worksheets("Feuil1").Sort
.SetRange Range("B1:G1")
.Header = xlGuess
.MatchCase = False
.Orientation = xlLeftToRight
.SortMethod = xlPinYin
.Apply
End With
End SubMon problème, c'est qu'à la quatrième ligne, la macro sélectionne les cellules B1 à G1. Or, moi je veux qu'il ne considère pas G1 mais la dernière cellule non vide, puisque mon tableau va évoluer et s'agrandir en cellules.
Savez-vous si c'est possible ?
Cordialement.
Bonjour,
dernière ligne renseignée en prenant en compte la colonne 1 en référence :
Der_Ligne = Cells(Cells.Rows.Count,1).End(xlUp)
pour les colonnes c'est presque la même chose, en prenant en compte la ligne 1 comme référence
Der_Colonne = Cells(1,Cells.Columns.Count).End(xlLeft)
@ bientôt
LouReeD
Merci de t'être donné la peine de me répondre LouReed !
Comme j'ai encore beaucoup de bases à apprendre, je vais tenter quelque chose et je reviendrai vers toi.
Porto77