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 temps d'exécution


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Par défaut Optimiser temps d'exécution
    Bonjour,

    Sur ce forum, on m'a aidé à faire une macro qui appelle les données dans tous les tableaux Excel d'un dossier. Quand je la lance sur mon ordinateur elle marche très bien, cependant elle boucle sur toutes les lignes quand je la lance sur d'autres ordinateurs du réseau.(Après recherches, j'ai l'impression que c'est un bug qui vient du fait que je rentre mes données dans un tableau?)J'ai donc rajouté la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = False
    Le code marche maintenant sur tous les ordinateurs mais le temps d'excéution est vraiment très long. Il varie selon les ordinateurs de 54s à 84s et n'a pas forcément une durée constante sur un même ordinateur. Avant cela, le temps d'exécution du programme était d'environ 0,7s.

    Voici le programme :
    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
    37
    38
    39
    40
    Private Sub CommandButton1_Click()
     
     
    Dim principal As ThisWorkbook
     Dim repertoire As String
     Dim fichier As String
     Dim i As Integer
     Dim start As Single
     
     start = Timer
     
     Range("B2:F2000").ClearContents
     
     repertoire = "Q:\6- Production\17_Alerte qualité\Alertes signalées\"
     fichier = Dir(repertoire & "*.xlsm")
     i = 1
     Application.EnableEvents = False
     
     While Len(fichier) > 0
     
     i = i + 1
     Range("B" & i).FormulaR1C1 = "='" & repertoire & "[" & fichier & "]Alerte_qualité_fournisseur'!R4C3"
     
     Range("C" & i).FormulaR1C1 = "='" & repertoire & "[" & fichier & "]Alerte_qualité_fournisseur'!R4C5"
     
     Range("D" & i).FormulaR1C1 = "='" & repertoire & "[" & fichier & "]Alerte_qualité_fournisseur'!R6C3"
     
     Range("E" & i).FormulaR1C1 = "='" & repertoire & "[" & fichier & "]Alerte_qualité_fournisseur'!R3C13"
     
     Range("F" & i).FormulaR1C1 = "='" & repertoire & "[" & fichier & "]Alerte_qualité_fournisseur'!R9C10"
     
     fichier = Dir
     
     Wend
    Application.EnableEvents = True
    Application.ErrorCheckingOptions.BackgroundChecking = False
     
    MsgBox "durée du traitement: " & Timer - start & " secondes"
     
    End Sub
    J'ai testé en rajoutant : Application.screenupdating = false, cela me fait gagner environ 1s

    Est-ce que quelqu'un aurait une idée de ce que je pourrais faire ?

    Merci d'avance pour vos réponses

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Valentine_Chips Voir le message
    Bonjour,

    Votre traitement va de la ligne 2 à la ligne 2000. Combien de fichiers sont réellement concernés dans le répertoire de votre serveur ?
    S'il s'agit d'une quantité négligeable par rapport aux 1999 lignes de la boucle, j'irais faire l'inventaire des fichiers concernés sur le serveur pour récupérer les informations uniquement sur ces fichiers.

  3. #3
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonsoir,

    Je ne pense pas que cela vienne du Range("B2:F2000") car les formules ne sont créées que pour les seuls classeurs présents avec DIR.

    Plutôt que de mettre des formules ne serait-il pas plus rapide d'ouvrir le classeur et de récupérer la valeur des 5 cellules concernées ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Workbook.Open repertoire & fichier
        With Sheets("Alerte_qualité_fournisseur")
            Range("B" & i).Value = .Range("C4").Value
            ...
       End With
     ActiveWorkbook.Close False

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    ouverture/fermeture de X classeurs pour récupérer une ligne serait plus rapide????
    annasecu je veux le même papa noël que toi

    par contre effectivement l'idée de la valeur en dur n'est pas mauvaise
    valentine quand tes formules ont été déposée fait une gestion d'attente sur le change et fait un .value=.value
    je suppose que le calculate sera moins solicité
    j'aurais pu y penser
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Optimisation temps d'exécution macro
    Par julio44 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/07/2011, 13h14
  2. [datenum] Optimiser le temps d'exécution
    Par xduris dans le forum MATLAB
    Réponses: 11
    Dernier message: 08/08/2007, 16h07
  3. Optimisation du temps d'exécution d'une requête
    Par LeNovice dans le forum DB2
    Réponses: 6
    Dernier message: 12/07/2007, 13h47
  4. optimiser le temps d'exécution de l'explorateur windows
    Par ben_iap dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 31/01/2006, 22h04
  5. Réponses: 9
    Dernier message: 20/06/2005, 12h17

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