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 Code et Macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut Optimisation Code et Macro
    Bonjour,

    Ma macro est assez aléatoire au niveau du temps d’exécution. Des fois celle-ci peux prendre 5 minutes comme 10 secondes sur mon PC.
    Je veux utiliser cette macro sur excel 2007 et 2010 et dans ces cas là c'est vraiment vraiment long.
    Ma macro permet de créer plusieurs contrats PDF à la suite.
    En faisant des recherches sur les forums j'ai pu optimiser déjà un petit peu en désactivant le rafraîchissement de l'écran.

    Voici mon code, voyez vous des optimisations possibles, simplification pour que le fichier soit plus performant et léger ?

    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
    Option Explicit
    Sub CreaContrat()
     
        Dim Dossier As String
        Dim NomFichier As String
        Dim NomDossier As String
        Dim SousDossier As String
        Dim NomCompletFichier As String
        Dim NomPersonne As String
        Dim stHeureExport As String
        Dim stDateExport As String
        Dim i, j, nb As Integer
    'Optimisation fichier'
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
     
    'Remplissage des colonnes'
    j = Sheets("generator").UsedRange.Rows.Count - 3
     
    'Chemin courant'
    Dossier = Application.ActiveWorkbook.Path & "\Contrat Kiva\"
     
    'Ligne définitive :
    'NomCompletFichier = ChDir & "\" & NomFichier
    nb = 0
     
    For i = 0 To j - 1
     
        If Worksheets("generator").Range("Cree").Offset(i).Value = "" And Not IsEmpty(Worksheets("generator").Range("name").Offset(i).Value) Then
     
        With Worksheets("generator")
     
            Worksheets("Contract").Range("B12").Value = .Range("name").Offset(i).Value
            Worksheets("Contract").Range("F64").Value = .Range("name").Offset(i).Value
            Worksheets("Contract").Range("D9").Value = .Range("khmer").Offset(i).Value
            Worksheets("Contract").Range("C18").Value = .Range("loom").Offset(i).Value
            Worksheets("Contract").Range("E18").Value = .Range("dollar").Offset(i).Value
            Worksheets("Contract").Range("G18").Value = .Range("thb").Offset(i).Value
            Worksheets("Contract").Range("I20").Value = .Range("thbscarf").Offset(i).Value
            Worksheets("Contract").Range("D25").Value = .Range("ddate").Offset(i).Value
            Worksheets("Contract").Range("D26").Value = .Range("ddate").Offset(i).Value
            Worksheets("Contract").Range("D29").Value = .Range("rdate").Offset(i).Value
            Worksheets("Contract").Range("D30").Value = .Range("rdate").Offset(i).Value
            Worksheets("Contract").Range("D39").Value = .Range("sdate").Offset(i).Value
     
            .Range("Cree").Offset(i).Value = "Created on " & VBA.Format(VBA.Date, "dd/mm/yy") & VBA.Chr(10) & " at " & VBA.Format(VBA.Time, "hh:mm")
     
            NomFichier = .Range("name").Offset(i).Value & " " & .Range("season").Offset(i).Value & " " & .Range("ref").Offset(i).Value & " M" & .Range("num").Offset(i).Value & " "
            SousDossier = Range("name").Offset(i).Value & stHeureExport
     
        End With
     
     
        'Pour les tests, on ajoute l'heure au nom de fichier ; ainsi, il n'y a pas de doublon de noms
        stHeureExport = VBA.Format(VBA.Time, "hhmmss")
        stDateExport = VBA.Format(VBA.Date, "dd-mm-yy")
     
        NomCompletFichier = Dossier & NomFichier & stDateExport & "  " & stHeureExport
     
        'Création Dossier si il n'est pas présent'
        If Dir(Dossier, vbDirectory) = "" Then MkDir Dossier
     
     
        'Copie de la feuille courante dans un nouveau classeur et enregistrement'
        'XLS'
        'Worksheets("Notification").Copy'
        'ActiveWorkbook.SaveAs Filename:=NomCompletFichier'
     
        'PDF'
        Worksheets("Contract").ExportAsFixedFormat Type:=xlTypePDF, Filename:=NomCompletFichier & ".pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        From:=1, To:=2, OpenAfterPublish:=False
     
        'ActiveWorkbook.Close'
     
        nb = nb + 1
     
        End If
     
       Next i
     
        'Boite texte'
      MsgBox "Contract created and saved" & vbCrLf & vbCrLf & CStr(nb) & " in " & vbCrLf & Dossier
     
     'Optimisation fichier'
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    End Sub

    Merci d'avance,

    Pierre

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Par défaut Question Supplémentaire
    Bonjour,

    Personne pour m'aider ?

    Aux connaisseurs, est-il plus judicieux de faire un copier coller dans ma boucle à chaque fois ou de définir la valeur de la cellule de destination comme précédemment ?

    Merci beaucoup,

    Pierre

Discussions similaires

  1. Problème d'insertion de code par macro
    Par melouille56 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/01/2008, 20h31
  2. Optimiser code VBA
    Par willytito dans le forum VBA Access
    Réponses: 5
    Dernier message: 19/11/2007, 09h49
  3. probleme d'optimisation d'une macro
    Par ylabarre dans le forum VBA Outlook
    Réponses: 5
    Dernier message: 28/09/2007, 16h40
  4. [OK] Erreur dans l'exécution d'un code de macro.
    Par Funcky222 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/09/2007, 21h35
  5. Code lancement macro
    Par cjacquel dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/09/2007, 15h37

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