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 :

Mon script VBA plante totalement Excel [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 20
    Par défaut Mon script VBA plante totalement Excel
    Bonjour à toutes et à tous.

    Voici mon problème :
    Dans le cadre de mon alternance, j'ai développé un "petit" programme en VBA sous Excel. Le principe de ce programme est relativement simple. J'ai un fichier "monfichier.xls" dans lequel est stocké tout un tas de données, TROP de données (colonnes allant de A à AO et lignes allant de 1 à 244).

    Le but du programme est de "purger" ces données, d'en faire un tri, selon une liste de mots-clés que l'employé rentre manuellement dans des colonnes sur le fichiers éxécutant le programme "test_purge_BFI.xls".

    Etant relativement novice en programmation et encore plus en VBA, j'ai utilisé les moyens du bord pour écrire ce programme.

    Jusqu'à récemment, le programme tournait très bien. Or depuis l'ajout d'un certain nombre de mots-clés, le programme fait planter totalement Excel et l'éxécution n'arrive jamais à son terme (peut-être qu'en attendant 24h il y arriverait mais dans le cadre d'une société, c'est évidemment inenvisageable).

    Je pense que le problème vient évidemment d'un soucis d'optimisation du code.

    Pour le moment j'ai deux idées concernant cette lenteur d'éxécution :
    • l'utilisation des ".select" qui d'après ce que j'ai pu voir sur le net, ralentit beaucoup le programme.
    • l'utilisation d'un système "fait maison" afin de parcourir les données contenues dans les cellules et d'y chercher les mots-clés (utilisation de boucles, imbriquées dans des boucles, imbriquées dans des boucles, etc... le tout avec une fonction de recherche de chaîne écrite sans Regex, n'y connaissant rien).



    Mon problème est relativement urgent et je vous demande de l'aide pour deux raisons :
    1. je souffre en ce moment même d'une rage de dent intenable m'empêchant de travailler efficacement et de réfléchir normalement
    2. l'employé a besoin de ce programme au plus vite, elle devrait déjà pouvoir s'en servir et elle est bloquée tant que je ne règle pas ce soucis de plantage.



    Je vous joins donc le fichier contenant le code d'éxécution du , en éspérant que quelqu'un puisse m'aider du mieux qu'il pourra pour faire en sorte que le programme ne plante plus.


    PS : je ne peux pas joindre le fichier contenant les données par soucis de confidentialités des données de l'entreprise. Je pourrai éventuellement vous créer un fichier ce soir qui permettrait de tester le programme directement.

    EDIT : j'ai indiqué Excel 2003 car l'extension du fichier correspond à cette version d'excel, or j'utilise le module de compatibilité sous Excel 2007. Je lance le programme également sous Excel 2007, mais d'autres employés ne disposant que de la version 2003 sont susceptibles de lancer le programme, j'ai donc laissé cette extension.


    Cordialement,
    Florian
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Le lien sur le fichier journal n'est pas bon. Est-ce que tu peux le reposter ?

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Bonjour,

    la philosophie du forum est claire, on peut t'aider à avancer, mais on ne fera pas pour toi

    Il faudra donc t'attendre à des pistes de solutions, avec d'éventuels exemples de la part des membres, mais pas de "je débarque, faites mon travail"

    Bon rétablissement pour ta rage de dents
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 20
    Par défaut
    Citation Envoyé par Daniel.C Voir le message
    Bonjour,

    Le lien sur le fichier journal n'est pas bon. Est-ce que tu peux le reposter ?
    J'ai finalement choisis d'éditer mon message et de retirer le fichier par soucis de confidentitalité des données.

    Je me doute bien que ça empêche quiconque de tester le programme directement, mais après réfléxion, ça ne vous aidera pas beaucoup étant donné que vous obtiendrez un "Microsoft Excel -Pas de réponse" sur l'ensemble des pages excel ouvertes.

    Pour information si ça peut vous aider, le programme commence à réellement planter arrivé à la "PURGE DES LIGNES EN FONCTIONS DES MOTS CLES DES COLONNES OPERATIONS, APPLICATION ET IMPACT" (commenté en gros dans le code) => arrivé à la boucle 2, sur la ligne 3 de la colonne Opérations.

    Mais en attendant 15 minutes, le programme continuait bel et bien de tourner et il en était à................... la ligne 17 !!!!!!!!!!!!!! -_-'

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 20
    Par défaut
    Citation Envoyé par jpcheck Voir le message
    Bonjour,

    la philosophie du forum est claire, on peut t'aider à avancer, mais on ne fera pas pour toi

    Il faudra donc t'attendre à des pistes de solutions, avec d'éventuels exemples de la part des membres, mais pas de "je débarque, faites mon travail"

    Bon rétablissement pour ta rage de dents
    Bonjour,

    Je comprends qu'en tant que Modérateur tu te dois d'informer les gens de ce genre de choses. Or est-ce qu'à un seul moment dans mon message j'ai dit que je voulais qu'on me fasse le boulot ?

    Je demande simplement à des personnes s'y connaissant mieux en VBA et en Programmation de regarder le code que j'ai écrit en VBA et de me dire ce qui pourrait faire planter mon programme.

    J'ai deux idées mais je voudrais avoir l'avis de personnes plus confirmées que moi.

    Pour la correction évidente que mon code devra subir, je vais évidemment plonger le nez dedans afin de résoudre le problème, même si ça dépasse mes compétences (et dans ce cas présent, j'ouvrirai de nouveaux sujets afin de demander de l'aide si je bloque vraiment totalement).

    Si ça peut te rassurer je cherche depuis 13h les raisons de ce plantage, n'ayant aucune erreur directe de la part du logiciel.

    J'ai lu des dizaines de discutions concernant les bugs et plantages sur le net. La seule chose qui est revenue régulièrement c'est "ne pas utiliser de .select c'est moche et ça ralentit l'éxécution". Mais j'aimerais en être sûr, et savoir quelle alternative j'ai à l'utilisation des .select dans le cas présent de mon programme.

    Cordialement,
    Florian

  6. #6
    Membre chevronné
    Homme Profil pro
    Ctrl Gestion
    Inscrit en
    Octobre 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ctrl Gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 177
    Par défaut
    Bonjour IaMTouF, le Forum

    Ne serait-il pas possible de filtrer la colonne Criticité DSI avec une boucle sur les mots recherchés (à mettre entre étoiles) pour une recherche de type Contenant et copier les lignes filtrées dans la feuille Corbeille puis de supprimer la (les) ligne(s) dfiltrées de la feuille Tous, et de répéter cette opérations sur les autres colonnes avec leurs mots clés associés.
    Je ne suis pas sur que cela réponde à ta question, mais effectivement le code est très long à s'exécuter et cela risque de s'aggraver si ajout de mots clés.

    Slts

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Je penserais, comme ça, pour une boucle sans fin. Tu devrais faire fonctionner ton appli en mode ligne à ligne et avec des points d'arrêt afin de voir ce qui se passe réellement. Particulièrement, je n'aime pas les boucles sur la valeur d'ActiveCell. Sers-toi du mode debug pour voir si et comment l'adresse de cette cellule évolue.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 20
    Par défaut
    Bonjour danixdb,

    je n'ai pas bien compris ce que tu as dit. Moi dans ce que tu dis, ce que je comprends, c'est à peu de choses prêt la même chose que j'ai tenté de faire, donc ça ne résoudra pas mon problème ^^" à moins que je n'ai pas saisis ce que tu as dit.

    @Daniel.C : ok je vais voir comment me servir du mode debug. En effet ça ressemble à une boucle infinie, OR le programme fonctionnait correctement il y a de ça 48h avec seulement 4 à 5 mots-clés par colonne. Il allait bien au bout de l'exécution et les lignes etaient filtrées correctement.

    Mais depuis l'ajout des dizaines de mots supplémentaires, il plante totalement.

    Serait-ce dû à Excel et au langage VBA qui sont "lourds" nativement à exécuter ?

    je suis bien embêté :s

    PS : toujours ma rage de dents :'(


    Merci en tout cas de vous pencher sur mon problème !

  9. #9
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Par défaut
    Bonjour à tous.

    J'ai regardé un peu ...
    1er point _ Nulle part on trouve l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    puis "= à True" sur les feuilles pour lesquelles on effectue une purge.
    Cela devrait permettre de gagner du temps;

    2ème point _ Pourquoi dans le fichier colonne "Opérations WL" on trouve de nombreuses fois le même mot à purger ? (si j'ai bien compris le fonctionnement ...) Dans ce cas, la boucle ne s'exécute-elle pas x fois en plus pour rien ?

    cordialement.

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 20
    Par défaut
    2ème point _ Pourquoi dans le fichier colonne "Opérations WL" on trouve de nombreuses fois le même mot à purger ? (si j'ai bien compris le fonctionnement ...) Dans ce cas, la boucle ne s'exécute-elle pas x fois en plus pour rien ?
    Bonjour HopPopPop,

    Tout d'abord merci à toi d'avoir pris le temps de regarder.

    En effet, il y a bon nombre de mot-clés identiques dans cette liste, je n'avais pas remarqué, il est possible que ça ralentisse le programme déjà en partie. J'ai fait le ménage des doublons, bien vu ^^

    Ensuite :

    1er point _ Nulle part on trouve l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    puis "= à True" sur les feuilles pour lesquelles on effectue une purge.
    Cela devrait permettre de gagner du temps;
    Je ne connais pas cette fonction, je vais regarder ça de plus prêt et tester pour voir si ça améliore les performances de l'application.

    Merci du conseil !!!! Je vous tiens au courant dans les heures/minutes à venir

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 20
    Par défaut
    HopPopPop, tu es mon sauveur !!!! ^^

    Merci beaucoup, j'ai rajouté les...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.ScreenUpdating = False
    Application.ScreenUpdating = True
    ...aux bons endroits, j'ai fait le ménage dans la liste de mots-clés, et l'application tourne parfaitement : en moins de 30 secondes la purge est terminée !!!!!

    Merci à toi et à toutes les personnes qui ont pris le temps de se pencher sur mon soucis.

    Bonne journée à tous !!!!!!!!!!!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL-Server] Mon script se plante après 5830 lignes
    Par ambe_fr dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/11/2012, 15h42
  2. [debutant] comment transposer mon code vba excel en access
    Par eclipse012 dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/02/2008, 08h23
  3. Transformé une formule Excel en script VBA ?
    Par SFLEY dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 06/01/2007, 11h48
  4. EXCEL\VBA : Lignes totales d’un tableau croisé dynamique
    Par hiline6 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/12/2006, 12h46
  5. Script vba excel trop lent
    Par zootman dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/07/2006, 14h27

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