VBA - Regrouper des lignes de code pour execution plus rapide

LORDDD

XLDnaute Occasionnel
Bonjour à vous tous,

Voici un morceau code ci dessous, est il possible de regrouper des instructions pour faire acceler le calcul :

par exemple ces 2 lignes :
Worksheets(datejour).Select
date2 = Cells(ii + 4, 1) ---> les regrouper en une seule ecriture


Code:
'Copie des segments par regroupement du classeur Data Vers classeur Cales Hotel 1
Worksheets("HOTEL 1").Select
Range("d7:m372").ClearContents
For i = 0 To 365 'compteur du tableau de synthese ligne
Worksheets("HOTEL 1").Select
date1 = Cells(i + 7, 3)
    For ii = 0 To 731 'compteur du tableau source ligne
    Worksheets(datejour).Select
    date2 = Cells(ii + 4, 1)
    If date1 = date2 Then
        For iii = o To 9 'compteur tableau de synthese colone
        Som = 0
        Worksheets("HOTEL 1").Select
        cel1 = Cells(5, iii + 4)
            For iiii = o To 26 'compteur tableau source colone
            Worksheets(datejour).Select
            cel2 = Cells(2, iiii + 2)
            If cel2 = cel1 Then
            Som = Som + Cells(ii + 4, iiii + 2)
            End If
            Next iiii
        Worksheets("HOTEL 1").Cells(i + 7, iii + 4) = Som
        Next iii
    End If
    Next ii

Merci par avance de votre coup de pouce
Bonne journée
 

Caillou

XLDnaute Impliqué
Re : VBA - Regrouper des lignes de code pour execution plus rapide

Bonjour,

De façon générale, pour une exécution plus rapide du code, il faut éviter les Select en VBA.
Par exemple, au lieu de :
Code:
Worksheets(datejour).Select
date2 = Cells(ii + 4, 1)
tu écris :
Code:
date2 = Worksheets(datejour).Cells(ii + 4, 1)

Tu peux également ajouter cette ligne au début de code :
Code:
Application.ScreenUpdating = False
pour désactiver le rafraichissement de l'écran.

Caillou
 

Efgé

XLDnaute Barbatruc
Re : VBA - Regrouper des lignes de code pour execution plus rapide

Bonjour LORDDDm Cela doit être très long en effet.... Supprime ces vilains Select:
VB:
date2 = Worksheets(datejour).Cells(ii + 4, 1)
Cordialement EDIT Bonjour Caillou
 

LORDDD

XLDnaute Occasionnel
Re : VBA - Regrouper des lignes de code pour execution plus rapide

Bonjour et merci à vous deux,

Je part mettre en pratique tous cela, chronos en main....

Car effectivement beaucoup d'aller retour d'une feuille a l'autre pour aditionner, recopier et soustraire les donnée.

Je suis qu'un débutant donc manque de reflex en écriture.

Merci a vous deux, bon Am
 

LORDDD

XLDnaute Occasionnel
Re : VBA - Regrouper des lignes de code pour execution plus rapide

OUAHOOOOO,

Ca ce fait peut etre pas mais GRAND MERCI a vous deux, de 4 minute de calcul je passe à 30 secondes (et je dois le chaque fois 4 fois)...

Encore grand merci de ce truc.
voila ce que ca donne maintenant ( pour ceux qui en aurait besoin) :

Code:
'Copie des segments par regroupement du classeur Data Vers classeur Cales Hotel 1
Worksheets("HOTEL 1").Select
Range("d7:m372").ClearContents
For i = 0 To 365 'compteur du tableau de synthese ligne
date1 = Worksheets("HOTEL 1").Cells(i + 7, 3)
    For ii = 0 To 731 'compteur du tableau source ligne
    date2 = Worksheets(datejour).Cells(ii + 4, 1)
    If date1 = date2 Then
        For iii = o To 9 'compteur tableau de synthese colone
        Som = 0
        cel1 = Worksheets("HOTEL 1").Cells(5, iii + 4)
            For iiii = o To 26 'compteur tableau source colone
            cel2 = Cells(2, iiii + 2)
            If cel2 = cel1 Then
            Som = Worksheets(datejour).Cells(ii + 4, iiii + 2) + Som
            
            End If
            Next iiii
        Worksheets("HOTEL 1").Cells(i + 7, iii + 4) = Som
        Next iii
    End If
    Next ii
 

Efgé

XLDnaute Barbatruc
Re : VBA - Regrouper des lignes de code pour execution plus rapide

Re, 30 secondes pour ça me parraissent bien longues. Commence par modifier ton clearContents
VB:
Worksheets("HOTEL 1").Range("d7:m372").ClearContents
Ensuite comme l'a dis Caillou utilise
VB:
Application.ScreenUpdating = False
en début de procédure, et mets également
VB:
Application.Calculation = xlCalculationManual
Réactive le calcul ç la fin de ton code avec;
VB:
Application.Calculation = xlCalculationAutomatic
Ensuite regarde qi tu as des macros evennementielles dans ta feuilles HOTEL 1 Cordialement
 

LORDDD

XLDnaute Occasionnel
Re : VBA - Regrouper des lignes de code pour execution plus rapide

Efgé,

Le ClearContents changé, ok
LeApplication.ScreenUpdating = False/True changé, ok
Concernant le calcul auto activ ou non je vais le mettre en place

Le temps me parait correct il controle 731 lignes 365 fois et ensuite fait des addition (10).

Merci
 

LORDDD

XLDnaute Occasionnel
Re : VBA - Regrouper des lignes de code pour execution plus rapide

Oui car je veux des tableaux avec calcul de donnée souple (changer les date etc...) sans plus avoir a toucher au code.

Il me reste encore quelques modif a faire pour automatiser la dernierne cellule nonvide des formules for x = 0 to ??,
Je travail sur des tableau de donnée de 2ans, 4 etbalissements, 26 segments.

Ce calcul est fait une fois par jour par rapport a ma base de donnée extraite journalierement. a aujourd'hui le meme travail avec des formule mets plus de 15 minute, avec l impossibilite de travailler sur le tableau de synthese au risque de relancer un calcul.

Alors maintenant avec moins de 3 minute de calcul pour tout avoir nickel, moi je suis preneur lol.

Merci de ton aide, cela me permet d'avancer plus vite (j'y suis depuis le début de la semaine...)

A+
 

soumus

XLDnaute Junior
Re : VBA - Regrouper des lignes de code pour execution plus rapide

Bonjour a tous
moi mon probleme est tout autre je dispose d'un Userforme avec 2 listbox: dans la premiere listbox nommée "listbox2" je selectionne les éléments que je souhaite afficher dans la deuxieme listbox nommée "listbox1 " .Mon soucis lorsque je coche sur l'option "choix plusieurs paramétres" ou sur l'option "choix étendue" ;les éléments choisis dans listbox2 ne s'affiche pas automatiquement dans listbox1.

Vous pouvez retrouver le fichier joint dans le forum "Choix Multiple Listbox et transfert choix"

Si vous avez un code pour ça.

Votre aide.
 

soumus

XLDnaute Junior
Re : VBA - Regrouper des lignes de code pour execution plus rapide

Bonjour a tous
moi mon probleme est tout autre je dispose d'un Userforme avec 2 listbox: dans la premiere listbox nommée "listbox2" je selectionne les éléments que je souhaite afficher dans la deuxieme listbox nommée "listbox1 " .Mon soucis lorsque je coche sur l'option "choix plusieurs paramétres" ou sur l'option "choix étendue" ;les éléments choisis dans listbox2 ne s'affiche pas automatiquement dans listbox1.

Vous pouvez retrouver le fichier joint dans le forum "Choix Multiple Listbox et transfert choix"

Si vous avez un code pour ça.

Votre aide.[/QUOTE]
 

Pièces jointes

  • PRODUCTION_1ER_SEMESTRE_2010.XLS
    428.5 KB · Affichages: 34
  • PRODUCTION_1ER_SEMESTRE_2010.XLS
    428.5 KB · Affichages: 44
  • PRODUCTION_1ER_SEMESTRE_2010.XLS
    428.5 KB · Affichages: 72

LORDDD

XLDnaute Occasionnel
Re : VBA - Regrouper des lignes de code pour execution plus rapide

Bonjour SOUMUS,

Bienvenue, ce n'est pas que je veuille de sortir, lol, mais il me semble que ton post n'est pas tout a fait ds la meme ligné que le mien.

Pour plus d'efficacite place ton poste ds une nouvelle discussion, avec un titre explicite(c est le plus dur), pour qu'un de nos super expert, passe te donner un coup de main, car moi simple débutant.

Bonne journée, et encore une fois soit le bienvenue ici, les expert sont trés demandé, mais tres cool....

A+
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 838
dernier inscrit
Christelle.B86