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 :

Panne d'exécution du code [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut Panne d'exécution du code
    Bonsoir,
    J'ai créé une base de données sous Excel (déconseillé, n'est-ce pas ?) contenant des données généalogiques, avec un événement (naissance, mariage, décès) par ligne. Pour introduire ces données dans mon soft de généalogie, je dois les convertir en document texte comportant divers tags.
    J'ai donc écrit un programme en BVA qui lit les données dans la feuille Excel et les convertit en texte en intercalant les tags, puis un autre module (sub) ouvre Word et imprime le document texte.
    J'ai testé mon code sur les 3 premières pages de la sortie Word et il fonctionne. Le problème: quand je veux imprimer tous les enregistrements d'une feuille Excel, l'impression s'arrête au cours de la 3ème page. Après l'impression, le code enregistre le document et la sauvegarde s'arrête au même endroit. Je n'ai pas trouvé de raison à cette panne.
    J'ai testé le code manuellement et la boucle For...Next qui passe d'une ligne Excel à l'autre fonctionne normalement. Question: est-ce qu'une variable de type String comporte une limite en nombre de caractères ? Comment se fait-il que le programme bifurque sur le module d'impression au milieu d'une page et ignore la suite ?
    Si quelqu'un a une idée, je suis preneur, avec gratitude.
    Cordialement
    touche_a_tout

  2. #2
    Membre émérite Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 601
    Par défaut
    Bonjour

    Là comme ça sans voir ni le fichier ni le code pour tester je te dirais de vérifier si tu n'as pas un caractère spécial non affiché qu'il interprèterait mal...

  3. #3
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut Panne d'exécution du code
    Bonjour et merci Alex !
    J'ai trouvé ton hypothèse intéressante et futée et j'ai fait la recherche.
    Je ne sais pas si Excel permet d'afficher les caractères non imprimables alors j'ai copié mon code dans Word pour les faire apparaître et je n'ai rien remarqué.
    J'ai constaté que la sortie texte s'arrête chaque fois au même endroit, au caractère près. J'ai ajouté une ligne au code pour voir si ça changeait quelque chose, mais l'arrêt apparaît au même endroit.
    Mais il y a une chose qui semble rendre ton hypothèse inadéquate, c'est que la sortie texte s'arrête dans le courant du deuxième enregistrement de la base, donc le code a été parcouru une première fois intégralement sans arrêt indésirable.
    Encore un indice: j'ai toute une série de ces bases de données, j'en ai testé une autre et l'arrêt ne s'est pas produit au même endroit.
    Pour ne rien te cacher, j'avais laissé tomber la généalogie et je sais que j'avais déjà rencontré ce problème il y a quelques années; à l'époque, le code transcrivait une vingtaine d'enregistrements, si bien que j'avais réparti les lignes Excel sur plusieurs feuilles par lots de 20 sans dépasser le point d'arrêt.
    J'espère bien que cette fois-ci on trouvera une solution au niveau du code.
    Bien à toi et merci
    touche_a_tout

  4. #4
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut Panne d'exécution du code
    Rebonjour,
    Autre test: j'avais introduit ma ligne supplémentaire en-dehors de la boucle For...Next; ensuite je l'ai déplacée à l'intérieur de cette boucle donc elle apparaît à chaque itération. Résultat (bizarre): ligne suppl. à l'extérieur, la sortie compte 72 lignes; ligne suppl. dans la boucle: la sortie compte 113 lignes. L'arrêt a lieu à un endroit différent du code. Un vrai casse-tête. La différence est de 41 lignes. Une ligne du tableau Excel représente environ 60 lignes de texte Word. Où est la logique ?
    Merci de ton intérêt.
    Cordialement
    touche_a_tout

  5. #5
    Membre émérite Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 601
    Par défaut
    Bein sans fichier ni code je ne puis rien.
    C'était une idée à l'aveuglette.

    Bon courage

  6. #6
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut Panne d'exécution du code
    Mais ce n'était pas une critique, j'ai apprécié ton aide.
    Quant au fichier, si tu as le courage de t'y plonger, je le joins au prochain post.
    Encore merci
    Cordialement
    touche_a_tout

  7. #7
    Membre émérite Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 601
    Par défaut
    Oui vas y
    Il me faut au minima ton fichier d'origine (cadire tel que tu l'as en entrée de code) même si tu changes les noms par confidentialité et ton fichier de sortie tel que tu le veux (bon selon le nombre de pages pas besoin de tout refaire manuellement au complet non plus mais il faut que je sache précisément de quoi je pars et où je dois aller).

    Ensuite si tu peux mettre également le code que tu as déjà créé ça pourrait aider et on pourra même éventuellement "se contenter" de le corriger.

    Enfin attention comme tu t'en doutes je suis en vacances familiales avec préparatifs de Noël, jour de l'An et anniversaire alors je ne promet pas de délai mais je promet de regarder.

  8. #8
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut Panne d'exécution du code
    Super-sympa !
    Pas de souci de délai, je bute là-dessus depuis 2015, alors !
    Aucun pb de confidentialité, tous ces gens (jeunes mariés et leurs proches) sont morts et enterrés depuis très longtemps. Ma base contient leurs actes de mariage enregistrés par l'Etat civil (EC) (ce qui les différencie des actes paroissiaux.)
    Quelques commentaires:
    Il y a presque toujours des lacunes dans les enregistrements de la base, il manque un âge, un lieu de domicile, parfois même un prénom. Comme j'utilise le même code pour une série de bases de mariages, dont certaines ont encore bien plus de lacunes que cette base-ci, mon code croule sous les Select Case et les If, Then Else pour gérer les cellules vides en évitant de produire des "phrases à trous" dans la sortie texte.
    Il y a un certain temps, j'avais un problème similaire mais la panne intervenait après l'impression d'une vingtaine d'actes (soit de lignes du tableau Excel). Pour contourner le problème, j'avais réparti les 133 enregistrements à raison d'une vingtaine par feuille en gardant la première au complet (avec le A, soit ECFM_A_Donnees, les suivantes étant ECFM_B_Donnees et ainsi de suite).
    Autre particularité, il y a des variables déclarées qui sont apparues dans des versions précédentes et ne servent plus à rien.
    J'écris un code lourd comme un âne mort mais je suis un éternel débutant autodidacte et probablement sous-doué. J'admire ton dévouement. Ne traîne pas ça sous l'arbre de Noël ni autour de la dinde, ça lui donnerait mauvais goût !
    Je me rappelle que j'ai utilisé un système similaire (lecture d'une feuille Excel et transfert dans Word) dans un autre cas (composition musicale) avec des sorties texte de 20 ou 30 pages sans la moindre panne. Ce n'est donc pas le principe qui est en cause.
    Je te remercie d'avance de ce que tu pourras faire et te souhaite bon courage. Et puis Joyeux Noël et Bonne Année !!
    Cordialement
    Touche_a_tout
    Fichiers attachés Fichiers attachés

  9. #9
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 032
    Par défaut
    Bonjour.
    Je n'ai pas pris le temps de lire l'intégralité de cette discussion mais je me permets d'intervenir sur deux détails :
    - Une variable de type String à une limite de 2 puissance 31, soit environ 2 milliards de caractères, donc ça ne devrait pas être la cause de votre problème.
    - Une fois j'ai perdu beaucoup de temps à chercher un problème dans un de mes programmes. La solution que j'ai trouvée : sélectionner le code du module, le copier, l'effacer, le coller. Je n'ai pas plus d'explication mais ça a marché. Donc je vous propose de tester cela si vous êtes persuadé que votre code est correct, au cas où...
    Bonne continuation.

  10. #10
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut Panne d'exécution du code
    Merci, Laurent Ott,
    On a parfois de ces surprises, c'est vrai. Je vais tenter ça en espérant que ça évitera à Alex de se pourrir la vie au moment des Fêtes. Je donnerai des nouvelles.
    Cordialement
    touche_a_tout

  11. #11
    Membre émérite Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 601
    Par défaut
    La valeur de votre variable texte GED est bien complète quand elle est transmise à Word.
    Le souci ne vient donc pas de votre code de récupération des données mais uniquement au moment où Excel transmet les données à Word.
    (la ligne TypeText....)

    2 solutions comme ça à creuser mais je vais dodo:
    - Rechercher sur Internet si d'autres ont eu ce problème de données tronquées dans le passage Excel / Word alors que la variable string transmise est complète
    - Compléter le fichier Word non pas à la fin en insérant tout d'un coup mais en complétant le fichier Word ligne Excel par ligne Excel

  12. #12
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 244
    Par défaut
    hello,
    le souci vient du fait que tu utilises la méthode TypeText pour écrire dans le document Word et cette méthode est limitée dans le nombre de caractères que l'on peut écrire. A la place tu peux utiliser Range comme ceci par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    '   Transmet les commandes à Word        
         With WordApp
                .Visible = True
                .Documents.Add
                With .Selection
                    .Font.Name = "courier new"
                    .Font.Size = 12
                    .ParagraphFormat.Alignment = 0
                    .Font.Bold = False
                    '.TypeText TEXT:=GED
                    .Range = GED
                End With
         End With
    A noter que j'ai aussi rendu le document Word visible pour que si l'on fait un point d'arrêt juste après ce groupe d'instruction on puisse voir réellement ce qu'il y a dans le document Word créé.
    D'autre part derrière ce code tu fais une impression de 133 pages. Pourquoi 133 pages ? Moi avec le classeur fourni je n'obtiens que 52 pages.
    Il y a aussi un autre problème dans le code. Dans certaines constructions de texte il il y "agé*" sans espace devant ce qui fait que "agé*" est collé au mot d'avant.

    Ami calmant, J.P

  13. #13
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut Panne d'exécution du code
    Bonjour Alex et JP,
    Ca c'est un chouette cadeau de Noël ! Mon pb résolu "du jour au lendemain". Je n'étais pas venu sur le forum depuis longtemps: il est toujours plein de gens formidables ! Mon code fonctionne, youpi. Typetext vient d'un modèle où il s'agit d'imprimer de petits mémos et j'ai bêtement copié. Mon autre manip qui fonctionnait: je crois bien que je passais le texte ligne par ligne: CQFD.
    Le nombre de pages: je voulais dire 133 actes, correspondant aux 133 lignes de la feuille Excel (en fait 131, car il y a 2 lignes d'en-tête), mais selon les classeurs (j'en ai une trentaine) un acte peut occuper plus ou moins qu'une page A4. J'en ai obtenu 52 en effet. Quant aux mots collés. je suis précisément en train de pourchasser ce genre de fautes; il y a aussi les ponctuations multiples et autres broutilles. Ca bouffe un temps fou.
    Au fait, je suis bien content que vous soyez tous les deux débarrassés du problème pour les Fêtes. Alors Bonnes Fêtes !
    Et surtout merci, et bravo.
    Cordialement
    Pierre

  14. #14
    Membre émérite Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 601
    Par défaut
    Merci Jurassik.

    Problème résolu grâce à vous. J'avais sincèrement la flemme hier soir de rechercher les particularités de typetext sur Internet.
    J'avais prévu ça pour plus tard et voilà que ce matin la solution est portée sur plateau d'argent.

    Autre chose Touche_A_Tout; pense bien à corriger ton for pour ne pas faire que les 3 premières lignes.

    Enfin tu gagnerais en lisibilité en indentant et nettoyant ton code des variables non utilisées par exemple.
    Tu as aussi des cas où tu cumules les concaténations alors qu'une seule suffirait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GED = GED & " " & "toto" & " " & "tata"
    peut se faire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GED = GED & " toto tata"
    Bonnes fêtes à vous 2.

  15. #15
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut Panne d'exécution du code
    Merci Alex,
    Tu pointes ce que j'appelle un code lourd. Tu as cent fois raison mais ce nettoyage devrait être fait sur 9 sheets de naissances + 9 sheets de mariages + 5 sheets de décès = 23 fois 1023 lignes de code à épouiller, alors à propos de flemme . Car j'hésite à faire des copier-coller, il y a les références à changer et les risques d'oublis. Bref, j'ai bien peur que mon code lourdingue ne reste en l'état. Mais merci tout de même et Bonnes Fêtes.
    Cordialement
    touche_a_tout

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

Discussions similaires

  1. Réponses: 44
    Dernier message: 02/08/2006, 16h12
  2. Erreur 3141 dans exécution de code
    Par zoom61 dans le forum Access
    Réponses: 13
    Dernier message: 23/03/2006, 17h31
  3. [RosASM] Tracer l'exécution du code
    Par aumeunier dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 14/03/2006, 18h26
  4. Réponses: 3
    Dernier message: 20/04/2005, 12h30
  5. Réponses: 7
    Dernier message: 03/02/2005, 17h20

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