Programme VBA lent, solutions ?

Vorens

XLDnaute Occasionnel
Bonjour à tous,


J'ai réalisé un programme sur VBA qui traite une très grand nombre d'informations. Pouvant aller jusqu'a ouvrire et fermer des dixaines de fichier excel.

Mon problème est que lorsque j'ouvre certain fichier, l'execution du programme devient très lente.

Le programme effectuer des importations de colonne d'un fichier à l'autres ainsi que le remplacement de valeur éronées.

Mon code ne contient pas d'instruction .activate ou .select.

Si je dois importer 30 colonnes du fichier 1 de l'onglet 1 vers le fichier 2 de l'onglet 2, j'effectue une boucle while avec à chaque eecution l'ordre de passer à la colonne suivante.

Ma questions est comment faire pour que l'execution soit plus rapide ?

Les boucle while sont elles à éviter ?

Peut on utiliser une solution extérieur, c'est à dire un programme fait sur VB6 ou VB express édition 2008 ? Cela va il changer quelque chose ou la lenteur de l'execution vient du fait que les fichier Excel sont trop gros ?

Dans un de mes fichiers peux se trouver 30 onglets avec ds tableau de 5000 lignes, lié entre eux par des pointeurs. ainsi que des calculs par formule. Cela peut il expliquer la lenteur de VBA à manipuler ses fichiers ?


Je n'attend pas de "solutions" miracle mais c'est plus une discutions sur les possibilité de remédier au problème de lenteur par l'ulilisation d'auter chose que VBA et surtout d'identifier les causes d'un ralentissement d'execution d'un programme.

Merci par avance pour votre aide.

Cordialement

Vorens
 

Kiseki

XLDnaute Occasionnel
Re : Programme VBA lent, solutions ?

Bonjour,

Optimize VBA

Ensuite on ne pourra te répondre efficacement qu'avec le(s) fichier(s), tu peux très bien falsifier les données présentes mais garder toute la structure.


Pour un grands nombres de données l'utilisation des variables tableaux accélère beaucoup la procédure.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Programme VBA lent, solutions ?

Bonjour
Il y a de grandes chance d'accélérer l'exécution en mettant, si ce nest fait:
Application.Calculation = xlCalculationManual
au début et
Application.Calculation = xlCalculationAutomatic
à la fin.
Affectez les values de plages en colonnes en un coup si possible.
Une affectation de Value à Value est plus simple à écrire et revient au même qu'une copie puis un collage spécial par valeur.
Les boucles ne sont pas pénalisantes en soit, mais les requêtes Excel, si.
Privilegier les solutions en tout renseigner d'un seul coup.
À+
 
Dernière édition:

Vorens

XLDnaute Occasionnel
Re : Programme VBA lent, solutions ?

Re,

Merci pour vos réponses,

@ Kiseki Merci pour le lien que je vais regarder rapidement. Pour ce qui est de la fasification des données, il y en a tellement que j'en ai pour toute la journées et apres j'aurais le problème de limitation de poid du fichier quand je le poste ici. et si le fichier est plus petit, le problèeme de vitesse diminuece qui n'est plus représentatif.

@Dranreb

Merci pour cette ligne de code que je ne connaissais pas. Application.Calculation = xlCalculationManual

ma question est : elle s'applique pour tout les workbook ouvert ? ou seulement celui qui est actif ?

Si je comprend bien, tu me conseil d'éviter d'effectuer des copy / past spécial.

Ma deuximème question est: comment écrire le code suivant, en methode value => value ?

Code:
Workbooks("toto").Sheets("tata").Range("B1:B600").Copy

Workbooks("titi").Sheets("tratr").Range("A2").Paste

(le .past est un paste spécial en vrai mais sa change pas grand chose pour l'exemple)

Merci encore pour votre aide

Cordialement
 

Kiseki

XLDnaute Occasionnel
Re : Programme VBA lent, solutions ?

Code:
Workbooks("titi").Sheets("tratr").Range("A2:A601") = Workbooks("toto").Sheets("tata").Range("B1:B600").value

Les deux plage doivent avoir une grandeur identique.


Tu peux sélectionner tes données ctrl+bas (et autre, droite, *,...) Mettre un texte et ctrl+enter pour mettre ce texte dans toutes les cellules sélectionnées ou incrémenter toto1 avec double clics plutôt que tirer dessus pour aller jusqu'au bout qu'il lui semble logique.

Tu peux utiliser Cijoint.fr - Service gratuit de dépôt de fichiers qui est limité à 8 mo, sinon megaupload, il en existe d'autres.

Sinon nous exposer cas par cas ou c'est toi qui vois, ça influence la qualités des réponses.
 

Vorens

XLDnaute Occasionnel
Re : Programme VBA lent, solutions ?

Re,

Les réponses sont déjà de très bonne qualités malgré l'absence de fichier =)

Je vais tester tout ses conseils et vois comment évolue mon programme.

Merci encore à vous et je vous shoutaite un agréable jounrée

Cordialement


Vorens
 

Misange

XLDnaute Barbatruc
Re : Programme VBA lent, solutions ?

Bonjour

en français tu as une excellente discussion sur l'optimisation de la rapidité des codes par laurent longre
Ce lien n'existe plus

passer en calcul manuel pendant le code accélère de façon considérable si tu as des colonnes contenant des formules.
Une autre façon d'accélérer considérablement le code c'est d'utiliser à outrance les arrays (tableaux internes) autant que possible. Je viens d'optimiser un de mes très gros classeurs en refaisant tout le code pour que tous les calculs et réorganisation de données soient faits dans un tableau interne qui est transféré en une seule instruction dans la feuille au lieu de le faire ligne à ligne. JE suis passée d'un temps de calcul de plusieurs minutes (un bon café bien chaud !) à quelques secondes.
Des tutos sur ce sujet (8 pages + des exemples multiples à télécharger)
Ce lien n'existe plus
 

Dranreb

XLDnaute Barbatruc
Re : Programme VBA lent, solutions ?

comment écrire le code suivant, en methode value => value ?
Au plus près de l'exemple strictement:
VB:
Dim PlgSrc As Range
Set PlgSrc = Workbooks("toto").Worksheets("tata").Range("B1:B600")
Workbooks("titi").Sheets("tratr").Range("A2").Resize(PlgSrc.Rows.Count, PlgSrc.Columns.Count).Value = PlgSrc.Value
Mais l'exemple étant supposé sorti d'un contexte, on aura souvent les feuilles en variables As Worksheet ou comme CodeName pour celles de ThisWorkbook, et les numéros et nombres de lignes et de colonnes en variables As Long.
À+
 

Vorens

XLDnaute Occasionnel
Re : Programme VBA lent, solutions ?

Re,


Merci pour les lien Misange, je cherchais justement à me former sur l'utilisation des array internes =)

@Dranreb, effectivmenet j'utilise des variables pour les workbooks / sheets / range etc... Mais après c'est juste une question de synthaxe pour adapter ton exemple. Il me fallait la method.

Merci encore pour vos réponses de grande qualité !

Meilleurs salutations

Vorens
 

Discussions similaires

Réponses
8
Affichages
333
Réponses
12
Affichages
711

Statistiques des forums

Discussions
312 344
Messages
2 087 444
Membres
103 546
dernier inscrit
mohamed tano