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 :

Accélération programme VBA


Sujet :

Macros et VBA Excel

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 22
    Par défaut Accélération programme VBA
    Bonjour tout le monde

    Le but de ce post est de trouver des conseil ou des avis concernant un programe que j'ai réalisé.
    Le programe fonctionne il est simplement long lorsque je lance la macro "génération tableaux" --> pas loind de 1h de moulinage ^^

    Je pense d'apres ce que j'ai pue observé que le probleme ce situe au niveau de la macro : "RechercheCarton"

    En voici la macro:

    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
    Sub RechercheCarton()
     
    If Worksheets("FRT").Range("B9") = 0 _
        And Worksheets("FRT").Range("B10") = 0 _
        And Worksheets("FRT").Range("B11") = 0 _
        And Worksheets("FRT").Range("B12") = 0 _
        And Worksheets("FRT").Range("B13") = 0 _
        And Worksheets("FRT").Range("B14") = 0 Then
            Worksheets("Matrice").Range("O4") = 0
    Else
        Worksheets("Matrice").Activate
        For Col = 15 To 26
             chercher = chercher & Cells(2, Col)
        Next
        For lig = 2 To 610
             concat = ""
             For Col = 1 To 12
                  concat = concat & Cells(lig, Col)
             Next
             If concat = chercher Then
                  Range("O4") = Cells(lig, 13)
                  Exit For
             End If
        Next
    End If
    Worksheets("FRT").Activate
    End Sub
    Voici en pj mon fichier excel pour plus de détails

    calcul cout transport international V3.xls

    Je suis ouvert a toutes propositions car ma connaissance en VBA reste trés limité au fonctions basiques

    Cordialement

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 16
    Par défaut
    Ajouter en début de code,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    et en fin de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = True
    permet déjà des gains assez sensibles en général (et d'éviter l'effet de "scintillement" quand on navigue entre les pages).

    J'ai pas testé, donc je sais pas si c'est un gros gain ou pas dans ton cas.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 22
    Par défaut
    merci Cyril j'ai testé ca améliore déja un peut.

    Par contre je pense que je pourai encore gagnier du temps au niveau de l'activation des pages

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Worksheets("Matrice").Activate
        For Col = 15 To 26
             chercher = chercher & Cells(2, Col)
        Next
    Y a-t-il un moyen differents que l'activate afin d'éviter de naviguer entre les 2 feuilles ?

  4. #4
    Membre expérimenté Avatar de CODYCO
    Homme Profil pro
    Webplanneur
    Inscrit en
    Avril 2009
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 217
    Par défaut
    essai de travailler avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    With
    '...
    End With

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 22
    Par défaut
    j avais trouver une reponce sur un autre forum a partir du with
    j ai essaiyé (voici le code ci dessous) mais ca me redonne pas les valeurs que je recherche
    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
    Sub RechercheCarton()
     
    Application.ScreenUpdating = False
     
    If Worksheets("FRT").Range("B9") = 0 _
        And Worksheets("FRT").Range("B10") = 0 _
        And Worksheets("FRT").Range("B11") = 0 _
        And Worksheets("FRT").Range("B12") = 0 _
        And Worksheets("FRT").Range("B13") = 0 _
        And Worksheets("FRT").Range("B14") = 0 Then
            Worksheets("Matrice").Range("O4") = 0
    Else
        With Worksheets("Matrice")
        For Col = 15 To 26
             chercher = chercher & Cells(2, Col)
        Next
        For lig = 2 To 610
             concat = ""
             For Col = 1 To 12
                  concat = concat & Cells(lig, Col)
             Next
             If concat = chercher Then
                  Range("O4") = Cells(lig, 13)
                  Exit For
             End If
        Next
        End With
    End If
     
     
    Application.ScreenUpdating = True
     
    End Sub
    Par contre avec active ou select ca me retourne bien les valeurs recherchés

    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
    Sub RechercheCarton() 
    Application.ScreenUpdating = False
     
    If Worksheets("FRT").Range("B9") = 0 _
        And Worksheets("FRT").Range("B10") = 0 _
        And Worksheets("FRT").Range("B11") = 0 _
        And Worksheets("FRT").Range("B12") = 0 _
        And Worksheets("FRT").Range("B13") = 0 _
        And Worksheets("FRT").Range("B14") = 0 Then
            Worksheets("Matrice").Range("O4") = 0
    Else
        Worksheets("Matrice").Activate
        For Col = 15 To 26
             chercher = chercher & Cells(2, Col)
        Next
        For lig = 2 To 610
             concat = ""
             For Col = 1 To 12
                  concat = concat & Cells(lig, Col)
             Next
             If concat = chercher Then
                  Range("O4") = Cells(lig, 13)
                  Exit For
             End If
        Next
    End If
    Worksheets("FRT").Activate
     
    Application.ScreenUpdating = True
     
    End Sub
    donc je sais pas trop ou ca plante ...

  6. #6
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Bonjour tu dis que le problème se déclenche lorsque tu lances :
    lorsque je lance la macro "génération tableaux" --> pas loind de 1h de moulinage ^^
    si tu appuis sur le bouton cout d'envoi, tu fais appel à la macro recherche carton, or la macro se déroule assez rapidement.

    je pense que le problème vient des autres macros: lorsque tu appuies sur
    le bouton de génération de tableaux tu fait appel à d'autres macro:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub MatriceTableauGeneral()
    Call MatriceTableau1
    Call MatriceTableau2
    Call MatriceTableau3
    Call MatriceTableau4
    Call MatriceTableau5
    Call MatriceTableau6
    End Sub
    je vais pas reprendre toutes les autres mais les 6 macros appelées ont toutes la même structure voici la première:
    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
    Sub MatriceTableau1()
    Dim Li As Long
    Dim Col As Long
    Col = 3
    Do Until Col > 10
    Worksheets("FRT").Range("B9") = Worksheets("Tableau Prix-Destinations").Cells(2, Col)
    Li = 3
    Do Until Li > 60
    Worksheets("FRT").Range("A5") = Worksheets("Tableau Prix-Destinations").Cells(Li, 2)
    Call NombreBoite
    Call RechercheCarton
    Call ZonePays
    Call PrixCarton
    Call Indice
    Call FRT
    Worksheets("Tableau Prix-Destinations").Cells(Li, Col) = Worksheets("FRT").Range("I5")
    Li = Li + 1
    Loop
    Li = 3
    Col = Col + 1
    Loop
    Worksheets("FRT").Range("B9") = 0
    Worksheets("FRT").Range("A5") = 0
    Worksheets("FRT").Range("B5") = 0
    End Sub
    or tu utilises une boucle do loop dans une autre qui appelle à chaque tour de boucle d'autres macros et tu fais la même choses dans les 6 macros.

    je pense que ton problème vient plutôt de là.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 22
    Par défaut
    c'est fort probable mais jusqu'a présent c'est le seul moyen que j'ai trouver pour effectuer les actions que j'ai besoin de réaliser, cependant a chaque reéalisation c'est au niveau de la recherche dans la matrice que ca coince par rapport au temps total

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

Discussions similaires

  1. [VBA-E] Help création d'un programme vba pour excel
    Par yampi dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/01/2007, 11h46
  2. [Débutant] Critères de requete sur dates - Programmation VBA
    Par Sofie109 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/01/2007, 15h35
  3. Réponses: 3
    Dernier message: 31/08/2006, 10h22
  4. Réponses: 11
    Dernier message: 27/06/2006, 17h04
  5. Accès outlook par programmation VBA depuis access
    Par STOUPI dans le forum Access
    Réponses: 1
    Dernier message: 05/06/2006, 18h22

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