Accueil > Forum > > > > Optimisation code VBA pour remplissage d'une page
Optimisation code VBA pour remplissage d'une page
mardi 23 juin 2009 à 04:26:46 |
Optimisation code VBA pour remplissage d'une page

violette42
|
Bonjour, je suis novice en developpement dans VBA pour Excel et j'ai un probleme de temps de traitement sur le code suivant: 1) Je fais mes calculs a partir des donnees de ma page (code sans grande importance, je pense, car le temps de traitement est OK pour cette partie): Dim i, j, k As Integer Dim NOMX As Variant Dim nomy As Variant Dim TABprev(300, 300) As Variant For i = 3 To 173 For j = 8 To 64 NOMX = Cells(i, j).Value nomy = 0 l = Int((j - 8) / 3) For v = 65 + l To 83 If NOMX > 1 And l < 18 Then NOMX = NOMX - 1 nomy = nomy + Cells(i, v + 1).Value Else nomy = Round(nomy + NOMX * Cells(i, v + 1).Value) NOMX = 0 Exit For End If Next v TABprev(i, j + 76) = nomy Next j Next i
2) Puis, comme je recupere tous mes resultats de calcul dans le tableau TABprev, je voudrais les reinscrire dans ma page dans des cellules precises: For i = 3 To 173 For j = 84 To 140 Cells(i, j) = TABprev(i, j) Next j Next i
... Et la, probleme, le temps de traitement explose (plus de 200min pour remplir 10000 cellules, sans le moindre calcul!!!). Mon code doit vraiment etre mauvais et je ne sais pas comment l'ameliorer (je code habituellement pour Access ou je n'ai aucun probleme de ce genre...) Merci d'avance pour votre aide et desolee de vous deranger pour un probleme surement tres mineur... Violette
|
|
mardi 23 juin 2009 à 11:17:27 |
Re : Optimisation code VBA pour remplissage d'une page

Mayzz
|
Bonjour, As-tu essayé en remplissant tes cellules directement dans ta première boucle ? Cela peut te faire gagner un peu de temps... En même temps tu rempli un grand nombre de cellules, il est normal que cela prenne du temps. Tu passe par une double boucle et un tableau à deux dimensions pour ton remplissage, cela aussi est assez lent, si tu le faisait avec une simple boucle et un tableau à une dimension, tu aurais forcément un traitement pour retrouver les coordonnées de ta cellule, je ne sais pas vraiment su tu gagnerais au change... @+ Mayzz. Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
|
|
mardi 23 juin 2009 à 11:34:31 |
Re : Optimisation code VBA pour remplissage d'une page

pile_poil
|
ton TABprev étant dimmensioné 300 par 300 tu peux le copier en une seule ligne de code en faisant comme ceci : Range(Cells(3, 84), Cells(303, 384) = TABprev() cette opération prend moins d'une seconde quelque soit la taille si c'est la solution, penser : REPONSE ACCEPTEE
|
|
mardi 23 juin 2009 à 15:27:42 |
Re : Optimisation code VBA pour remplissage d'une page

bigfish_le vrai
|
Salut,
tu en fais, quoi de cette variable tableau TABprev ? est-ce pour transféré des données d'une feuille à une autre ?
si oui ceci devrait faire l'affaire:
ici je suppose que tu travails sur 2 feuilles distincte
1er exemple la plage de destination est srictement placé au meme endroit que la plage source mais dans une autre feuille (evidemment): Sheets("Feuille Destination").Range(Cells(3,84),Cells(173,140)).Value = Sheets("Feuille Source").Range(Cells(3,84),Cells(173,140)).Value
2ieme exemple la plage de destination est placé differemment: Dim MaPlageSource As Range, MaplageDestination As Range With Worksheets("Feuille Source") Set MaPlageSource = .Range(.Cells(3, 84), .Cells(173, 140)) End With With Worksheets("Feuille Destination") Set MaplageDestination = .Range(.Cells(1, 1), .Cells(MaPlageSource.Rows.Count, MaPlageSource.Columns.Count)) End With MaplageDestination.Value = MaPlageSource.Value
2ieme exemple (bis) Dim MaPlageSource As Range With Worksheets("Feuille Source") Set MaPlageSource = .Range(.Cells(2, 2), .Cells(5, 5)) End With MaPlageSource.Copy Destination:=Worksheets("Feuille Destination").Range("A1")
Note que ce type de declaration Dim i, j, k As Integer ne fonctionne pas ! En effet ici seul k est declaré en integer les autres sont Variant. La bonne methode est :
Dim i As Integer, j As Integer, etc
A+
|
|
jeudi 25 juin 2009 à 04:38:40 |
Re : Optimisation code VBA pour remplissage d'une page

violette42
|
Bonjour Mayzz, en fait, j'ai deja essaye de mettre le remplissage des cellules directement dans la boucle de calcul, mais ca ne change pas grand chose au temps de traitement... Je pensais que sortir cette partie permettrait meme de le diminuer, mais visiblement non.  Je vais essayer avec un tableau a un dimension. Merci pour ton aide, je te tiens au courant. Violette
|
|
jeudi 25 juin 2009 à 04:45:15 |
Re : Optimisation code VBA pour remplissage d'une page

violette42
|
Bonjour Pile_poil, je crois qu'avec ta methode j'y suis presque, ca tourne effectivement tres vite, mais, j'ai rien qui s'affiche dans les cases specifiees dans Range. Or, j'ai bien verifie que mon tableau TABprev etait bien rempli. Et si je fais un truc du genre: Range(Cells(3, 84), Cells(303, 384)) = TABprev(3, 84) ca marche, en 1 sec, mais j'ai toutes mes cellules remplies avec la valeur de TABprev(3, 84), ce qui est logique, mais pas ce dont j ai besoin... Bref, on n'est pas loin, mais le TABprev() ne semble pas ecrire les valeurs... Je continue dans cette direction. Si tu as une idee du pourquoi et ce que je peux faire, merci d'avance!
Violette
|
|
jeudi 25 juin 2009 à 04:53:32 |
Re : Optimisation code VBA pour remplissage d'une page

violette42
|
Bonjour Bigfish, cette variable TABprev est un tableau intermediaire dans lequel je place les resultats d'un calcul un peu complique qui prend en entree des valeurs de cette meme page. Ce calcul 'un peu complique' se trouve dans la partie 1) de mon code et le remplissage avec les resultats, dans la meme page, avec les valeurs calculees dans la partie 1), se trouve dans la partie 2). Je ne transfers donc pas des donnees d'une zone a une autre. Maintenant, peut-etre que la solution de placer mes resultats dans un tableau intermediaire n'est pas la meilleure (j'ai l'habitude de faire comme ca quand je code pour Access, mais c'est peut-etre une mauvaise habitude  ) , s'il y a une autre facon d'inscrire directement les resultats dans les cellules cibles, je suis preneuse... Merci pour le conseil sur les declarations (quand je parlais de mauvaises habitudes...  ) Violette
|
|
Cette discussion est classée dans : code, to, for, nomx, nomy
Répondre à ce message
Sujets en rapport avec ce message
Code pour animer un textBox [ par GigaCool ]
Bonjour , Quelqu'un pourait il m'aider à m'ensortir car j'y arrive pas! J'ai un textBox à qui je veux attribuer des valeurs différentes à chaque minu
stp format de email vb6 [ par kamalsw ]
je veux une methode pour la sasie de la formt de l'emailje deja fait cette methode mais ca marche pas autre methode svp If Txt6.Text = "" Then
Tableau [ par Glaudiuus ]
Bonjour, J'essay de faire un tableau à deux dimensions qui me place 5 fois une série de 4 nombre 1, j'ai fait un petit programme mais bon il me fait
Genrerer un calendrier sportif aléatoirement [ par HiKwesT ]
Bonjour,Aprés 3 journées a retourner le probleme dans tout les sens, je m'en remet a vous "VBFrançiens" et a votre logiqueJe souhaite pour ma PTI de f
For i = 1 To 18 [ par petiflamand ]
Y a t-il une possibiliter de faire ceci, j' ai une erreur car rs!bouton & i ne fonctionne pas. Merci If rs.RecordCount > 0 Then rs.MoveFirst Do Unti
VBA Envoi de mail avec Lotus Notes V7 - Problème de password [ par saliardp ]
Bonjour,Je développe actuellement un outil Access qui génère des rapports Excel qui doivent être envoyés à plusieurs destinataires. J'essaie d'automat
VB.Net. Problème avec le DEBUG [ par JeffC1977 ]
Salut à tous...J'ai toujours utilisé le Debug sans problème. Dans mon code que je travaille depuis quelques mois, je n'ai jamis eu de problème...Mais
[VBA Excel] [ par Nyck0las ]
bonjour,j'ai quelques problèmes pour réaliser une macro avec du calcul matriciel.voici une sub qui calcule le produit A*B et le met dans C :Sub PMAT(A
Probleme avec DirectInput [ par spider987 ]
Bonjour à toutes et à tous,je code en ce moment un petit jeu pour m'initier a directX en VB6 ( je sais .NET c mieu et tout lol mais j'ai que cette lic
Livres en rapport
|
Derniers Blogs
[SHAREPOINT] NOUVELLE PRéSENTATION POUR LA DOCUMENTATION SHAREPOINT SUR TECHNET.[SHAREPOINT] NOUVELLE PRéSENTATION POUR LA DOCUMENTATION SHAREPOINT SUR TECHNET. par Patrick Guimonet
Vous l'avez peut-être déjà remarqué ? La documentation SharePoint a subit un cure de "relooking" et prend un style inspiré de Metro, donc plus sobre, plus pur, plus clair ! C'est sur fond blanc et ca ressemble à ça : Globaleme...
Cliquez pour lire la suite de l'article par Patrick Guimonet ASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHEASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHE par fathi
Tout le monde est unanime pour dire que la programmation multi-thread et asynchrone est en train de devenir un sujet incontournable. Beaucoup de choses sont arrivées avec le framework 4 pour le code parallèle (TPL, PLinq,.) et bientôt, on va avoir l...
Cliquez pour lire la suite de l'article par fathi PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS !PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS ! par Etienne Margraff
J'ai récemment eu un problème pour obtenir l'intelliTrace sur un site web dans IIS. Il n'y avait pas de message d'erreur, rien dans le journal d'évènement Windows, et après 3 appels à une voyante, 2 visites chez un marabou, j'ai failli me résign...
Cliquez pour lire la suite de l'article par Etienne Margraff OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en œuvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|