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 de temps d'exécution d'un Code VBA


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 36
    Points
    36
    Par défaut Optimisation de temps d'exécution d'un Code VBA
    Bonjour à tous et à toutes !!!!


    je vouderais savoir , si il existe des tutoriels , traitant de l'optimisation du code en VBA . Ce tutoriel pourras m'aider peut etre à réduire le temps de chargement de mon programme , car pou le moment le temps qu'il met juste à charger c'est 2 Min , et j'aimerais bien le faire passer à 25 seconde ou meme à 40 sec .

    Si quelqu'un à des bonnes ideés je suis à votre ecoute !!!!


    Je vous remercie d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour

    pour optimiser un code VBA tu peux travailler avec des objets, des tableaux etc... il y a plein de bon exemple sur le site dans les tutoriaux et la FAQ.

    Mais de quoi peut venir un temps si long ? tu charge ton fichier depuis un réseau ? ton fichier est énorme ? tu lances un paquet de macros au lancement du classeur ?

    En as tu une idée ?
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 36
    Points
    36
    Par défaut
    Pour vous répondre , je lance mon fichier depuis mon PC de bureau , le fichier Excel Fait que 1.72 Mo , l'idée que j'ai , c'est que au chargement ( cad quand je click sur le fichier excel , y'as un userforme qui s'affiiche et quand je clic sur le bouton charger , alors il met un temps enorme.Peut etre c'est qu'au lancement sumultanée de toute les macros . y'a t'il un moyens de ne pas les lancer au debut et que des lancer qu'au moment ou en a vraiment besoin , c'est à dire quand on veut demarer le calcul ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    quand je clic sur le bouton charger
    En fait ce qu'il faudrait voir c'est les actions qui sont effectuées lorsque tu clic sur ce bouton car il charge quoi ? des informations sur d'autres classeurs ou d'autres fichiers.

    dans l'éditeur vb il faudrait que tu double clic sur le bouton charger du userForm et que tu regardes ce qui est codé derriere. Et au pire nous mettre ce code.
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour

    De plus ce serait bon d'avoir un extrait de code pour se donner une idée de ce que tu as fait.

    Quelques indications, il faut éviter les Select, Activate dans un premier temps.

    Philippe

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 36
    Points
    36
    Par défaut
    Voila le programme du Bouton Charger , je pense qu'il fait appel à des procedures qui font appel à leur tour à d'autre fonction de calcul




    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
     
    Private Sub Charger_Click()
    ' bouton Charger
     
    ChoixTolerie = ComboBox1.Value      'choix de tolerie de l'utilisateur
    ChoixBobinage = ComboBox2.Value     'choix de bobinage de l'utilisateur
    ChoixApplication = ComboBox3.Value  'choix d'application de l'utilisateur
     
    For Each Feuille In Worksheets
        If ChoixTolerie <> "" And Feuille.Name = "Données tol " & ChoixTolerie Then
            'chargement dans la feuille "conversion" des donnees correspondantes au choix tolerie
            DonneesTolerie
            markerTolerie = True
        End If
     
        If ChoixBobinage <> "" And Feuille.Name = "Données bob " & ChoixBobinage Then
            'chargement dans la feuille "conversion" des donnees correspondantes au choix bobinage
            DonneesBobinage
            markerBobinage = True
        End If
     
        If ChoixApplication <> "" And Feuille.Name = "Données appli " & ChoixApplication Then
            'chargement dans la feuille "Résultats finaux" et "Résultats finaux Imini" des donnees correspondantes au choix application
            DonneesApplication
            markerApplication = True
        End If
     
        If markerTolerie = True And markerBobinage = True And markerApplication = True Then
            marker = True
        End If
    Next Feuille
     
    If marker = True Then
        'faire disparaitre la boite de dialogue
        UserForm1.Hide
        Unload UserForm1
     
        'afficher les 3 feuilles classiques et masquer "Accueil"
        Application.ScreenUpdating = False  'Mise à jour d'écran désactivée
        Application.Interactive = False     'Bloque les interactions souris-clavier
     
        With ThisWorkbook
            Worksheets("Performances").Visible = xlSheetVisible
            Worksheets("Résultats finaux").Visible = xlSheetVisible
            Worksheets("Conversion").Visible = xlSheetVisible
            Worksheets("Performances Imini").Visible = xlSheetVisible
            Worksheets("Résultats finaux Imini").Visible = xlSheetVisible
            Worksheets("Accueil").Visible = xlSheetHidden
            Worksheets("Conversion").Activate
     
            .Saved = True   'indique qu'aucune modification n'a ete apportée aux données
        End With
     
        Application.ScreenUpdating = True  'Mise à jour d'écran activée
        Application.Interactive = True     'Débloque les interactions souris-clavier
    End If
     
    If marker = False Then
        a = MsgBox("Veuillez choisir une tôlerie, un ensemble bobinage + longueur de fer et une application dans les listes déroulantes." & Chr(13) & "Si vous ne trouvez pas les réferences que vous recherchez, vous pouvez les créer en cliquant sur les boutons ""Créer""", vbExclamation)
    End If
    Application.Visible = True
     
    End Sub

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Il y aurait bien une ou deux petites choses à améliorer mais il est propre et ce n'est pas lui qui te fait perdre autant de temps.

    par contre il y a trois appel de procedure onneesTolerie, DonneesBobinage et DonneesApplication

    on peut continuer le débrousaillage, avec la première par exemple !
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 36
    Points
    36
    Par défaut
    donc c'est quoi votre solution?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    eh bien pourrais tu nous montrer le code de DonneesTolerie, au moins pour en vérifier un autre.
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 36
    Points
    36
    Par défaut
    voila une partie du programme donneesTolerie ()


    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
     
    public Sub DonneesTolerie()
     
    With Worksheets("Données tol " & ChoixTolerie)
        .Unprotect
     
        'géométrie tolerie
        NumTolerieStator = .Range("C6")
        NumTolerieRotor = .Range("C7")
        NbrePoles = .Range("C8")
        Lfer = .Range("C9")
        SectionEncoche = .Range("C10")
        Remplissage = .Range("C11")
        LargeurDent = .Range("C13")
        EpaisseurDent = .Range("C14")
        DebordFondEncoche = .Range("C15")
        EpaisseurTeteBobine = .Range("C16")
        Longueur_TeteBobine = .Range("C17").Formula
        Diam_Ext = .Range("C5")
        'résultats Flux2D
        FEM_F2D = .Range("C20")
        XdI_F2D = .Range("C21")
        XqI_F2D = .Range("C22")
        N_F2D = .Range("C23")
        I_F2D = .Range("C24")
        NbrePortion_F2D = .Range("C25")
        NbreEncocheParRegion_F2D = .Range("C26")
        TempRotor = .Range("C27")
        L_FuitesTeteBobine = .Range("C28")
        C_reference = .Range("C29")
     
        'bobinage
        NbreSpireParEncoche = .Range("C32")
        NbreVoieParallele = .Range("C34")
        NbreFilsParallele = .Range("C36")
     
        'constantes
        Resistivite = .Range("C40")
        TempFroid = .Range("C41")
        PenteCuivre = .Range("C42")
        TempChaud = .Range("C43")
        CoeffDimMagnAim = .Range("C45")
     
        'pertes
        PferAVide = .Range("G11")
        NPfer = .Range("I11")
        Pfrottements = .Range("G12")
        NPfrottements = .Range("I12")
        Paeraulique = .Range("G13")
        NPaeraulique = .Range("I13")
     
        'coefficients de saturation
        CoupleAVide = .Range("F5")
        CoupleCharge75 = .Range("G5")
        CoupleNominal = .Range("H5")
        CoupleCharge15 = .Range("I5")
        CoupleCharge18 = .Range("J5")
        CoupleCharge2 = .Range("K5")
        CoupleCharge25 = .Range("L5")
        CoupleCharge3 = .Range("M5")
     
        Ld_Vide = .Range("F6")
        Ld_75 = .Range("G6")
        Ld_Nom = .Range("H6")
        Ld_15 = .Range("I6")
        Ld_18 = .Range("J6")
        Ld_2 = .Range("K6")
        Ld_25 = .Range("L6")
        Ld_3 = .Range("M6")
     
        Lq_Vide = .Range("F7")
        Lq_75 = .Range("G7")
        Lq_Nom = .Range("H7")
        Lq_15 = .Range("I7")
        Lq_18 = .Range("J7")
        Lq_2 = .Range("K7")
        Lq_25 = .Range("L7")
        Lq_3 = .Range("M7")
     
        Kt_Vide = .Range("F8")
        Kt_75 = .Range("G8")
        Kt_Nom = .Range("H8")
        Kt_15 = .Range("I8")
        Kt_18 = .Range("J8")
        Kt_2 = .Range("K8")
        Kt_25 = .Range("L8")
        Kt_3 = .Range("M8")
     
    '     CoupleNominal = .Range("D8").Value
    '    CoupleAVide = 0
    '    CoupleCharge75 = 0.75 * CoupleNominal
    '    CoupleCharge15 = 1.5 * CoupleNominal
    '    CoupleCharge18 = 1.8 * CoupleNominal
    '    CoupleCharge20 = 2 * CoupleNominal
    '    CoupleCharge25 = 2.5 * CoupleNominal
    '    CoupleCharge3 = 3 * CoupleNominal
     
     
        .Protect
    End With
     
    'copie des donnees dans feuille "Conversion"
    With ThisWorkbook.Worksheets("Conversion")
        .Unprotect
     
        'géométrie tolerie
        .Range("C6") = NumTolerieStator
        .Range("C7") = NumTolerieRotor
        .Range("C8") = NbrePoles
        .Range("C9") = Lfer
        .Range("C10") = SectionEncoche
        .Range("C11") = Remplissage
        .Range("C13") = LargeurDent
        .Range("C14") = EpaisseurDent
        .Range("C15") = DebordFondEncoche
        .Range("C16") = EpaisseurTeteBobine
        .Range("C17").Formula = Longueur_TeteBobine
        .Range("C5") = Diam_Ext
     
        'résultats Flux2D
        .Range("C20") = FEM_F2D
        .Range("C21") = XdI_F2D
        .Range("C22") = XqI_F2D
        .Range("C23") = N_F2D
        .Range("C24") = I_F2D
        .Range("C25") = NbrePortion_F2D
        .Range("C26") = NbreEncocheParRegion_F2D
        .Range("C27") = TempRotor
        .Range("C28") = L_FuitesTeteBobine
        .Range("C29") = C_reference
     
        'bobinage
        .Range("C32") = NbreSpireParEncoche
        .Range("C34") = NbreVoieParallele
        .Range("C36") = NbreFilsParallele
     
        'constantes
     
        .Range("C40") = Resistivite
        .Range("C41") = TempFroid
        .Range("C42") = PenteCuivre
        .Range("C43") = TempChaud
        .Range("C45") = CoeffDimMagnAim
     
        'pertes
     
    '    .Range("G11") = PferAVide  ' c'est pour eviter de copier la valeur fixe des pertes fer , donc on se base sur la condition Si sur la feuille conversion
     
        .Range("I11") = NPfer
    '    .Range("G12") = Pfrottements
        .Range("I12") = NPfrottements
    '    .Range("G13") = Paeraulique
        .Range("I13") = NPaeraulique
     
        'coefficients de saturation
     
        .Range("F5") = CoupleAVide
        .Range("G5") = CoupleCharge75
        .Range("H5") = CoupleNominal
        .Range("I5") = CoupleCharge15
        .Range("J5") = CoupleCharge18
        .Range("K5") = CoupleCharge2
        .Range("L5") = CoupleCharge25
        .Range("M5") = CoupleCharge3
     
        .Range("F6") = Ld_Vide
        .Range("G6") = Ld_75
        .Range("H6") = Ld_Nom
        .Range("I6") = Ld_15
        .Range("J6") = Ld_18
        .Range("K6") = Ld_2
        .Range("L6") = Ld_25
        .Range("M6") = Ld_3
     
        .Range("F7") = Lq_Vide
        .Range("G7") = Lq_75
        .Range("H7") = Lq_Nom
        .Range("I7") = Lq_15
        .Range("J7") = Lq_18
        .Range("K7") = Lq_2
        .Range("L7") = Lq_25
        .Range("M7") = Lq_3
     
     
        .Range("F8") = Kt_Vide
        .Range("G8") = Kt_75
        .Range("H8") = Kt_Nom
        .Range("I8") = Kt_15
        .Range("J8") = Kt_18
        .Range("K8") = Kt_2
        .Range("L8") = Kt_25
        .Range("M8") = Kt_3
     
     
        .Protect
    End With
     
    End Sub

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Adilleroy et le forum
    Pas sûr de comprendre ta macro , manque certaines infos : comme sa logique
    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
    For Each Feuille In Worksheets
        If ChoixTolerie <> "" And Feuille.Name = "Données tol " & ChoixTolerie Then
            'chargement dans la feuille "conversion" des donnees correspondantes au choix tolerie
            DonneesTolerie
            markerTolerie = True
        End If
     
        If ChoixBobinage <> "" And Feuille.Name = "Données bob " & ChoixBobinage Then
            'chargement dans la feuille "conversion" des donnees correspondantes au choix bobinage
            DonneesBobinage
            markerBobinage = True
        End If
     
        If ChoixApplication <> "" And Feuille.Name = "Données appli " & ChoixApplication Then
            'chargement dans la feuille "Résultats finaux" et "Résultats finaux Imini" des donnees correspondantes au choix application
            DonneesApplication
            markerApplication = True
        End If
     
        If markerTolerie = True And markerBobinage = True And markerApplication = True Then
            marker = True
        End If
    Next Feuille
    Juste une hypothèse d'école :
    Tu as 15 feuilles "Données tol XXX" tu lances ta macro et c'est la première donnéede la première feuille qui correspond à tes besoin. Donc ta macro va parcourir les 14 autres feuilles pour faire ??? Dans le style perdre du temps...
    Mais comme je ne connais pas le fichier...
    A+

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 41
    Points
    41
    Par défaut
    utiliser .range est plus long que utiliser .cells
    J'avais une macro qui utilisait qui faisait des copier-coller avec range, ça prenait 1:30 min et en passant avec cells, ça passé à 20 sec

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    [Salut hbc87 et le forum
    utiliser .range est plus long que utiliser .cells
    Je ne pense pas (comme d'habitude ).
    C'est l'éternel problème de calcul de temps d'exécution des instructions, [], range, cells, offset ou for...each, While...Wend, Do..Loop. À moins de connaître la valeur en cycles horloge, tu ne peux pas le calculer : prend une instruction en boucle 10000 fois sur 10 périodes différentes et tu auras 10 temps différents. Il faudrait que ton PC soit dédié à Excel avec tous les autres services en arrêt. Pas faisable, même en ne lançant que Excel, en ayant isolé ton PC.

    Ne connaissant pas la structure du fichier, la structure des feuilles et le type de fonctionnement de tes macros, on ne peut que donner des conseils génériques.
    - Comme d'interrompre les boucles dès que le résultat attendu est trouvé.
    - ou de changer de méthode de recherche (Find, Filtre...)
    8 fois sur 10, la lenteur vient de là. Pour le reste, la limitation du champ de recherche, l'arrêt du rafraîchissement écran, l'intégration des macros automatiques et la suppression des appels à d'autres macros, permettent aussi d'accélérer.
    A+

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 41
    Points
    41
    Par défaut
    As tu ajouté application.screeningupdate = false au début du code? Ça peut surement aider un peu.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 36
    Points
    36
    Par défaut
    oui je l'ai ajouté mais , ça ne réduit pas le temps d'execution du programme .
    je vous poste ici les deux autres procédures qui s'execute au demarage


    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
     
     
    Public Sub DonneesBobinage()
     
    'valeur par défault
    TempChaud = 120
     
    With Worksheets("Données bob " & ChoixBobinage)
        .Unprotect
     
        Lfer = .Range("E8")
     
        NbreSpire = .Range("E11")
        NbreVoiesParallele = .Range("E12")
        NbreFilsParallele = .Range("E13")
        DiamFilChoisi = .Range("E14")
     
        .Protect
    End With
     
    'copie des donnees dans feuille "Conversion"
    With ThisWorkbook.Worksheets("Conversion")
        .Unprotect
     
        .Range("P5") = Lfer
     
        .Range("P9") = NbreSpire
        .Range("P11") = NbreVoiesParallele
        .Range("p13") = NbreFilsParallele
        .Range("P15") = DiamFilChoisi
     
        .Range("P18") = TempChaud
     
        .Protect
    End With
     
    End Sub
     
    Public Sub DonneesApplication()
     
     
    With ThisWorkbook.Worksheets("Conversion")
        .Unprotect
     
    LferFlux2D = .Range("c8") 'la valeur de Longeur de fer machine réference
    Lfer = .Range("P5") ' la valeur de Lg fer de notre machine
    Cref = .Range("C28") ' la valeur du couple de reference sous flux 2D
     
    End With
     
    With Worksheets("Données appli " & ChoixApplication)
        .Unprotect
     
        'caracteristiques
        Cnom = .Range("c8")
        TempCalcul = .Range("B10")
        Umax = .Range("C12")
        Imax = .Range("C13")
     
        'couples
        Couple1 = .Range("F16")
        Couple2 = .Range("G16")
        Couple3 = .Range("H16")
        Couple4 = .Range("I16")
        Couple5 = .Range("J16")
        Couple6 = .Range("K16")
        Couple7 = .Range("L16")
        Couple8 = .Range("M16")
        Couple9 = .Range("N16")
        Couple10 = .Range("O16")
        Couple11 = .Range("P16")
        Couple12 = .Range("Q16")
     
        'vitesses
        Vitesse1 = .Range("E17")
        Vitesse2 = .Range("E18")
        Vitesse3 = .Range("E19")
        Vitesse4 = .Range("E20")
        Vitesse5 = .Range("E21")
        Vitesse6 = .Range("E22")
        Vitesse7 = .Range("E23")
        Vitesse8 = .Range("E24")
        Vitesse9 = .Range("E25")
        Vitesse10 = .Range("E26")
        Vitesse11 = .Range("E27")
        Vitesse12 = .Range("E28")
     
        .Protect
    End With
     
     
    'copie des donnees dans feuille "Résultats finaux"
    With ThisWorkbook.Worksheets("Résultats finaux")
        .Unprotect
            'caracteristiques
    '    .Range("G3") = Cnom      car j'ai mis une formule sur cette feuille , afin que le couple varie en fonction de la Lfr de notre machine
        .Range("G7") = TempCalcul
        .Range("h9") = Umax
        .Range("h10") = Imax
     
        'couples
        .Range("D18") = Couple1
        .Range("E18") = Couple2
        .Range("F18") = Couple3
        .Range("G18") = Couple4
        .Range("H18") = Couple5
        .Range("I18") = Couple6
        .Range("J18") = Couple7
        .Range("K18") = Couple8
        .Range("L18") = Couple9
        .Range("M18") = Couple10
        .Range("N18") = Couple11
        .Range("O18") = Couple12
     
        'vitesses
        .Range("B19") = Vitesse1
        .Range("B25") = Vitesse2
        .Range("B31") = Vitesse3
        .Range("B37") = Vitesse4
        .Range("B43") = Vitesse5
        .Range("B49") = Vitesse6
        .Range("B55") = Vitesse7
        .Range("B61") = Vitesse8
        .Range("B67") = Vitesse9
        .Range("B73") = Vitesse10
        .Range("B79") = Vitesse11
        .Range("B85") = Vitesse12
     
        .Protect
    End With
     
     
    'copie des donnees dans feuille "Résultats finaux Imini"
    With ThisWorkbook.Worksheets("Résultats finaux Imini")
        .Unprotect
     
        'caracteristiques
    '    .Range("H3") = Cnom     car j'ai mis une formule sur cette feuille , afin que le couple varie en fonction de la Lfr de notre machine
        .Range("G7") = TempCalcul
        .Range("H9") = Umax
        .Range("H10") = Imax
     
        'couples
        .Range("D18") = Couple1
        .Range("E18") = Couple2
        .Range("F18") = Couple3
        .Range("G18") = Couple4
        .Range("H18") = Couple5
        .Range("I18") = Couple6
        .Range("J18") = Couple7
        .Range("K18") = Couple8
        .Range("L18") = Couple9
        .Range("M18") = Couple10
        .Range("N18") = Couple11
        .Range("O18") = Couple12
     
        'vitesses
        .Range("B19") = Vitesse1
        .Range("B25") = Vitesse2
        .Range("B31") = Vitesse3
        .Range("B37") = Vitesse4
        .Range("B43") = Vitesse5
        .Range("B49") = Vitesse6
        .Range("B55") = Vitesse7
        .Range("B61") = Vitesse8
        .Range("B67") = Vitesse9
        .Range("B73") = Vitesse10
        .Range("B79") = Vitesse11
        .Range("B85") = Vitesse12
     
        .Protect
    End With
     
    End Sub

    j'espere que vous m'aidriez à optimiser ses codes , et je vous serez enormements reconnaissant .


    Merci !!!

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour

    je ne vois rien de flagrant

    A tout hasard tu n'aurais pas beaucoups de formules sur tes feuilles car à chaque fois que tu colles une valeur sur ta feuille il y a un recalcul automatique qui est effectué.

    dans ce cas il faudrai gérer ce recalcul automatique

    pour le mettre en manuel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Calculation = xlCalculationManual
    au moment ou tu a besoin de calculer avant de récuperer les résultats
    et en fin de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Calculation = xlCalculationAutomatic
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  17. #17
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 36
    Points
    36
    Par défaut
    Je pense que j'ai trouver , qui cause le probeleme , et çela se passe au niveau de la procédure DonneesApplication() , quand on commence à copier les valeurs de couple et de vitesse sur les feuilles Résultats finaux et Résultats finaux Imini , ca nous renvoie vers

    Private Sub Worksheet_Change(ByVal Target As Range)

    qui sert à lancer presque toutes les macros de mon fichier , ce qui me fait perdre beaucoup de temps .

    l'idée c'est de ne plus basculer sur ce Worksheet_Change(ByVal Target As Range)
    quand on change les valeurs sur les feuilles Résultats .

    Donc si vous avez comment on peut procéder ??

  18. #18
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Pour éviter le lancement des évènements (dont Change), utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = False
    pour le réactiver à la fin du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = True
    ATTENTION:
    Il faut absolument prévoir une gestion d'erreur appropriée pour passer à True (et dans n'importe quel cas de figure)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  19. #19
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 36
    Points
    36
    Par défaut
    Un grand mERCI POUr Vous les gars , vous merritez bien une bouteille de champagne ,, ça& marche à merveille , je suis passer de 2min 30 sec à 4 Sec

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

Discussions similaires

  1. [XL-2007] Optimisation du temps d'exécution d'un code vba
    Par chepa dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/06/2012, 09h39
  2. [datenum] Optimiser le temps d'exécution
    Par xduris dans le forum MATLAB
    Réponses: 11
    Dernier message: 08/08/2007, 16h07
  3. [Fait]Temps d'exécution d'un code
    Par JeremieT dans le forum Contribuez
    Réponses: 2
    Dernier message: 30/08/2006, 06h20
  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