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 :

Macro à traitement long [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 8
    Par défaut Macro à traitement long
    Bonsoir,

    j'ai un code (ci dessous) qui travaille sur 2 onglets comportant beaucoup de ligne.
    Le compteur_CBN va jusqu'à 700 lignes
    Le compteur_sortir va jusqu'à 6000 lignes

    Malgré la variable tableau le code est extrêmement long, pouvez vous m'aider à accélérer ce traitement

    Merci de votre aide

    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
    Sub Sorties_9_semaines_avec_if_tableau()
        Dim Compteur_CBN As Integer
        Dim Nb_Lg_CBN As Integer
        Dim Nb_Lg_CBN_Calcul As Integer
        Dim Ref_CBN As String
        Dim Compteur_Sortie As Integer
        Dim Nb_Lg_Sortie As Integer
        Dim Ref_Sortie As String
        Dim Compteur_Sem As Integer
        Dim No_Sem_CBN As String
        Dim No_Sem_Sortie As String
        Dim Nb_Lg_Tablo As Integer
        Dim Somme_Qte As Long
        Dim Tablo_Qte_Sortie As Variant
        '*********************************************
        With Sheets("CBN")
            Nb_Lg_Sortie = Sheets("Rq Sorties").Range("A" & Rows.Count).End(xlUp).Row
            Nb_Lg_CBN = .Range("C" & Rows.Count).End(xlUp).Row
            Nb_Lg_CBN_Calcul = .Range("Q" & Rows.Count).End(xlUp).Row
            If Nb_Lg_CBN_Calcul > Nb_Lg_CBN Then
                .Range("Q7:Y" & Nb_Lg_CBN_Calcul).ClearContents
            Else
                .Range("Q7:Y" & Nb_Lg_CBN).ClearContents
            End If
            '**********************************************
            Nb_Lg_Tablo = Nb_Lg_CBN - 6
            ReDim Tablo_Qte_Sortie(1 To Nb_Lg_CBN - 6, 1 To 9)
            For Compteur_Sem = 1 To 9
                No_Sem_CBN = .Cells(6, Compteur_Sem + 16).Value
                For Compteur_CBN = 7 To 10    'Nb_Lg_CBN
                    Somme_Qte = 0
                    Ref_CBN = .Range("C" & Compteur_CBN).Value
                    For Compteur_Sortie = 2 To Nb_Lg_Sortie
                        Ref_Sortie = Sheets("Rq Sorties").Range("A" & Compteur_Sortie).Value
                        No_Sem_Sortie = Sheets("Rq Sorties").Range("H" & Compteur_Sortie).Value
                        If Ref_Sortie = Ref_CBN And No_Sem_Sortie = No_Sem_CBN Then
                            Somme_Qte = Somme_Qte + Sheets("Rq Sorties").Cells(Compteur_Sortie, 4)
                        End If
                    Next Compteur_Sortie
                    Tablo_Qte_Sortie(Compteur_CBN - 6, Compteur_Sem) = Somme_Qte
                Next Compteur_CBN
            Next Compteur_Sem
            .Range("Q7").Resize(UBound(Tablo_Qte_Sortie), UBound(Tablo_Qte_Sortie, 2)) = Tablo_Qte_Sortie
        End With
    End Sub

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour accélérer la vitesse d'exécution d'une procédure qui écrit dans une feuille excel, il y a plusieurs méthodes à ta disposition qu'il faut placer en début de procédure pour l'activer et en fin de procédure pour la désactiver.
    L'une d'elle est Application.ScreenUpdating = False qui désactive l'affichage de l'écran.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Expert éminent 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
    Par défaut
    Essaies ceci
    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
    Sub Sorties_9_Semaines_Avec_If_Tableau()
    Dim RefCBN As String, RefSortie As String, NoSemCBN As String, NoSemSortie As String
    Dim NbLgSortie As Long, NbLgCBN As Long, NbLgCBNCalcul As Long, k As Long, j As Long
    Dim Qte As Double, TabloQteSortie() As Double
    Dim Sortie, CBN, REF
    Dim i As Byte
     
    Application.ScreenUpdating = False
    With Worksheets("Rq Sorties")
        NbLgSortie = .Range("A" & .Rows.Count).End(xlUp).Row
        Sortie = .Range("A1:H" & NbLgSortie)
    End With
     
    With Sheets("CBN")
        NbLgCBN = .Range("C" & .Rows.Count).End(xlUp).Row
        If NbLgCBN > 6 Then
            NbLgCBNCalcul = .Range("Q" & .Rows.Count).End(xlUp).Row
            .Range("Q7:Y" & Application.Max(NbLgCBNCalcul, NbLgCBN)).ClearContents
            CBN = .Range("Q6:Y6")
            REF = .Range("C7:C" & NbLgCBN)
            '**********************************************
            NbLgCBN = NbLgCBN - 6
            ReDim TabloQteSortie(1 To NbLgCBN, 1 To 9)
            For i = 1 To 9
                NoSemCBN = CBN(1, i)
                For j = 1 To NbLgCBN
                    RefCBN = REF(j, 1)
                    For k = 2 To NbLgSortie
                        RefSortie = Sortie(k, 1)
                        NoSemSortie = Sortie(k, 8)
                        If RefSortie = RefCBN And NoSemSortie = NoSemCBN Then Qte = Qte + Sortie(k, 4)
                    Next k
                    TabloQteSortie(j, i) = Qte
                    Qte = 0
                Next j
            Next i
            .Range("Q7").Resize(NbLgCBN, 9) = TabloQteSortie
        End If
    End With
    End Sub

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 8
    Par défaut
    Merci, je fais des tests et vous dit ce que ça donne
    Super, 39 secondes de traitement.

    Merci

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

Discussions similaires

  1. Aide pour définir des index (traitement long)
    Par m-mas dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 25/05/2006, 21h39
  2. [VBA-E] Temps de traitement long
    Par argoet dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 24/05/2006, 10h58
  3. [Oracle8i]Performances, Commit, traitement long
    Par Drizzt [Drone38] dans le forum Oracle
    Réponses: 4
    Dernier message: 17/05/2006, 09h57
  4. [Architecture] Traitement long
    Par metalpetsFR dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 11
    Dernier message: 28/04/2006, 10h10
  5. Fermeture avec traitement long dans le onActivate
    Par benj63 dans le forum C++Builder
    Réponses: 14
    Dernier message: 20/03/2006, 19h54

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