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 d'un Code [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 55
    Points
    55
    Par défaut Lenteur d'un Code
    Bonsoir à tous

    Ce code me permet de séparer le contenu du Presse-papier (assemblé dans une autre application, et collé), puis de copier les champs dans plusieurs cellules sur la même (dernière) ligne non vide de ma feuille courante : il marche parfaitement bien et remplie sa fonction.

    Mais il s'exécute en 6 secondes, alors que je m'attends à ce qu'il ne prenne que quelques dixièmes vu sa simplicité ....

    Avez-vous une explication, une astuce pour accélérer la bestiole, voire un autre code ?

    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
    Sub Extract()
     
    ' MàJ Nouvelle Commande
     
    Application.ScreenUpdating = False
     
    Dim CDE() As String
    Dim C1 As String
    Dim C9 As Variant
    Dim C4, C6 As Date
    Dim C7 As Double
     
    Range("I1").Select
    ActiveSheet.Paste
     
    If I1 = "" Then
    MsgBox ("Rien dans le Presse-Papier : Recommencez.")
    GoTo Suite:
    End If
     
     
    CDE() = Split(Range("I1").Value, "=")
    C1 = CDE(0) 'colonne 1 Dossier
    C4 = CDE(1) ' colonne 4Date Cde
    C6 = CDE(2) 'colonne 6 Date Facture
    C7 = CDE(3) 'colonne 7 MontantTTC
    C9 = CDE(4) 'colonne 8 TVA
     
    Sheets("Commandes").Select
    Range("A65536").End(xlUp).Offset(1, 0).Select
    Selection.Value = C1
     
    Range("A65536").End(xlUp).Offset(0, 6).Select
    Selection.Value = C7
    Selection.NumberFormat = "#,##0.00"
     
    Range("A65536").End(xlUp).Offset(0, 8).Select
    Selection.Value = C9 / 100
     
    Range("A65536").End(xlUp).Offset(0, 3).Select
    Selection.Value = C4
    Selection.NumberFormat = "dd/mm/yy;@"
     
    Range("A65536").End(xlUp).Offset(0, 5).Select
    Selection.Value = C6
    Selection.NumberFormat = "dd/mm/yy;@"
     
    MsgBox "Commande ajoutée - Achats à renseigner."
     
    Suite:
     
    Range("I1").Clear
     
    Range("A65536").End(xlUp).Offset(0, 0).Select
     
    Application.ScreenUpdating = True
     
    End Sub
    En remplaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A65536").End(xlUp).Offset(0, 6).Select
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Offset(0, 6).Select
    pour éviter de faire des A/R en bas du fichier, ça ne change pas grand chose ...

    Merci pour votre aide.

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

    Supprimez les Select et neutralisez vos calculs si vous avez beaucoup de formules. A tester :
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    Sub Extract()
     
    ' MàJ Nouvelle Commande
     
    Dim CDE() As String
    Dim C1 As String
    Dim C9 As Variant
    Dim C4 As Date, C6 As Date
    Dim C7 As Double
     
    Dim LigneCommande As Long
    Dim CelluleCommande As Range
    Dim HeureDebut, HeureFin, TempsTotal
     
        HeureDebut = Timer    ' Définit l'heure de début.
     
        With Application
             .ScreenUpdating = False
             .Calculation = xlCalculationManual
        End With
     
        With Sheets("Feuil1") ' A adapter
     
             .Range("I1").Select
             .Paste
     
             If .Range("I1") = "" Then
                MsgBox "Rien dans le Presse-Papier : Recommencez !", vbCritical
                GoTo Suite
             End If
     
             CDE() = Split(.Range("I1").Value, "=")
             C1 = CDE(0) 'colonne 1 Dossier
             C4 = CDE(1) ' colonne 4Date Cde
             C6 = CDE(2) 'colonne 6 Date Facture
             C7 = CDE(3) 'colonne 7 MontantTTC
             C9 = CDE(4) 'colonne 8 TVA
     
       End With
     
       With Sheets("Commandes")
     
            LigneCommande = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            Set CelluleCommande = .Range(.Cells(LigneCommande, 1), .Cells(LigneCommande, 9))
     
            CelluleCommande(1) = C1
     
            With CelluleCommande(4)
               .Value = C4
               .NumberFormat = "dd/mm/yy;@"
            End With
     
            With CelluleCommande(6)
               .Value = C6
               .NumberFormat = "dd/mm/yy;@"
            End With
     
            With CelluleCommande(7)
               .Value = C7
               .NumberFormat = "#,##0.00"
            End With
     
            CelluleCommande(9) = C9 / 100
     
            .Activate
     
            MsgBox "Commande ajoutée - Achats à renseigner !", vbInformation
     
       End With
     
       GoTo Suite
     
    Suite:
     
           Sheets("Feuil1").Range("I1").Clear
           Set CelluleCommande = Nothing
     
           With Application
               .ScreenUpdating = True
               .Calculation = xlCalculationAutomatic
           End With
     
           HeureFin = Timer    ' Définit l'heure de fin.
           TempsTotal = HeureFin - HeureDebut    ' Calcule la durée totale.
           MsgBox "Temps total " & Round(TempsTotal, 1) & " seconde(s)"
     
    End Sub

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

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Collez ceci après le "Paste"
    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
        Set f = Sheets("Commandes")
        If Range("I1") <> "" Then
            CDE() = Split(Range("I1").Value, "=")
            C1 = CDE(0) 'colonne 1 Dossier
            C4 = CDE(1) ' colonne 4Date Cde
            C6 = CDE(2) 'colonne 6 Date Facture
            C7 = CDE(3) 'colonne 7 MontantTTC
            C9 = CDE(4) 'colonne 9 TVA
            DerLig = f.Range("A65536").End(xlUp).Row + 1
            f.Cells(DerLig, "A") = C1
            f.Cells(DerLig, "G") = Format(C7, "0.00")
            f.Cells(DerLig, "H") = C9 / 100
            f.Cells(DerLig, "D") = Format(C4, "dd/mm/yy;@")
            f.Cells(DerLig, "F") = Format(C6, "dd/mm/yy;@")
            MsgBox "Commande ajoutée - Achats à renseigner."
            Range("I1").Clear
        Else
            MsgBox "Rien dans le Presse-Papier : Recommencez."
        End If
        Set f = Nothing
    End if
    Cdlt

  4. #4
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 55
    Points
    55
    Par défaut
    Merci à vous deux pour vos simplifications qui en effet, marchent parfaitement et font gagner du temps.

    Vos codes, et notamment le timer, m'ont surtout permis de mettre en évidence que c'est le re-calcul de la feuille et du classeur, assez lourd, après les "coller" qui prend du temps.

    C'est donc à moi de bosser à présent !

    Merci et bon WE

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

Discussions similaires

  1. [XL-2010] lenteur d'un code rapprochement bancaire automatique
    Par BENNASR dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2015, 12h42
  2. Lenteur / Optimisation de code
    Par Darkaurora dans le forum jQuery
    Réponses: 0
    Dernier message: 02/08/2013, 10h38
  3. [DXE2] Lenteurs éditeur de code
    Par od.dev dans le forum EDI
    Réponses: 10
    Dernier message: 02/12/2011, 11h34
  4. [AC-2002] Lenteur de mon code !
    Par jerome94 dans le forum VBA Access
    Réponses: 11
    Dernier message: 17/10/2011, 13h58
  5. Lenteur de mon code
    Par poly128 dans le forum Delphi
    Réponses: 4
    Dernier message: 17/01/2007, 23h46

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