IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Optimiser le rafraichissement d'une user form [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 44
    Par défaut Optimiser le rafraichissement d'une user form
    Rebonjour,
    Encore une petite question concernant une macro.
    Lors d'un tri d'une centaine de cellules, je fais du autofit sur la hauteur des cellules. Cela prend un certain temps.
    J'ai ajouté, pour faire patienter l'utilisateur, un userform avec une barre de progression de la macro (en %).
    Mon souci c'est que pendant le tri, la userform ne se rafraichit pas et reste "blanc" (avec excel ne répond pas en haut).

    Est ce qu'il y a moyen d'optimiser le rafraichissement ?

    merci d'avance

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    La gestion de l'affichage ralenti le code. On a plutôt tendance à désactiver le rafraîchissement d'écran et les calculs quand on exécute une macro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
     
    ... CODE MACRO
     
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 44
    Par défaut
    à quoi correspond : application.calculation ?

    edit : à éviter qu'EXCEL ne recalcule toutes les cellules à chaque ligne de code


    cependant, malgré le screenupdating = false, je vois mes cellules changer de hauteur une par une, est ce normal ?

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Non pas normal, regardes si ton code contient une ligne de raffraichissement (désactive la userform)

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Déjà, l'AutoFit il ne faut pas le faire au fur et à mesure pour chaque ligne mais une fois le traitement de ta plage fini, du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Plage.Rows.AutoFit
    Hervé.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 44
    Par défaut
    @These : je ne savais pas, je vais reprendre mes lignes de code pour faire du autofit sur une plage entière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For a = 3 To i - 1 Step 1
        Workbooks("maintenance").Worksheets("signalements").Rows(a & ":" & a).EntireRow.AutoFit
        If Workbooks("maintenance").Worksheets("signalements").Rows(a).EntireRow.RowHeight < 30 Then Workbooks("maintenance").Worksheets("signalements").Rows(a).EntireRow.RowHeight = 30
    Next
    @jfontaine : je regarde si j'ai un screen updating qui traine mais je ne pense pas

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 44
    Par défaut
    super pour le autofit sur une plage et non ligne par ligne !

    par contre, je test une par une la hauteur des lignes. Si elle est inférieur à 30, je la corrige à 30. t c'est ca qui prend du temps, malgré le screenupdating = false

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2002] Comment il faut d'ajouter un tableau d'Excel dans une "USER FORM" en Excel 2002?
    Par sergio_gr66 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/12/2010, 10h31
  2. Inserer les valeurs d'une user form dans un tableau
    Par ludovicpierre dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/07/2010, 15h08
  3. Réponses: 1
    Dernier message: 01/09/2009, 05h20
  4. appeler une user form dans le fichier Excel
    Par Djawida dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/06/2009, 15h09
  5. Stabilisation d'une user-form
    Par 20100. dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/05/2008, 23h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo