Autofit et colonnes filtrées

Bonjour à tous,

Je préfère préciser que je suis un débutant en VBA. Je suis dans l'informatique et ai touché beaucoup de langages mais peu le VBA.

Alors commençons par la structure de données que je souhaite manipuler, c'est simple c'est donc une feuille Excel que j'ai déjà peuplée en données :

Il y a 11 colonnes (A à K)

Une ligne "header" : 1

Et pour l'instant le remplissage ajoute 2488 lignes (donc un total de 2489 lignes avec header)

J'ai ajouté un filtre sur toutes les colonnes.

J'ai mis un autofit aussi sur toutes les colonnes.

Le truc c'est que c'est pas mal pour toutes les colonnes (qui ont des valeurs qui font sensiblement la même taille) mais pour une (la colonne B qui contient des noms de projets allant de 3 caractères à 50) cela ne va pas

L'idée que j'ai eu alors c'est de rappliquer un autofit sur la colonne B à chaque fois que l'utilisateur filtre une colonne.

J'ai donc trouvé sur google comment faire (Worksheet_Calculate())

Donc maintenant à chaque fois que l'utilisateur filtre une colonne j'ai cette fonction :

Public Function refreshSheet()

    Set ws = ThisWorkbook.Sheets("Mantis")
    LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
    ws.Range("A2:K" & LastRow).Sort Key1:=ws.Columns(2), Order1:=xlAscending, Header:=xlNo
    ws.Range("B2:B" & LastRow).Columns.AutoFit

End Function

Mais là encore un problème, même si je filtre la colonne B avec un nom de projet petit en taille, l'autofit a l'air de se faire sur la colonne en prenant en compte toutes les valeurs dans celle ci (visibles ou non).

Donc j'ai cherché et trouvé la méthode "SpecialCells(xlCellTypeVisible)" et j'ai tenté ça :

Public Function refreshSheet()

    Set ws = ThisWorkbook.Sheets("Mantis")
    LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
    ws.Range("A2:K" & LastRow).SpecialCells(xlCellTypeVisible).Sort Key1:= ws.Range("B2:B" & LastRow), Order1:=xlAscending, Header:=xlNo
    ws.Range("B2:B" & LastRow).SpecialCells(xlCellTypeVisible).Columns.AutoFit

End Function

J'ai pas mal cherché et changé ce code mais je sais que ça a déjà marché et à chaque changement de filtre la colonne B se redimensionnait à la taille du nom de projet visible le plus long de la colonne mais après plusieurs changements de filtres j'avais des problèmes d'espace pile, j'ai changé le code et maintenant j'ai que des erreurs d'espace pile.. (capture de l'erreur attachée)

Je ne sais pas si je suis dans la bonne direction et si c'est la bonne démarche pour ce que j'aimerai faire. C'est juste très frustrant d'être proche du bon comportement souhaité mais de pas arriver définitivement à l'obtenir.

Si quelqu'un peu me corriger ou m'indiquer la direction ce serait super gentil.

Au plaisir de vous lire.

vbaerror1 vbaerror2

bonjour

tu dois avoir un besoin, un BUT bien spécial pour chercher un truc pareil qui semble inutile à première vue.

quel est ce BUT ?

à te relire

amitiés

Bonjour à tous,

Pour le problème d'Autofit sur une colonne filtrée ...

Il faudra adapter le nom de la feuille ... et l'on parle de la colonne 2 (B).

Un essai ...

Sub TestAutofit()
    Set MaPlage = Worksheets("Feuil1").UsedRange.SpecialCells(xlCellTypeVisible)
    MaPlage.Columns(2).AutoFit
End Sub

ric

Bonjour,

Le problème est résolu.

Il suffisait de retirer une ligne :

Public Function refreshSheet()

    Set ws = ThisWorkbook.Sheets("Mantis")
    LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
    ws.Range("B2:B" & LastRow).SpecialCells(xlCellTypeVisible).Columns.AutoFit

End Function
Rechercher des sujets similaires à "autofit colonnes filtrees"