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 :

Un code trop lent à s'exécuter [XL-MAC 2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 245
    Par défaut Un code trop lent à s'exécuter
    Bonjour, le forum!
    Le code ci-dessous fonctionne, mais prend trop de temps à s'exécuter. Y a-t-il un moyen de réduire le temps d'exécution de cette macro? Comment?

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Private Sub CmdValider_Click()
    Dim choix As String
     
    choix = vbYes
    If MsgBox("Voulez-vous enregistrer cette opération?", vbQuestion + vbYesNo, "Confirmation") = vbYes Then
     
    Dim derligne As Integer
    Dim WS As Worksheet
    Dim ligne As Integer
     
    Set WS = Sheets("Journaux")
    derligne = WS.Range("B5000").End(xlUp).Row
    If WS.Range("B5").Value = "" Then
    derligne = WS.Range("B5000").End(xlUp).Row
    Else
    derligne = WS.Range("B5000").End(xlUp).Row + 1
    End If
     
    For ligne = 19 To 40
    If Cells(ligne, 3).Value <> "" Then
    WS.Range("B" & derligne).Value = Range("G15").Value
    WS.Range("C" & derligne).Value = Range("G13").Value
    WS.Range("D" & derligne).Value = Range("D13").Value
    WS.Range("E" & derligne).Value = Cells(ligne, 3).Value
    WS.Range("F" & derligne).Value = Cells(ligne, 4).Value
    WS.Range("G" & derligne).Value = Cells(ligne, 5).Value
    WS.Range("H" & derligne).Value = Cells(ligne, 6).Value
    WS.Range("I" & derligne).Value = Range("D15").Value
    WS.Range("J" & derligne).Value = Cells(ligne, 7).Value
    WS.Range("K" & derligne).Value = Cells(ligne, 8).Value
     
    derligne = derligne + 1
     
    End If
    Next
    Range("G15").Value = Range("G15").Value + 1
    Range("G15").Value = ""
    Range("G13").Value = ""
    Range("D13").Value = ""
    Range("D15").Value = ""
    Range("E19").Value = ""
    Range("E20").Value = ""
    Range("E21").Value = ""
    Range("E22").Value = ""
    Range("F19").Value = ""
    Range("F20").Value = ""
    Range("F21").Value = ""
    Range("F22").Value = ""
    Range("G19").Value = ""
    Range("G20").Value = ""
    Range("G21").Value = ""
    Range("G22").Value = ""
    Range("H19").Value = ""
    Range("H20").Value = ""
    Range("H21").Value = ""
    Range("H22").Value = ""
     
    Sheets("Saisie").Range("C19:C40").ClearContents
    Sheets("Saisie").Range("E19:E40").ClearContents
    Sheets("Saisie").Range("F19:F40").ClearContents
    Sheets("Saisie").Range("G19:G40").ClearContents
    Sheets("Saisie").Range("H19:H40").ClearContents
     
    End If
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Ajoutez la ligne suivante au-dessus de "Choix=vbYes"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Application.ScreenUpdating = False
    Cdlt

  3. #3
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 245
    Par défaut RE
    Citation Envoyé par ARTURO83 Voir le message
    Bonjour,

    Ajoutez la ligne suivante au-dessus de "Choix=vbYes"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Application.ScreenUpdating = False
    Cdlt
    Salut,
    J'ai essayé mais ça ne résout pas le problème.

  4. #4
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 223
    Par défaut
    Hello,

    vous pouvez nous donner un fichier d'exemples (sans données confidentielles) ?

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    je crois qu'il y a d'autres procédures qui ralentissent l'exécution du code
    toutefois et pour déterminer la dernière ligne non vide je recommande ce-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set ws = Sheets("Journaux")
    If ws.Range("B5").Value = "" Then
    derligne = ws.Range("A" & Rows.Count).End(xlUp).Row
    Else
    derligne = ws.Range("A" & Rows.Count).End(xlUp).Row + 1
    End If
    il y a une ligne je crois inutile ds votre code avant le if : derligne = WS.Range("B5000").End(xlUp).Row
    aussi tu peux vider les cellule en une seule ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.Range("G15,D13,D15,E19,E20,E22").ClearContents
    au lieu de
    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
    Range("G15").Value = ""
    Range("G13").Value = ""
    Range("D13").Value = ""
    Range("D15").Value = ""
    Range("E19").Value = ""
    Range("E20").Value = ""
    Range("E21").Value = ""
    Range("E22").Value = ""
    Range("F19").Value = ""
    Range("F20").Value = ""
    Range("F21").Value = ""
    Range("F22").Value = ""
    Range("G19").Value = ""
    Range("G20").Value = ""
    Range("G21").Value = ""
    Range("G22").Value = ""
    Range("H19").Value = ""
    Range("H20").Value = ""
    Range("H21").Value = ""
    Range("H22").Value = ""

  6. #6
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 245
    Par défaut RE
    Citation Envoyé par BENNASR Voir le message
    bonjour
    je crois qu'il y a d'autres procédures qui ralentissent l'exécution du code
    toutefois et pour déterminer la dernière ligne non vide je recommande ce-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set ws = Sheets("Journaux")
    If ws.Range("B5").Value = "" Then
    derligne = ws.Range("A" & Rows.Count).End(xlUp).Row
    Else
    derligne = ws.Range("A" & Rows.Count).End(xlUp).Row + 1
    End If
    il y a une ligne je crois inutile ds votre code avant le if : derligne = WS.Range("B5000").End(xlUp).Row
    aussi tu peux vider les cellule en une seule ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.Range("G15,D13,D15,E19,E20,E22").ClearContents
    au lieu de
    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
    Range("G15").Value = ""
    Range("G13").Value = ""
    Range("D13").Value = ""
    Range("D15").Value = ""
    Range("E19").Value = ""
    Range("E20").Value = ""
    Range("E21").Value = ""
    Range("E22").Value = ""
    Range("F19").Value = ""
    Range("F20").Value = ""
    Range("F21").Value = ""
    Range("F22").Value = ""
    Range("G19").Value = ""
    Range("G20").Value = ""
    Range("G21").Value = ""
    Range("G22").Value = ""
    Range("H19").Value = ""
    Range("H20").Value = ""
    Range("H21").Value = ""
    Range("H22").Value = ""
    Bonjour
    J'ai essayé vos suggestions mais le problème reste entier.
    J'ai tenté de joindre une pièces mais ça ne passe pas.

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

Discussions similaires

  1. Optimisation code trop lent
    Par Pynouz dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/02/2013, 14h44
  2. code trop lent
    Par dmoluc dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 17/12/2012, 18h16
  3. Code trop lent à optimiser
    Par deuche dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/10/2011, 16h18
  4. Code trop lent: recuperation de donnees dans un autre classeur
    Par nianko dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/01/2010, 10h43
  5. [Eclipse] Editeur de code trop lent
    Par Benzeghiba dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 10/11/2005, 14h02

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