begin process at 2012 02 16 01:04:10
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

J'AI BESOIN D'AIDE !!!! :)

 > 

Optimisation de code : Accélerer du code


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Optimisation de code : Accélerer du code

vendredi 26 août 2005 à 15:26:07 | Optimisation de code : Accélerer du code

pier0

Slt,
Je viens de terminer un programme (de gestion d'un planning excel) sur VBA composé de plusieurs modules je cherche à l'optimiser (de manière simple si possible).

après plusieurs test j'ai cru identifier ce qui mettait le plus de temps à tourner:

Deux boucles for imbriqueées:
********************************************************************************  
  For i = 1 To lgne_max_Planning

        If (Worksheets("Planning").Cells(i, 1).Value <> Empty) Then
            If ((Worksheets("Planning").Cells(i, 1).Value <> "LUNDI") And (Worksheets("Planning").Cells(i, 1).Value <> "MARDI") And (Worksheets("Planning").Cells(i, 1).Value <> "MERCREDI") And (Worksheets("Planning").Cells(i, 1).Value <> "JEUDI") And (Worksheets("Planning").Cells(i, 1).Value <> "VENDREDI") And (Worksheets("Planning").Cells(i, 1).Value <> "SAMEDI") And (Worksheets("Planning").Cells(i, 1).Value <> "DIMANCHE")) Then

                        semaphore = False                   'init semaphore (semaphore=True indique qu'une commande  a été trouvée dans les 2 feuilles (OHS et Planning))

'                       Boucle de recherche de commande (indexée par j dans feuille OHS) de feuille Planning
                        For j = 2 To lgne_max_OHS
                            If (Worksheets("OHS").Cells(j, l).Value <> Empty) Then

                                        If Worksheets("OHS").Cells(j, l).Value = Worksheets("Planning").Cells(i, 1).Value Then

                                            semaphore = True
                                            

                                            Sheets("Planning").Rows(i).Copy

                                            Sheets("Résultats de comparaison").Rows(k).Select                              
                                            ActiveSheet.Paste

                                            Sheets("OHS").Select
                                            Range(Cells(j, 2), Cells(j, nb_col_OHS)).Select                                
                                            Selection.Copy
                                            Sheets("Résultats de comparaison").Select
                                            Range(Cells(k, 3), Cells(k, nb_col_OHS + 1)).Select
                                            ActiveSheet.Paste
                                            
                                            Worksheets("Résultats de comparaison").Cells(k, 2).Value = EID_Planning        

                                            k = k + 1                                                                      
                                        End If
                            End If
                        Next j
                        
                        If semaphore = False Then
                                            Sheets("Planning").Rows(i).Copy
                                            Sheets("Résultats de comparaison").Select
                                            Rows(k).Select
                                            ActiveSheet.Paste

                                            Cells(k, (l + 1)).Value = "MISE A JOUR IMPOSSIBLE!"                            
                                            Rows(k).Font.ColorIndex = 15                                                  

                                            k = k + 1
                        End If
            Else                                                                                                            
      
'          Recopie de la date situé à coté du jour dans l'extract Planning dans la variable EID_Planning
                                            Sheets("Planning").Rows(i).Copy
                                            Sheets("Résultats de comparaison").Select
                                            Rows(k).Select
                                            ActiveSheet.Paste
'                                             MsgBox ("cellule=") & Worksheets("Résultats de comparaison").Cells(k, 1).Value
                                            
                                            Select Case (Worksheets("Résultats de comparaison").Cells(k, 1).Value)        
                                                 Case "LUNDI"                                                              
                                                    EID_Planning = Worksheets("Résultats de comparaison").Cells(k, 2).Value
                                                    Rows(k).Font.Bold = True                                              
                                                 Case "MARDI"                                                              
                                                    EID_Planning = Worksheets("Résultats de comparaison").Cells(k, 2).Value
                                                    Rows(k).Font.Bold = True
                                                 Case "MERCREDI"                                                        
                                                    EID_Planning = Worksheets("Résultats de comparaison").Cells(k, 2).Value
                                                    Rows(k).Font.Bold = True
                                                 Case "JEUDI"                                                        
                                                    EID_Planning = Worksheets("Résultats de comparaison").Cells(k, 2).Value
                                                    Rows(k).Font.Bold = True
                                                 Case "VENDREDI"                                                          
                                                    EID_Planning = Worksheets("Résultats de comparaison").Cells(k, 2).Value
                                                    Rows(k).Font.Bold = True
                                                 Case "SAMEDI"                                                            
                                                    EID_Planning = Worksheets("Résultats de comparaison").Cells(k, 2).Value
                                                    Rows(k).Font.Bold = True
                                                 Case "DIMANCHE"                                                          
                                                    EID_Planning = Worksheets("Résultats de comparaison").Cells(k, 2).Value
                                                    Rows(k).Font.Bold = True
                                                 Case Else                                                                
                                                     MsgBox ("autre cas!ligne=") & k & (" cellule_colonne1=") & (Worksheets("Résultats de comparaison").Cells(k, 1).Value)
                                            End Select
                                            
                                            k = k + 1                                                                      
            End If
        End If

    Next i

********************************************************************************

ansi que plusieurs enregtrements de fichier.

Si qqu'un connait un moyen d'accélérer mon code (par exemple en augmentant les ressources microprocesseur afin de réaliser les taches de mon prog de facon prioritaire) je le remercie par avance de me venir en aide.

Rq: j'ai deja effectué des petites optimisations du genre:
-le moins de variable globale possible
-le moins d'enregitrement de fichiers possibles
-le moins d'appel de fonction possible
-le moins de test possible, surtout dans les boucles
-le moins de variable intermédiaires superflues
-geler la mise à jour de l'affichage pendant l'éxecution de mon programme
-minimiser les msgbox

Merci d'avance pour vos suggestions, @+, Pier0
vendredi 26 août 2005 à 15:50:49 | Re : Optimisation de code : Accélerer du code

crenaud76

Réponse acceptée !
première remarque : pour ton Select case, moi je ferais ceci :
With Worksheets("Résultats de comparaison").Cells(k, 2)
  Select Case (Worksheets("Résultats de comparaison").Cells(k, 1).Value)        
    Case "LUNDI"                                                              
      EID_Planning = .Value
      Rows(k).Font.Bold = True                                              
    Case "MARDI"                                                              
      EID_Planning = .Value
      Rows(k).Font.Bold = True
    Case "MERCREDI"                                                        
      EID_Planning = .Cells(k, 2).Value
      Rows(k).Font.Bold = True
    Case "JEUDI"                                                        
      EID_Planning = .Value
      Rows(k).Font.Bold = True
    Case "VENDREDI"                                                          
      EID_Planning = .Value
      Rows(k).Font.Bold = True
    Case "SAMEDI"                                                            
      EID_Planning = .Value
      Rows(k).Font.Bold = True
    Case "DIMANCHE"                                                          
      EID_Planning = .Value
      Rows(k).Font.Bold = True
    Case Else                                                                
      MsgBox ("autre cas!ligne=") & k & (" cellule_colonne1=") & (Worksheets("Résultats de comparaison").Cells(k, 1).Value)
  End Select
End With
En plus c'est largement plus lisible ...
vendredi 26 août 2005 à 16:10:57 | Re : Optimisation de code : Accélerer du code

pier0

Réponse acceptée !
Ouè c clair que c plus lisible mais j'ai tj entendu que plus c'est optimisé moin c'est lisible! Alors est ce vraiment une optimisation en terme de vitesse d'execution du code.
Merci de tes conseils, j'aattend ta réponse pour pouvoir tester ton optimisation...
@+, encore merci, Pier0
vendredi 26 août 2005 à 17:20:43 | Re : Optimisation de code : Accélerer du code

pcpt

Administrateur CodeS-SourceS
Réponse acceptée !

le With est plus rapide.

j'ai pas regardé, je modifie à peine le conseil de Creanaud :


Dim RdcS as String: RdcS = "Résultats de comparaison"

With Worksheets(RdcS).Cells(k, 2)
   Select Case (Worksheets(RdcS).Cells(k, 1).Value)         
    
      Case "LUNDI", "MARDI", "JEUDI", "VENDREDI", "SAMEDI", "DIMANCHE"
         EID_Planning = .Value: Rows(k).Font.Bold = True
   
      Case "MERCREDI"
         EID_Planning = .Cells(k, 2).Value: Rows(k).Font.Bold = True

      Case Else
         MsgBox "autre cas!ligne = " & k & " cellule_colonne1 = " & Worksheets(RdcS).Cells(k, 1).Value

   End Select
End With


PCPT



Cette discussion est classée dans : résultats, value, cells, worksheets, planning


Répondre à ce message

Sujets en rapport avec ce message

Besoin d'aide d'un expert en optimisation de boucle [ par pier0 ] Bonjour, Voici une bout de code qu'il faut que j'optimise en terme de rapidité: en pratique: la variable lgne_max_OHS sera de l'odre de 1500 et lgne_ Accélération et simplification de code [ par pier0 ] Slt, je cherche à optimiser(en terme de rapidité d'éxecution et de lisibilité) le bout de code suivant: ******************************************** Question sur la syntaxe VB [ par pier0 ] Bonjour, J'ai une petite question sur la syntaxe VB. En fait j'ai écris une ligne de commande qui est très longue et prend plus de place que la largeu Parser avec Split pour Excel 97 [ par Eldros ] J'ai un tableau Excel qui contient une colonnes avec des cellules ayant un contenu sur plusieurs ligne (donc saut à la ligne). Le problème c'est qu'el comparer deux feuilles Excel! Pourquoi mon programme ne marche pas!??? [ par dannie_m ] Salut, Je suis une débutante en VBA. Je dois faire le plus rapidement possible la comparaison de deux feuilles Excel. J'ai fais comme j'ai pu en lisa Macro qui ne se lance que sur un onglet [ par Don_Cagoule ] Bonjour,Je fais face à un problème d'exécution dans l'un de mes tableurs excel, et comme j'ai déjà trouvé pas mal de réponses sur ce site, j'espère qu [vb6 excel] [ par tof008 ] Bonjour à tous! J'espere trouver une âme charitable qui pourra m'aider à résoudre mon problême... A partir de vb6, j'envoie des infos sous excel puis problème avec .findnext sous VBA [ par jordinette ] REvoici mon code, lorske je le lance au premier find il trouve une seule foi la valeur "composan" ce ki correspond a ce ke jai ds ma colonne. Lors du Graph ss excel via VB6 [ par liliesma ] J'ai fais une appli sous VB6, afin de la compléter et d'enfin la terminée, il ne me reste plus qu'une seule chose à faire.Cette chose c'est faire un h [vb6] excel et vb6 message d'erreur [ par tof008 ] Hello! Petit probleme : j'ouvre excel à partir de vb pour y faire des stats, et en fait, j'utilise le meme procédé en changeant juste ma requete... mo


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,136 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales