Optimisation "selection change"

Bonjour à vous,

Dans le but de grossir un menu déroulant (largeur), j'ai créé la macro suivante :

"project validation" = E8:E500

Je veux grossir la colonne lorsqu'on arrrive dedans (ainsi le menu réroulant est plus gros). Ça fonctionne très bien, mais j'ai remarqué que ça créer un "lag" dans mon fichier. Avez-vous une idée pour optimiser?

Merci d'avance et bonne journée !

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Application.ScreenUpdating = False

If Not Application.Intersect(Target, Range("project_validation")) Is Nothing Then

Columns("E:E").ColumnWidth = 45

Else

Columns("E:E").EntireColumn.AutoFit

End If

End Sub

Vire le else ca ira déja plus vite

A chaque selection la macro va se lancer... C'est normal que tu ressentes un lag à chaque modification de selection puisque excel la lance.. mais le millième de seconde est pratiquement inperceptible, trois solutions laisser la colonne grosse et ne pas la changer à chaque fois, faire avec, acheter un ordinateur plus puissant

Bonjour Engue,

Merci de ta réponse. Je vais changer de stratégie : créer un bouton pour faire grossir/rétrécir la colonne.

Merci !

Bonjour,

Excel semble se souvenir de la largeur de colonne de la 1ère validation.

Sur un classeur neuf tu élargis une colonne, tu y mets une validation, tu choisis une validation avant de réduire ta colonne et il conserve la 1ère largeur de liste.

Problème : il perd tout à la fermeture.

J'ai tenté de le simuler dans workbookOpen et ça a l'air de marcher...

Regarde B2.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'Sheets(1).Columns("B:B").ColumnWidth = 23
End Sub

Private Sub Workbook_Open()
    Dim sav As String, shAct As Worksheet
    Set shAct = ActiveSheet ' sauvegarde feuille active
    Application.ScreenUpdating = False
    With Sheets(1)
        .Activate
        .Columns("B:B").ColumnWidth = 23
        sav = .[B2] ' 'sauvegarde cellule
        .[B2].Select
        .[B2] = Sheets(1).[E2] ' 1ère validation
        .Columns("B:B").ColumnWidth = 11
        .[B2] = sav ' restauration cellule
    End With
    shAct.Activate ' restauration feuille active
End Sub

Bizarrement cette largeur initiale affecte toutes les listes déroulantes, qcq soit la colonne (voir G2). A la limite tant mieux.

Si tu crées une nouvelle validation parfois on perd cette largeur initiale. Il suffit de fermer et d'enregistrer le classeur avec la colonne mise en grande largeur (ou d'activer la ligne dans beforeclose).

Bon, c'est un début, il y a sans doute des améliorations à trouver.

A toi de voir si la piste te plait et convient à ton classeur (et de tester sur la durée....)

eric

5largeur-liste.xlsm (16.53 Ko)

Bonjour Éric,

Merci pour ton idée. Je trouve que Microsoft devrait regarder cette fonction (menu déroulant) de manière a ce qu'on puisse formater le tout à notre goût (police, largeur etc) facile dans faire du code...

Bon week-end et merci encore

Vincent

Rechercher des sujets similaires à "optimisation selection change"