Tri et modification des hauteurs de lignes

Bonjour,

J'ai un tableau avec des lignes de hauteur différentes, plus ou moins grande en fonction du contenu

Quand j'effectue un tri (par date colonne A), le tri se fait bien, mais la hauteur respective de chaque ligne n'est pas conservée:

les lignes n°611, 612 et 613 conserve exactement leur hauteur, mais comme les lignes ont été triées, ça ne va plus !

Auriez-vous une solution pour qu'Excel garde les hauteurs de lignes définies lors d'un tri ?

Merci

Bonjour

Peux tu joindre un exemple de ton fichier anonymé?

Bonjour,

Voici un exemple en PJ.

Si on trie suivant la DATE, l'"ancienne ligne 3" ne sera plus assez haute pour tout afficher.

Merci.

Re bonjour

Regarde si cela te convient avec une macro et un bouton

Une autre option uniquement par double clic sur la feuille

Bonsoir Kido63, Joco7915,

Insérer les lignes de code ci-dessous dans la partie code de la première feuille.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
Der = Range("B" & Rows.Count).End(xlUp).Row
Range("B2:B" & Der).EntireRow.AutoFit
End if
End Sub

Faire ALT + F11 pour ouvrir l'éditeur macro puis clic droit sur l'objet Feuil1, sélectionner Code. Afin de copier les 5 lignes proposées.

Ne pas oublier d'enregistrer le fichier ensuite avec l'extension xlsm

Lorsque tu choisis de trier ton tableau. Les lignes seront automatiquement par AutoFit ajustées en hauteur selon leur contenu.

Merci et X Cellus,

X Cellus, en faisant comme tu décris, j'imagine que ça ne va fonctionner que pour le classeur en question.

Je souhaiterais que ton code s'exécute, à chaque fois que je fais un TRI, sur l'ensemble des lignes triées, et dans n'importe quel classeur.

Est-ce possible ?

Merci.

En fait le .AutoFit ne me convient pas vraiment, dans l'idéal, je souhaiterais que les lignes gardent leur hauteur d'origine, je la règle manuellement parfois.

C'est quand même étrange qu'un tri de lignes ne conserve pas leur hauteur ?

Merci.

bonsoir,

Sub tri()
     Dim c, N
     't = Timer

     Application.ScreenUpdating = False
     Set c = Range("B11").CurrentRegion     'plage à sorter
     N = c.Columns.Count + 1     'nombre de colonne + 1 (auxiliaire)
     If c.Parent.AutoFilterMode Then c.Parent.AutoFilterMode = False

     For i = 1 To c.Rows.Count
          c(i, N).Value = c(i, N).RowHeight     'ajouter hauteur original de la ligne dans la colonne suivante (auxiliaire)
     Next

     With c.Resize(, N)
          .Sort .Range("A1"), xlAscending, Header:=xlYes     'sorter la date

          Set dict = CreateObject("scripting.dictionary")     'cahier de brouillon
          With .Columns(N)     'dernière colonne avec les hauteurs originaux
               For i = 2 To .Rows.Count     'boucle toutes les lignes
                    dict(.Cells(i, 1).Value) = vbEmpty     'les hauteurs uniques
               Next
          End With

          For i = 0 To dict.Count - 1     'boucle ces hauteurs uniques
               h = dict.Keys()(i)     'un de ces hauteurs
               .AutoFilter N, h     'filtrer toutes les lignes avec cet hauteur
               .SpecialCells(xlVisible).EntireRow.RowHeight = h   'ajuster hauteur ligne comme avant le tri
          Next
          c.AutoFilter     'reset filtre
          c(1, N).EntireRow.RowHeight = c(1, N).Value     'ajuster hauteur ligne de l'entête comme avant le tri

          .Columns(.Columns.Count).ClearContents     'effacer colonne suivante
     End With
     Application.Goto c(1)

     'MsgBox Timer - t
End Sub

Bonjour,

Merci beaucoup pour ce code qui fait ce que je cherchais.

Pour faciliter l'utilisation et le paramétrage des TRI, est-il possible de conserver la fenêtre de d'origine de tri d'Excel dans laquelle on choisit les critères de tri ?

picpick 2022 09 19 10 33 35

Merci.

il faut noter l"hauteur des lignes, faire le tri avec ces hauteurs dans la plage de sorter et puis ajuster les hauteurs.

Je ne sais pas si la manière de sorter changera beaucoup, autrement vous pouvez adapter la 2ième partie dans la macro.

Sub TRI()
     Dim c, N

     Application.ScreenUpdating = False
     Set c = Range("B11").CurrentRegion     'plage à sorter
     N = c.Columns.Count + 1     'nombre de colonne + 1 (auxiliaire)

     'ShowFilters

     If c.Parent.AutoFilterMode Then c.Parent.AutoFilterMode = False

     '************************ajouter une colonne avec les hauteurs *************
     For i = 1 To c.Rows.Count
          c(i, N).Value = c(i, N).RowHeight     'ajouter hauteur original de la ligne dans la colonne suivante (auxiliaire)
     Next

     '************ ici le tri que vous voulez faire ***********IMPORTANT****A MODIFIER ************-
     With c.Resize(, N)
          .Sort .Range("A1"), xlDescending, , .Range("B1"), xlAscending, Header:=xlYes  'sorter la date

     '****************adapter a l'hauteur précédent **********************************
          Set dict = CreateObject("scripting.dictionary")     'cahier de brouillon
          With .Columns(N)     'dernière colonne avec les hauteurs originaux
               For i = 2 To .Rows.Count     'boucle toutes les lignes
                    dict(.Cells(i, 1).Value) = vbEmpty     'les hauteurs uniques
               Next
          End With

          For i = 0 To dict.Count - 1     'boucle ces hauteurs uniques
               h = dict.Keys()(i)     'un de ces hauteurs
               .AutoFilter N, h     'filtrer toutes les lignes avec cet hauteur
               .SpecialCells(xlVisible).EntireRow.RowHeight = h   'ajuster hauteur ligne comme avant le tri
          Next
          c.AutoFilter     'reset filtre
          c(1, N).EntireRow.RowHeight = c(1, N).Value     'ajuster hauteur ligne de l'entête comme avant le tri

          .Columns(.Columns.Count).ClearContents     'effacer colonne suivante
     End With
     Application.Goto c(1), 1

End Sub

Merci.

Oui effectivement je peux modifier les critères de tri dans la macro.

Mais j'ai besoin de l'utiliser dans différents classeurs et avec des tri différents, donc à chaque fois il faudrait que j'aille modifier la macro, pas possible de garder la fenêtre de base d'Excel des options de tri avec la macro ?

Bonne journée.

on peut couper la macro en 3 pièces, 3 macros

macro 1 = préparation = noter tous les hauteurs dans une colonne (ajouté avant & efface après ou specifice crée pour ce but)

macro 2 = le macro avec laquelle on fait un tri specifique

macro 3 = finition = ajuster les hauteurs des lignes (et effacer la colonne supplémentair)

quelque macros pour vous montrer

* macro : Sort_Unique() = vous voulez sorter d'une manière, donc les macros prépartion et finition, ils ne faut plus les changer, simplement appeler

* supposons que vous voulez sorter plusieurs manières, = macro Sort_Multi(Col1, Order1, Col2, Order2) avec Col1 et Col2 la sequence des colonnes & Order1 et Order2 = l'ordre de sorter. Puis les macro Sort1 à Sort4, qui appèlent cette macro

merci, je vais regarder ça

Rechercher des sujets similaires à "tri modification hauteurs lignes"