Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1194 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Optimisation de macro

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation de macro

n°1886555
fluminis
Posté le 20-05-2009 à 15:13:30  profilanswer
 

Bonjour tout le monde,
 
Voila ma problématique :
Dans Excel 2003, je dois vérifier que dans ma feuille Données brutes l'id se trouvant dans la colonne B ne se trouve pas dans la feuille Stock colonne A.
 
Je suis vers dans la solution "formule dans les cellules" avec = SI(ESTNA(RECHERCHEV(... ça fonctionnait très bien mais recalculait tout le temps les formules dès que je faisais une modif ou une sauvegarde.
 
Donc je me suis dit, je vais faire une macro qui va mettre le résultat en dur dans mes cellules. Il me suffira de lancer la macro quand j'en ai besoin.
 
Mais c'est terriblement long ! (4500 lignes traitées en 10min)
 
Le fichier xls doit bien faire dans les 15mo, avec 15 000 lignes dans la feuille Données brutes et 12 000 dans Stock.
 
Auriez vous une idée d'optimisation de ma macro ou une solution autre pour que cette mise a jour soit plus rapide ?
 
Merci d'avance
 
Flu
 

Code :
  1. Application.ScreenUpdating = False
  2.     Application.DisplayStatusBar = True
  3.    
  4.     maxRowDB = Sheets("Données brutes" ).Cells(65536, 1).End(xlUp).Row
  5.    
  6.     maxRowStock = Sheets("Stock" ).Cells(65536, 1).End(xlUp).Row
  7.    
  8.     For i = 2 To maxRowDB
  9.         val1 = Sheets("Données brutes" ).Cells(i, 2)
  10.         trouve = False
  11.        
  12.         If i Mod 10 = 0 Then
  13.             DoEvents
  14.         End If
  15.        
  16.         Application.StatusBar = "Mis a jour ligne " & i & "..."
  17.        
  18.         For j = 2 To maxRowStock
  19.             If val1 = Sheets("Stock" ).Cells(j, 1) Then
  20.                 Sheets("Données brutes" ).Cells(i, 15) = "/!\"
  21.                 'MsgBox i & 15 & " : /!\"
  22.                 trouve = True
  23.                 Exit For
  24.             End If
  25.         Next
  26.         If Not trouve Then
  27.             Sheets("Données brutes" ).Cells(i, 15) = "REJOUE"
  28.             'MsgBox i & 15 & " : REJOUE"
  29.         End If
  30.     Next
  31.    
  32.     Application.ScreenUpdating = True


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
mood
Publicité
Posté le 20-05-2009 à 15:13:30  profilanswer
 

n°1886582
Deamon
Posté le 20-05-2009 à 15:39:26  profilanswer
 

Si tu connais le Java tu peux faire un programme dans ce langage. Avec la bonne librairie il est facile de manipuler des fichiers Excel. Et niveau performance ça n'a vraiment rien à voir avec le VBA qui est affreusement lent.
J'ai déjà réalisé un programme comme cela pour vérifier des fichiers aussi gros que les tiens. Pour certains, avec Java le temps nécessaire était jusqu'à 20 fois inférieur qu'avec VBA (mais il faut dire que les macros n'étaient pas très optimisées non plus).

n°1886770
otobox
Maison fondée en 2005
Posté le 21-05-2009 à 07:10:37  profilanswer
 

- Pour éviter le recalcul automatique de tes cellules, tu peux aller dans les options et décocher la case du calcul auto.
- Sinon, pour ton algo, je ne sais pas trop, j'aurais fait à peu près la même chose. Peut être que tu pourrais faire d'abord un tri sur tes colonnes iD pour éviter de devoir repartir systématiquement du haut de la liste dans ta deuxième table.
- Une dernière solution (que je n'ai jamais fait avec Excel, mais je pense que c'est possible), c'est faire une requête sql.


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Optimisation de macro

 

Sujets relatifs
[VBA] Problème double macrolenteur macro excel
[Macro]Assigner Prog a la sourisOptimisation processeur GCC g++
optimisation MySQL possible ? [Résolu][idée] optimisation : balises codées en binaire
macro simple pour récuper des donnéesCréation macro VBA - Problème tordu
Problème macro propriétés masse SolidWorksAppel macro d'un autre classeur
Plus de sujets relatifs à : Optimisation de macro


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR