IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Executions avec plusieurs classeurs


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Executions avec plusieurs classeurs
    Bonjour,

    Je suis assez novice en VBAE, mais j'ai réussi à produire un code tel qu'il me l'a été demandé dans le cadre d'un stage. Jusque là pas de problèmes.
    En fait mon problème est le suivant : j'execute mon programme, je vérifie qu'il fonctionne bien, ensuite je l'execute de nouveau pour voir un détails, je recommence, et au bout de quelques fois, l'execution se bloque sur une ligne qu'Excel vient d'executer plusieurs fois sans problème. Parfois quand il est bloqué, je passe en pas à pas (F8 pour les intimes) pour essayer de comprendre le problème, et des fois Excel passe sur l'instruction qui l'a fait planter juste avant et passe à la suivante, en executant cette instruction, sans aucun problème. Une fois arrêté, si je réinitialise mon programme et que je le relance, il va s'arrêter sur une instruction plus tôt, ou plus tard.
    Mon programme s'arrête le plus souvent sur des instruction comportant du .Select, or je sais que vous, utilisateurs plus expérimentés de developpez.net avaient en horreur la méthode .Select. Je l'ai vu, et je vous ai compris, j'ai modifié mon programme en conséquent et il finit par planter de manière assez aléatoire, sur les lignes que j'ai modifié pour enlever le select.
    Qu'est-ce que fait mon programme, et l'ai-je codé avec mes pieds ?
    a priori non, puisqu'il va faire exactement ce que j'ai prévu et codé qu'il fasse, plusieurs fois, et sans que je change une seul ligne, il va s'arrêter, le plus souvent avec l'erreur :" '1004' erreur définie par l'application ou par l'objet" ou un " la méthode select a échoué".
    Que fait mon programme plu précisément : je ne vais pas le mettre ici, puisqu'il fait dans les 1500 lignes, avec un code aéré et indenté. Il ne fait rien de très sorcier, et il utilise la même philosophie plusieurs fois. Il va prendre une information d'un classeur, la process, et colle le résultat dans un autre classeur. Mais le pire, c'est que les erreurs sont sur des broutilles telles que sélectionner 2 cellules et les fusionner, et je met à chaque fois Workbooks("nom_fichier_source").Worksheets("nomfeuille").cells(titi,toto). Même sans la méthode .Select, Excel finit par me planter mon programme, et puis plus tard, une fois que j'ai commenté toutes les lignes susceptible de prvoquer un problème, et les avoir décommenté, le programme va refonctionner, un peu. Mon programme n'est pas séquentiel : il n'utilise pas le temps, jamais, les informations sont fixes, ne change pas, et je ne change rien entre l'état où mon programme va fonctionner parfaitement et quand il va planter, que ce soit dans mon code, dans mes fenêtres sur mon bureau, ou même mes stylo sur mon bureau.
    Je suis sous Excel 2010, dans une grande entreprise, donc je suis sûr que ce n'est pas une version pirate instable, et je ne peut rien installé sur mon poste.

    Ma question au lecteur qui est arrivé jusqu'ici, c'est : Vous est-il arrivé une chose similaire, et y a -t-il une solution qui puisse m'eviter toute frustration. Je sais que mon code fonctionne, je l'ai démontré, il est tout à fait illogique que mon programme plante sur une instruction qu'il a déjà executé plusieurs fois une poignée de seconde auparavant.

    Je n'ai pas fenêtre dans mon local, mais sinon je crois que mon PC pourrait aller voir quel temps il fait dehors à force de se foutre aussi ouvertement de ma tronche.
    Merci d'avance pour un éclairement, et merci d'avoir lu ceci.

    OttoH

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Salut,

    Parmis les erreurs d'exécution qui peuvent survenir aléatoirement :
    - il faut se méfier des opérations sur des cellules fusionnées.
    certaines opérations (copier/coller ; filtre automatiques, groupes ) sur de telle cellules peuvent provoquer des erreurs d'exécutions

    - si tu insère beaucoup ou créé beaucoup de nouvelle feuille, sans jamais fermer Excel, il arrive que l'insertion d'une nouvelle feuille échoue. (limite de compteur de feuille atteind ?).
    Le fait de fermer / ouvrir Excel relance sa capacité d'insertion de nouvelle feuille.

    - si tu renomme tes feuilles à l'exécution, assure toi qu'il n'y ait pas de doublon avec une feuille existante.

    - si tu utilise l'expression IIF(condition, si vrai, si faux) méfie toi que dans tous les cas les 2 expressions si vrai et si faux puisse être exécuté.
    En effet, VBA évaluera l'expression si Vrai et Si faux quelque soit le résultat de la condition.

    - essaye de faire des sauvegarde intermédiaire du classeur pour libérer de la mémoire lié aux opérations "Undo"

    - si tu utilise la protection de feuille ou de classeur, essaye sans cette protection.


    Sinon sans ligne de code sur les opérations qui échoue, difficile d'en dire plus.
    Visiblement ce n'est pas tant un problème de Select Case que ce qui est manipulé par dans Select Case.
    Lors du plantage, essaye d'évaluer les variables en faisant du pas à pas entrant dans les fonctions.
    Vérifie qu'il n'y ait pas d'objet valant Nothing ou des valeurs aberrantes.

  3. #3
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Un programme fait ce qu'on lui demande s'il est bien codé. Je veux bien t'arranger ton code si tu l'envoies..

  4. #4
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour, et merci de vos réponses,

    Pour EngueEngue, avec qui je suis tout à fait d'accord, et je souligne le fait que je n'ai pas beaucoup de bouteille en vba encore une fois. Cependant, je vais te dire ce qui se passe plus clairement : mon programme commence par initialiser une ligne par une boucle for toute bête, prend les infos intéressantes d'une colonne sur un classeur et les met en ligne avec un ordre définie sur un autre classeur; ça il le fait, mais pour des raison de clarté, je souhaite que les cases de cette ligne aient une taille de police 12 et soient en gras (ce sont des titres), et que cette cellule et celle d'en dessous (vide) soient fusionnée. Mon programme s'arrête sur ces éléments de mise en page, pas avant. Mais il y a pire : je commente tout ces lignes de mise en page, le programme continu, et il est amené par la suite à écrire de nouveaux "titres", sur le modèle des précédant, à la suite, avec les mêmes instruction plus bas dans mon programme (et même avec un .Select !), et j'ai ma mise en page toute belle. J'ai donc sur ma ligne, les titres des colonnes de l'initialisation sur une ligne en taille11, et juste à coté, mes nouveaux titres ( ils sont susceptible de changer suivant la feuille source, contrairement à ceux d'avant) avec la bonne mise en page. Comment l'expliquer ? et comment expliquer que mon programme a déjà tourné plusieurs fois en me donnant le bon résultat, avec les bonnes mise en page, exactement comme je l'avais codé et que out à coup, il s'arrète sur une erreur ? Je te remercie tout de même de ton intérêt pour mon problème, mais je n'ai pas a coeur de t'envoyer 1 code de 1500 lignes peu commentées, et qui marche avec des fichiers confidentiels d'une part, mais qui fonctionne aussi bien parfois, et des fois moins bien sans que je n'y ai touché la moindre ligne.

    Pour BlueMonkey, je copie une case d'un classeur vers un autre, et ensuite je fusionne 2 cellules adjacentes.
    Je ne créer pas de feuilles, ni ne renomme de feuilles/classeurs.
    Je n'utilise pas de IIf, et mon programme arrive à s'arrêter avant mes différents select case, boucle if et for qui constituent mon programme après son initialisation ( definition des variables, une boucle for (cf réponse à EngueEngue)). Encore une fois, mes erreurs sont sur des select échoué et un changement de la taille de la police, ou sur une fusion de cellules.

    Merci,

    OttoH

Discussions similaires

  1. [XL-2010] Erreur d'execution "9", plusieurs classeurs.
    Par Boras dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 15/05/2014, 23h56
  2. Réponses: 3
    Dernier message: 21/06/2008, 06h35
  3. Formules avec plusieurs classeurs
    Par ananar dans le forum Excel
    Réponses: 2
    Dernier message: 04/11/2007, 22h52
  4. Ouverture dans le meme classeur avec plusieurs feuilles
    Par Marie69 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/10/2007, 19h27
  5. Réponses: 6
    Dernier message: 31/07/2007, 17h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo