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 :

Lenteur exécution du calcul après enregistrement du classeur


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de jackborogar
    Homme Profil pro
    Etudiant Ingénierie Financière
    Inscrit en
    Avril 2012
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant Ingénierie Financière
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 290
    Points : 481
    Points
    481
    Par défaut Lenteur exécution du calcul après enregistrement du classeur
    Bonjour à tous,

    Je viens de créer une sorte de gestionnaire de contrat sur un excel. Pour faire simple l'utilisateur ne peut interagir avec le classeur que par macro.
    Il peut : saisir un contrat, dupliquer un contrat, supprimer un contrat, mettre un prix, changer les volumes de planification, bref il peut faire plein de chose avec un contrat via un menu personnalisé par clic droit.

    Lorsque je supprime un contrat de mon listing de contrat, cela met environ 1 sec a exécuter tout le code et le supprimer de la liste.

    Lorsque j'enregistre mon classeur puis que je supprime un contrat de mon listing de contrat, cela met environ 20 sec a exécuter tout le code et le supprimer de la liste et ceux jusqu'à ce que je ferme mon classeur. Si je l'ouvre de nouveau, le temps de calcul revient à 1 sec

    C'est la 1 ère fois que je suis confronté à ce problème. Après plusieurs recherches et essais, rien à faire.

    Quelqu'un aurait-il une idée? Est ce que certaines fonctions sont touchés après des enregistrements, j'exploite n'importe quelle piste.

    En vous remerciant,

    Tanguy
    Pour la carotte, le lapin est la parfaite incarnation du Mal.
    N'oublie pas de ou si la réponse t'a plu ou pas.

    Une fois que le topic est solutionné n'oublie pas

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour jackborogar,

    La seule différence que tu rencontres entre les deux "méthodes" que tu emploies est juste un enregistrement au préalable ?
    Ca me semble, un peu bizarre...

    J'imagine que tu as déjà utilisé les :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Application.ScreenUpdating = False 'ou carrément Application.Visible = False 
    Application.Calculation = xlCalculationManual
    'Code
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True 'ou Application.Visible = True
    ... n'est-ce pas ?

    As-tu des procédures événementielles ?

    J'attends ton retour !

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  3. #3
    Membre confirmé Avatar de jackborogar
    Homme Profil pro
    Etudiant Ingénierie Financière
    Inscrit en
    Avril 2012
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant Ingénierie Financière
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 290
    Points : 481
    Points
    481
    Par défaut
    Bonjour Kimy,

    Tout d'abord je te remercie fortement pour ta réactivité. Puis j'utilise bien les applications cités ci-dessous à savoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Application.ScreenUpdating = False 'ou carrément Application.Visible = False 
    Application.Calculation = xlCalculationManual
    'Code
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True 'ou Application.Visible = True
    Rien y fait.
    Effectivement c'est vraiment dès que j'enregistre mon fichier que les lenteurs apparaissent. Je suis obligé de fermer et ouvrir de nouveau mon classeur pour contourner le problème.

    Pour plus de détail ce problème intervient seulement quand il s'agit de dupliquer un contrat (qui n'est q'une insertion de ligne puis de copier/coller), ou supprimer une ligne. Donc j'ai l'impression dès que j'interagis sur une création ou suppression de ligne.

    Par contrat modifier tous les éléments d'une ligne via les macros ne changent strictement pas mon temps d'exécution.
    Pour la carotte, le lapin est la parfaite incarnation du Mal.
    N'oublie pas de ou si la réponse t'a plu ou pas.

    Une fois que le topic est solutionné n'oublie pas

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    jackborogar,

    Du côté des procédures événementielles ?
    Peut-on voir le code ?

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  5. #5
    Membre confirmé Avatar de jackborogar
    Homme Profil pro
    Etudiant Ingénierie Financière
    Inscrit en
    Avril 2012
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant Ingénierie Financière
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 290
    Points : 481
    Points
    481
    Par défaut
    Re bonjour à tous,

    Désolé de ce retard.

    Ci-dessous le code de mon menu pour appeler mes actions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim MaBarre As CommandBar
    Dim MySubMenu As CommandBarControl
     
    Set MaBarre = Application.CommandBars.Add(Name:="ClicDroit", Position:=msoBarPopup)
     
    With MaBarre
     
        .Controls.Add Type:=msoControlButton
        .Controls(1).OnAction = "Dupliquer"
        .Controls(1).FaceId = 1667
        .Controls(1).Caption = "Dupliquer le contrat"
    Et ci-dessous l'action de mon menu :

    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
    41
    42
    43
    44
    45
    46
    47
    Sub Dupliquer()
    
    Application.ScreenUpdating = False
    
    'Dupliquer
    Dim lignes As Integer
    Dim debut As Integer
    Dim référence As Variant
    
    debut = 1
    ligne = Sheets("Feuil3").Range("H2")
    référence = Sheets("Listing").Cells(ligne, 1)
    
    
    If MsgBox("Etes-vous certain de vouloir dupliquer le contrat """ & référence & """ ?", vbYesNo + vbCritical, "Demande de confirmation") = vbYes Then
            
        With Sheets("Listing").Cells(ligne, 1).EntireRow
            .Offset(debut, 0).Insert Shift:=xlDown
            .Copy Destination:=.Offset(debut, 0)
        End With
        
        With Sheets("Volume_PR").Cells(ligne, 1).EntireRow
            .Offset(debut, 0).Insert Shift:=xlDown
            .Copy Destination:=.Offset(debut, 0)
        End With
        
        With Sheets("Prime").Cells(ligne, 1).EntireRow
            .Offset(debut, 0).Insert Shift:=xlDown
            .Copy Destination:=.Offset(debut, 0)
        End With
        
        With Sheets("Volume_Prix").Cells(ligne, 1).EntireRow
            .Offset(debut, 0).Insert Shift:=xlDown
            .Copy Destination:=.Offset(debut, 0)
        End With
        
        With Sheets("Prix AA").Cells(ligne, 1).EntireRow
            .Offset(debut, 0).Insert Shift:=xlDown
            .Copy Destination:=.Offset(debut, 0)
        End With
    
    End If
    
    
    Application.ScreenUpdating = True '
    
    End Sub
    En rouge est la partie qui donne ces latences de 14 sec.

    En vous remerciant,
    Pour la carotte, le lapin est la parfaite incarnation du Mal.
    N'oublie pas de ou si la réponse t'a plu ou pas.

    Une fois que le topic est solutionné n'oublie pas

  6. #6
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour jackborogar,

    A ce que je vois tu ne bloques pas les calculs comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.Calculation = xlCalculationManual
    'Code
    Application.Calculation = xlCalculationAutomatic
    Or, c'est ce qui peut prendre le plus de temps.
    Par exemple si tu as 2500 lignes qui s'appellent mutuellement, cela risque de prendre de temps à l'insertion d'une ou de plusieurs lignes.

    Par ailleurs, as-tu des MFC ?

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  7. #7
    Membre confirmé Avatar de jackborogar
    Homme Profil pro
    Etudiant Ingénierie Financière
    Inscrit en
    Avril 2012
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant Ingénierie Financière
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 290
    Points : 481
    Points
    481
    Par défaut
    Merci de ta réponse.

    Pour les calculs auto/manuel, j'ai essayé avec ou sans, cela ne change rien au calcul de temps car au maximum les équipes devront travailler sur 500 lignes maximum.

    Non pas de MFC.

    Cordialement,

    Tanguy
    Pour la carotte, le lapin est la parfaite incarnation du Mal.
    N'oublie pas de ou si la réponse t'a plu ou pas.

    Une fois que le topic est solutionné n'oublie pas

Discussions similaires

  1. [VBA] Enregistrer un classeur avec le nom d'une cellule
    Par zouille dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/10/2006, 19h16
  2. Réponses: 2
    Dernier message: 14/04/2006, 08h42
  3. Excuter quelque chose apres l'arret des scrollbar
    Par m14w dans le forum Composants VCL
    Réponses: 1
    Dernier message: 06/01/2006, 23h52
  4. [Excel/Macro] Envoi d'Email après enregistrement
    Par Myogtha dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/11/2005, 09h15
  5. [VBA-Excel,VB6,Fichier texte]enregistrer un classeur excel..
    Par Tarul dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 13h09

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