VBA Excel et Access - Plantage mystère
Résolu
Phoenellion
Messages postés
116
Date d'inscription
Statut
Membre
Dernière intervention
-
Phoenellion Messages postés 116 Date d'inscription Statut Membre Dernière intervention -
Phoenellion Messages postés 116 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai codé une petite macro qui s'exécute depuis access et effectue des manipulations dans excel et access, iren de méchant, si ce n'est la grandeur des bases de données.
la macro fonctionne très bien en pas à pas(F8), mais si je la lance la macro (F5) elle plante.
Cependant, si je l'initie avec F8 puis faits quelques lignes en pas à pas puis la laisse finir en appuyant sur F5, elle se termine sans aucun problème.
J'ai le même problème avec une aurtre macro, plus consistante celle là, qui ne s'exécute qu'en pas à pas, et l'astuce du F8 puis F5 ne fonctionne pas, donc je suis encore plus dépité.
besoin que je copie le code ou cette description évoque quelque chose à quelqu'un ?
@+
Phoe
j'ai codé une petite macro qui s'exécute depuis access et effectue des manipulations dans excel et access, iren de méchant, si ce n'est la grandeur des bases de données.
la macro fonctionne très bien en pas à pas(F8), mais si je la lance la macro (F5) elle plante.
Cependant, si je l'initie avec F8 puis faits quelques lignes en pas à pas puis la laisse finir en appuyant sur F5, elle se termine sans aucun problème.
J'ai le même problème avec une aurtre macro, plus consistante celle là, qui ne s'exécute qu'en pas à pas, et l'astuce du F8 puis F5 ne fonctionne pas, donc je suis encore plus dépité.
besoin que je copie le code ou cette description évoque quelque chose à quelqu'un ?
@+
Phoe
A voir également:
- VBA Excel et Access - Plantage mystère
- Word et excel gratuit - Guide
- Liste déroulante excel - Guide
- Si et excel - Guide
- Déplacer colonne excel - Guide
- Excel compter cellule couleur sans vba - Guide
envoie plutôt ton code (entre balises <>: voir bouton en haut à droite du message)
étrangement, elle vient de fonctionner sans problème...
mais à toutes fins utiles, je péréfère que tu jettes un coup d'oeil, il y a surement des améliorations à apporter pour la rendre plus stable.
petite observations :
- la partie "restitution TabSortie" est un peu lente vu que je complète les cellules une à une, il n'y a pas un moyen plus rapide ?
- j'ai beau mettre un "xlApp.Quit", le processus excel ne se termine pas pour autant, je ne dois pas m'y prendre correctement...
Merci d'avance pour ton aide
1/ Tu écris
xlApp.DisplayAlerts = False mais tu ne le remets pas à false, donc Excel resta à DisplayAlert=false jusqu'à la fin de la session Office ==> risque probable de gros soucis
D'autre part, à quoi sert ce DisplayAlert ?
2/ restitution tabsortie
tu peux te dispenser de boucle
3/ tu n'as pas mis le blocage du défilement de l'écran
Application.screenupdating=false (tu n'as pas besoin de le remettre à true à la fin): gain de temps, confort de l'utilisateur
4/ pas indispensable mais...
plutôt que la série de If....Store, j'aurais écris
5/quant à xlapp.quit, essaies avec set xlapp=nothing (pas sûr de moi) mais peut-^tre mettre cette ligne après next compteur
ou alors mettre
Set xlApp = CreateObject("Excel.Application") dans la boucle
ce point n° 5 demande à faire des essais ( là aussi, pas sûr de moi)
6/ enfin, déclare tes variables, surtout que tu manipules des données volumineuses d'après tes dires
je vais aussi répondre point par point :
1/ en effet, ici inutile, en fait j'ai pris l'habitude de déclarer ce paramètre car j'en ai régulièrement besoin. mais comme tu le dis, je peux m'en passer, donc je vais le virer.
2/ J'avais essayé cells(2,1)=TabSortie mais en voyant ta proposition je comprends pourquoi ça ne marchait pas. En effet, la méthode est bien plus rapide, j'ai juste du modifier la boucle qui complète tabsortie car j'avais mal codé, j'écrivais dans les colonnes 1 et 2 de tabsortie alors qu'un variable tableau commence par 0... ah ces débutants !
En tout cas merci pour le tuyau !
3/ par défaut, le paramètre visible de l'application est false quand on la lance depuis un createobject, donc je pensais (peut être à tord) que je pouvais me dispenser du désactiver le screen updating.
Je vais corriger, ça ne coute rien !
4/ je prends !! j'ai ce gros if en début de chacune de mes macro et c'est ... indigeste à la longue.
5/ j'ai fais divers essai dans ce sens déjà, ça ne change rien hélas... au mieux le processus excel se termine quand je ferme access, ce que ne me va pas car cette macro est la 4ème sub du module mais pas la dernière donc access continue de tourner après celle-ci.
6/ tu l'as surement compris dans le 5, cette macro fait partie d'un module de plusieurs sub, et j'utilise toujours les mêmes variables, donc je les déclare en public et en option explicit.
Je modifie mon code comme il faut, je refais des tests et je te tiens au jus
merci encore
@+
Phoe
alors c'est très bizzare : en retirant xlApp.Displayalerts = False j'ai eu tout d'un coup beaucoup d'erreurs de syntaxe détectées dans l'éditeur de macro car j'oubliais de mettre "xlApp." devant des instructions Excel.
J'ai donc corrigé toutes ces fautes et maintenant la macro s'exécute sans aucun problème.
En plus avec tes auters astuce, la rapidité d'exécution est redoutable ! j'ai même plus le temps d'aller fumer !!
alors dans quelle mesure l'instruction xlApp.Displayalerts = False pourtant donnée pour excel, avait un impacté sur Access et le déboggage, mystère absolu !