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 :

Améliorer un code lent


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut Améliorer un code lent
    Bonjour !

    Je travaille sur mon premier projet VBA Excel depuis bientôt un an et demi, étant novice, votre aide m'a permis de résoudre tous mes problèmes et je me retrouve aujourd'hui avec un outils tout simplement génial ! Un grand merci donc !
    Il est tellement complet, qu'Excel rame à chaque interaction ou presque. Je suis donc en quête de conseils pour améliorer tout ça...

    J'ai isolé par déduction une fonction, j'aimerais votre avis pour l'améliorer :

    Objectif : Les utilisateurs du programme doivent pouvoir modifier des cellules contenant des formules sans pour autant les effacer.
    Solution : J'ai mis mes formules dans une autre cellule et utilisé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    If Target.Count = 1 And Target.Address = "$C$5" Then
    Application.EnableEvents = False
    Target.Offset(1, 0).Value = Target.Offset(1, 2).Value
    Target.Offset(2, 0).Value = Target.Offset(2, 1).Value
    Target.Offset(3, 0).Value = Target.Offset(3, 1).Value
    Target.Offset(4, 0).Value = Target.Offset(4, 1).Value
    Target.Offset(6, 0).Value = Target.Offset(6, 1).Value
    Target.Offset(7, 0).Value = Target.Offset(7, 1).Value
    Target.Offset(8, 0).Value = Target.Offset(8, 1).Value
    Target.Offset(9, 0).Value = Target.Offset(9, 1).Value
    Target.Offset(10, 0).Value = Target.Offset(10, 1).Value
    Target.Offset(13, 0).Value = Target.Offset(13, 1).Value
    Target.Offset(14, 0).Value = Target.Offset(14, 1).Value
    Target.Offset(15, 0).Value = Target.Offset(15, 1).Value
    Target.Offset(16, 0).Value = Target.Offset(16, 1).Value
    Application.EnableEvents = True
    End If
    Tout fonctionne bien, mais j'ai une vingtaine de bloc comme celui ci parmi les 1000 lignes de codes VBA et les calculs des formules Excel --> ça rame.


    J'utilise déjà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    qui est très efficace, puis j'ai essayé d'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Calculation = xlCalculationManual
    le temps de calcul est réduit à 0, mais la fonction ne s'exécute plus...

    Je sèche, et recherche tout bon conseil.

    Merci d'avance et bonne journée !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Tu peux déjà réduire ton code comme ça.

    Il faut aussi que tu retire les .select

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim i As integer
    Application.EnableEvents = False
    If Target.Count = 1 And Target.Address = "$C$5" Then
    Target.Offset(1, 0).Value = Target.Offset(1, 2).Value
    End If
    For i =2 to 14 
    If Target.Count = 1 And Target.Address = "$C$5" Then
    Target.Offset(i, 0).Value = Target.Offset(i, 1).Value
    End If
    Next i
    Application.EnableEvents = True
    End If

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut
    Bonjour had4789 et merci pour ta réponse,

    J'ai testé mais malgré ta simplification, la vitesse d’exécution n'est pas meilleure.

    Que voulais-tu dire par les .select ?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Comment indique tu as a ta macro sur quel feuille elle doit travailler?

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut
    J'ai mis mon code dans le projet VBA de ma feuille avec au départ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Change(ByVal Target As Range)

  6. #6
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Du coup dès que tu change la valeur d'une de tes cellules tu relance ton programme de A à Z?

    Tu ne peux pas couper ton code?

    Tu n'utilise que le code que tu nous a donné?

Discussions similaires

  1. [Optimisation]Peut-on améliorer ce code ?
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 09/08/2007, 15h43
  2. [Tableaux] Amélioration de code (if)
    Par Sir Tengu dans le forum Langage
    Réponses: 3
    Dernier message: 24/12/2006, 00h26
  3. [VB2005]Code lent à l'exécution
    Par cd090580 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 15/11/2006, 14h15
  4. [Sécurité] Comment amélioré mon code ?
    Par Nadd dans le forum Langage
    Réponses: 14
    Dernier message: 03/03/2006, 20h13
  5. code lent ??
    Par difficiledetrouver1pseudo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/02/2006, 11h47

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