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 :

Optimisation d’un code


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 75
    Par défaut Optimisation d’un code
    Bonjour à toutes et à tous,

    Je cherche à accélérer cette macro car le nombre de calcul est considérable et prend plusieurs jours !!!.

    Nota : Je ne peux pas passer le calcul en manuel, des formules Excel sont nécessaires.

    Merci par avance
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Sub test2007()
    Dim A, B, C, D, E, F
     
    Application.ScreenUpdating = False
    Range("NM1:NP65536").ClearContents
     
    For A = 0.9 To 1.8 Step 0.1
    For B = 1.5 To 2 Step 0.1
    For C = 0.5 To 0.9 Step 0.1
    For D = 0.5 To 2.3 Step 0.1
    For E = 0.5 To 1.3 Step 0.1
    For F = 0.5 To 1.9 Step 0.1
     
        Range("NM2").Value = A
        Range("NM3").Value = B
        Range("NM4").Value = C
        Range("NM5").Value = D
        Range("NM6").Value = E
        Range("NM7").Value = F
     
           If Range("NL1").Value = Range("NO1").Value Then Range("NO65536").End(xlUp)(2).Resize(6, 1).Value = Range("NM2:NM7").Value
           If Range("NL1").Value > Range("NO1").Value Then Range("NP1:NP1000").Value = Range("NO1:NO1000").Value
           If Range("NL1").Value > Range("NO1").Value Then Range("NO2:NO65536").ClearContents
           If Range("NL1").Value > Range("NO1").Value Then Range("NO2:NO7").Value = Range("NM2:NM7").Value
           If Range("NL1").Value > Range("NO1").Value Then Range("NO1").Value = Range("NL1").Value
     
          Next F
          Next E
          Next D
          Next C
          Next B
          Next A
     
            ActiveWorkbook.Save
                 Application.ScreenUpdating = True
    End Sub

  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,

    Pour moi, ce code boucle pour, a la fin, n'afficher la valeur que du dernier résultat.
    Ce code est censé faire quoi?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 75
    Par défaut Re,
    Bonjour,

    Je recherche les solutions maximums d’un test en faisant boucler chaque variable.

    Merci

  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
    Tu peux désactiver l'affichage (Cela accélère le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Application.ScreenUpdating=False
    ...
    CODE
    ...
    Application.ScreenUpdating=True
    Et aussi passer les calculs en manuel en ajoutant la procedure en volatile (a essayer)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.Calculation = xlCalculationManual
    Application.Volatile

    il n'est pas nécessaire de demander à Excel la même condition à moins que la valeur de NL1 change a chaque copie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If Range("NL1").Value = Range("NO1").Value Then Range("NO65536").End(xlUp)(2).Resize(6, 1).Value = Range("NM2:NM7").Value
    If Range("NL1").Value > Range("NO1").Value Then
       Range("NP1:NP1000").Value = Range("NO1:NO1000").Value
       Range("NO2:NO65536").ClearContents
       Range("NO2:NO7").Value = Range("NM2:NM7").Value
       Range("NO1").Value = Range("NL1").Value
    End if

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 75
    Par défaut
    Bonsoir Jérôme,

    Merci pour la rapidité de tes réponses cependant.
    - L’affichage était déjà désactivé
    - Je ne peux pas passer le calcul en manuel, des formules Excel sont nécessaires
    - Par contre j’ai modifié le test selon ta recommandation, le gain de temps n’est qu’infime par contre j’ai bien retenu la leçon.

    Merci encore

  6. #6
    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
    La proposition était de passer en manuel avec la procédure en volatile (calcul uniquement les cellules modifiées par la procédure F1 pou plus d'info)

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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