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'une macro VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut Optimisation d'une macro VBA
    Bonjour,

    Je ne suis pas très à l'aise avec les boucles mais j'ai adapté mon code avec les renseignements que j'ai pu trouver sur votre site. Maintenant, je rencontre un problème d'optimisation car la macro tourne environ 4 mn c'est beaucoup trop long. Avez-vous une solution?
    Merci pour votre aide => une novice
    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
    Sub CopierFormules()
     
    Dim L As Long
    Sheets("Volumes").Select
      With ActiveSheet
        For L = 8 To 293 'Step 2
          Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
        Next L
        For L = 314 To 316 'Step 2
          Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
        Next L
         For L = 344 To 449 'Step 2
          Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
        Next L
         For L = 463 To 465 'Step 2
          Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
        Next L
         For L = 491 To 594 'Step 2
          Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
        Next L
         For L = 608 To 610 'Step 2
          Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
        Next L
         For L = 852 To 955 'Step 2
          Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
        Next L
         For L = 969 To 971 'Step 2
          Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
        Next L
         For L = 1159 To 1174 'Step 2
          Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
        Next L
     
      End With
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Bonjour,

    1) désactive le calcul automatique (et réactive le a la fin) a chaque fois que rempli une formule excel recalcule toute la feuille et suivant le nombre et la complexité des formules ça peut prendre du temps
    Le code ressemble à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.calculation = xlmanual 'pour désactiver les calculs, xlautomatic pour les réactiver
    Si je dis ressemble c'est que je suis pas sur à 100% mais si ça ne marche pas une recherche rapide devrait te donner la réponse exacte.

    2) Pourquoi des boucles, normalement tu peux copier des plages entières de formules, exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For L = 8 To 293 'Step 2
          Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
        Next L
    devient
    range(cells(8,"F"),cells(293,"F")).End(xlToRight).Offset(0, 1).Formula = range(Cells(8, "F"),Cells(293, "F")).End(xlToRight).Formula

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    devient
    range(cells(8,"F"),cells(293,"F")).End(xlToRight).Offset(0, 1).Formula = range(Cells(8, "F"),Cells(293, "F")).End(xlToRight).Formula
    Voir même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("F8:F293").End(xlToRight).Offset(0, 1).Formula = Range("F8:F293").End(xlToRight).Formula
    ou bien, pour éviter deux recherches End :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Lim = Range("F8:F293").End(xlToRight)
    Lim.Offset(0, 1).Formula = Lim.Formula

  4. #4
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut
    Bonjour,
    J'ai essayé vos codes mais il me copie que la première formule de la ligne 8 ?
    Par contre, j'ai intégré la désactivation Application.Calculation = xlManual /xlAutomatic et c'est génial (Moins d'une seconde)!!!

    Merci beaucoup

  5. #5
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut Décaler les fonctions totaux
    Re-bonjour,

    Je suis toujours sur le même code et je rencontre un autre problème. Dans les formules copiées, j'ai la fonction recherchev() qui se décale parfaitement, par contre ce sont les fonctions totaux qui ne se décalent pas correctement ex: =AM9+AN8 devrait se décaler pour donner AN9+AO8 et ce n'est pas le cas..
    Pouvez-vous m'expliquer pourquoi?
    Merci

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Citation Envoyé par ANANA49 Voir le message
    par contre ce sont les fonctions totaux qui ne se décalent pas correctement
    C'est normal, ce n'est pas ce que tu lui as demandé, tu lui a demandé la même formule, si tu veux qu'il y ait décalage des formules il faut faire un copier coller

    j'ai la fonction recherchev() qui se décale parfaitement
    Ca par contre c'est étrange, range(...).formula = range(...).formulacopie la formule à l'identique


    Et j'avais oublié de revenir la dessus:
    J'ai essayé vos codes mais il me copie que la première formule de la ligne 8 ?
    Tu es sur d'avoir bien recopier le code ? chez moi ça fonctionne parfaitement.
    Peux tu nous montrer que tu as testé et qui ne fonctionnait pas ?

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par ANANA49 Voir le message
    je rencontre un autre problème.
    Dans ce cas, ouvre un autre sujet.
    Poser une question dans un sujet marqué Résolu, ce n'est pas une bonne idée.

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

Discussions similaires

  1. [XL-2003] Optimiser une macro VBA
    Par momo93240 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/07/2011, 16h46
  2. [WD11] Lancer une macro VBA Excel
    Par arnaud_verlaine dans le forum WinDev
    Réponses: 1
    Dernier message: 11/09/2007, 11h46
  3. Nouveau problème avec un tableau Excel et une macro VBA
    Par valouche dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 30/06/2007, 09h30
  4. Lancer une macro vba par menu
    Par jedwiller dans le forum Access
    Réponses: 3
    Dernier message: 09/05/2006, 16h19
  5. Connaître la taille d'un module avec une macro VBA ou autre
    Par beegees dans le forum Général VBA
    Réponses: 15
    Dernier message: 22/11/2005, 09h47

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