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 d'un code avec 4 compteurs


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
    Mai 2013
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Par défaut Optimisation d'un code avec 4 compteurs
    Bonjour à tous !

    J'ai concu une macro qui colorie des cases en fonction des jours si ils sont travaillés ou non... Cette macro fonctionne mais j'ai l'impression qu'elle est laborieuse.... Pour l'instant c'est juste une version d'essai sur une seule feuille et avec peu de données, et dans le futur tout va grossir...
    A l'heure actuelle, la macro prends environ 7-8 sec alors je n'imagine pas à l'avenir....

    Avez vous des idées pour optimiser ce 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
    Sub color_calendar()
    Sheets("calendrier").Range("B2:AQ30").Interior.ColorIndex = 0
     
    dernlignetravail = Sheets("données").Range("A65536").End(xlUp).Row
    dernligneconges = Sheets("données").Range("C65536").End(xlUp).Row
     
    For i = 2 To 30
    For j = 2 To 43
    For kk = 3 To dernligneconges '= 5 ou 6 environ
    For k = 3 To dernlignetravail ' = 5 ou 6 environ
     
    If Sheets("calendrier").Cells(i, j) <= Sheets("données").Cells(k, 2) _
        And Cells(i, j) >= Sheets("données").Cells(k, 1) Then
           Sheets("calendrier").Cells(i, j).Interior.ColorIndex = 43
     
    Else
     
    If Sheets("calendrier").Cells(i, j) <= Sheets("données").Cells(kk, 4) _
        And Cells(i, j) >= Sheets("données").Cells(kk, 3) Then
           Sheets("calendrier").Cells(i, j).Interior.ColorIndex = 45
    End If
    End If
     
    Next
    Next
    Next
    Next
     
    End Sub

    Merci beaucoup de votre aide !!

  2. #2
    Invité
    Invité(e)
    Par défaut Bonjour,
    donnes un fichier.
    fonction des jours si ils sont travaillés ou non.
    Tu entends quoi par là, samedi, dimanche et jours fériés ?
    Fichiers attachés Fichiers attachés

  3. #3
    Membre habitué
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    donnes un fichier.
    Tu entends quoi par là, samedi, dimanche et jours fériés ?
    Nan j'ai pas la contrainte des jours ouvrés...

    par exemple je renseigne 05/02/2013 et 09/05/2013 et je veux que ca colorie toutes les cases entre les deux dates !

    Ci-joint le fichier pour mieux voir de quoi il s'agit !
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour.

    Commencer par désactiver l'affichage via la propriété ScreenUpdating

    Pour encore réduire le temps, revoir la conception en utilisant des variables tableaux
    (voir le tutoriel Utiliser les variables tableaux en VBA Excel) …


    _______________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    +1 avec mon prédecesseur, mais j'ai en plus un doute sur la double boucle intérieure.

    En effet, tu continues à tester toutes les combinaisons de k et de kk même si tu as trouvé quelques chose. Est-ce que c'est voulu? Il me semble(mais corrige moi si je me trompe) que tu cherches à faire une coloration dès qu'il y a une valeur qui correspond.

    Donc, je dirais une boucle sur le prioritaire, avec mise en couleur si trouvéé, et sinon, une boucle sur le moins prioritaire. Ca nécéssite de déclarer un booleen du genre et de coder un truc du genre(en assumant que k est prioritaire sur kk) :

    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
     
    Trouve = false
    For k = 3 To dernlignetravail ' = 5 ou 6 environ
     
    If Sheets("calendrier").Cells(i, j) <= Sheets("données").Cells(k, 2) _
        And Cells(i, j) >= Sheets("données").Cells(k, 1) Then
           Sheets("calendrier").Cells(i, j).Interior.ColorIndex = 43
           Trouve = true
           Exit For
    End If
    next k
     
    If Trouve
    For kk = 3 To dernligneconges '= 5 ou 6 environ
    If Sheets("calendrier").Cells(i, j) <= Sheets("données").Cells(kk, 4) _
        And Cells(i, j) >= Sheets("données").Cells(kk, 3) Then
           Sheets("calendrier").Cells(i, j).Interior.ColorIndex = 45
           Enf If
    End If
    Next kk
    End If

    Et ensuite, en phase 2, on remplace les cells(kk,4) et cells(k,3) par des tableaux. Plus un screenupdating = false au début( et = true à la fin), et ça devrait tourner beaucoup, beaucoup mieux.

    Mais en fait, rien que le screenupdating devrait, dans ton cas, faire des miracles. Le reste, c'est du bonus.

  6. #6
    Membre habitué
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Par défaut
    Merci beaucoup de vos réponses rapides!!

    J'ai opté pour
    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 color_calendar()
     
    Sheets("calendrier").Range("B2:AQ30").Interior.ColorIndex = 0
     
    dernlignetravail = Sheets("données").Range("A65536").End(xlUp).Row
    dernligneconges = Sheets("données").Range("C65536").End(xlUp).Row
     
    For i = 2 To 30
    For j = 2 To 43
     
    For k = 3 To dernlignetravail ' = 5 ou 6 environ
     
    If Sheets("calendrier").Cells(i, j) <= Sheets("données").Cells(k, 2) _
        And Cells(i, j) >= Sheets("données").Cells(k, 1) Then
           Sheets("calendrier").Cells(i, j).Interior.ColorIndex = 43
    End If
    Next k
     
    For kk = 3 To dernligneconges '= 5 ou 6 environ
    If Sheets("calendrier").Cells(i, j) <= Sheets("données").Cells(kk, 4) _
        And Cells(i, j) >= Sheets("données").Cells(kk, 3) Then
           Sheets("calendrier").Cells(i, j).Interior.ColorIndex = 45
     
    End If
     
    Next kk
     
    Next
    Next
     
    End Sub

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

Discussions similaires

  1. Optimiser code avec date
    Par kopouge dans le forum Macro
    Réponses: 3
    Dernier message: 07/06/2010, 11h56
  2. comment optimiser le code avec visual c# ?
    Par isoman dans le forum C#
    Réponses: 8
    Dernier message: 30/10/2008, 15h05
  3. comment optimiser le code avec eclipse ?
    Par isoman dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 28/10/2008, 16h36
  4. optimiser mon code avec une boucle for?
    Par Invité dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 16/11/2007, 08h33
  5. [PHP-JS] Optimisation du code avec des boucles
    Par jiojioforever dans le forum Langage
    Réponses: 3
    Dernier message: 15/06/2007, 16h02

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