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

VB.NET Discussion :

Erreur ouverture d'un word


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2016
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2016
    Messages : 147
    Points : 81
    Points
    81
    Par défaut Erreur ouverture d'un word
    Bonjour,

    Mon projet est de générer un devis, tout fonctionnait très bien mais du jour au lendemain problème.
    J'ai un grand fichier word ou je remplace des mots par d'autre exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_Duree_de_vie_4_ans", ReplaceWith:=liste_tarifs_philips(0)._Titre2)
    Énormément de ligne passe puis d'un seul coup erreur :

    Une exception non gérée du type 'System.Runtime.InteropServices.COMException' s'est produite dans Microsoft.VisualBasic.dll

    Informations supplémentaires : Échec de l’appel de procédure distante. (Exception de HRESULT : 0x800706BE)

    Je n'avais pas ce problème avant, j'y suis depuis ce matin et je ne trouve pas...

    Merci

  2. #2
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    La clef d'activation de Word est toujours valable?

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Dans ton code original, as-tu mis les guillemets pour le texte de remplacement ?

    Parce que dans ta question, ils n'y sont pas.

    Ou, si ce n'est pas un texte, mais une section de document, ou un autre objet Word, tu vas probablement devoir déclarer ton objet Word dans ton code Excel comme un objet de ton objet ow.

    Un gros gros peut-être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_Duree_de_vie_4_ans", ReplaceWith:=oW.Application.ActiveDocument.liste_tarifs_philips(0)._Titre2)
    Parce que sans le code et sans savoir en quoi consiste réellement liste_tarifs_philips(0)._Titre2, cela va rester de la spéculation.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2016
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2016
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    Bonjour,

    Toujours le même problème ce matin, la clé Word est activé.
    Le mot clé devis_Duree_de_vie_4_ans est remplacé par Durée de vie : 4 ans

    En gros le code c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_Duree_de_vie_4_ans", ReplaceWith:="Durée de vie : 4 ans")
    Je pense que ça vient de mon word car ce matin quand j'ai ouvert un premier word vierge il y avait un problème, j'ai l'impression qu'il garde en mémoire une trace de mon devis.
    J'ai essayé de réparer hier mais sans succès.

    De toute façon ça fonctionnait avant alors je vois plus un problème du coté word.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2016
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2016
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    J'ai changé ma ligne pour être sur que ça ne vienne pas du code j'ai mis ceci au même endroit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="test1", ReplaceWith:="test")
    Erreur également, comme je dis j'en fais une centaine d'autre des lignes comme ça avant donc c'est word qui merde ?
    Il y a un moyen de ne pas désinstaller et réinstaller ? (Vider cache ou vider registre etc ?)

  6. #6
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Donc le traitement fonctionne bien au début, mais plante au bout d'un certain temps de traitement? A voir si ce n'est pas ton objet word qui a des restrictions de capacité (ce qui semblerait bizarre quand même). L'erreur est toujours produite au même moment?

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2016
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2016
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    C'est exactement ça, le traitement fonctionne très bien puis plante toujours au même endroit, même si à cet endroit je change ça bloque.
    Si je commente ça passe puis s'arrête un peu plus loin je te met un exemple :

    Explication de l'exemple premier cas batterie, la ligne 2 bloque si je commente ça va jusqu'au deuxième cas peremption et bloque également à la ligne 2 alors vous allez me dire que c'est ton _titre2 de la liste qui à un problème mais non si je change la ligne par remplace par "test" "test" il bloque, ça fonctionnait avant alors qui pète un câble moi, le logiciel, word ^^
    Donc pas de problème de capacité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
                If changement_batterie = True Then
     
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_Pile_Hs1", ReplaceWith:=liste_tarifs_philips(0)._Titre1)
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_Duree_de_vie_4_ans", ReplaceWith:=liste_tarifs_philips(0)._Titre2)
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_puht_fab1", ReplaceWith:=liste_tarifs_philips(0)._PUHT_Fabricant)
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_remise1", ReplaceWith:=liste_tarifs_philips(0)._Remise)
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_puht1", ReplaceWith:=liste_tarifs_philips(0)._PUHT)
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_qte1", ReplaceWith:="1")
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_ht1", ReplaceWith:=liste_tarifs_philips(0)._PUHT)
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_tva1", ReplaceWith:=liste_tarifs_philips(0)._TVA)
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_ttc1", ReplaceWith:=liste_tarifs_philips(0)._PUTTC)
     
                End If
     
                If peremption_adulte = True Then
     
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_Electrodes_adulte_Hs1", ReplaceWith:=liste_tarifs_philips(1)._Titre1)
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_Duree_de_vie_2_ans", ReplaceWith:=liste_tarifs_philips(1)._Titre2)
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_puht_fab2", ReplaceWith:=liste_tarifs_philips(1)._PUHT_Fabricant)
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_remise2", ReplaceWith:=liste_tarifs_philips(1)._Remise)
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_puht2", ReplaceWith:=liste_tarifs_philips(1)._PUHT)
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_qte2", ReplaceWith:="1")
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_ht2", ReplaceWith:=liste_tarifs_philips(1)._PUHT)
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_tva2", ReplaceWith:=liste_tarifs_philips(1)._TVA)
                    oW.Application.ActiveDocument.Content.Find.Execute(FindText:="devis_ttc2", ReplaceWith:=liste_tarifs_philips(1)._PUTTC)
     
                End If

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    qui pète un câble moi, le logiciel, word
    Juste en passant, t'es sur de ton document word ? fais un test avec un document vide.

    Tu dis que tu as un tas de tests identiques avant celui qui plante, mais peut être que le plantage est produit lorsque le find échoue, et donc ton test avec remplacement du texte va échouer aussi puisque "test" n'est pas non plus dans le document word...

    Je lance des pistes !

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2016
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2016
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    Alors oui j'y ai pensé que le word n'est pas bon mais ce n'est pas ça a mon avis car j'ai modifié par test dans le word pour remplacer par test1 par exemple et ça bloque aussi à cet endroit.
    Si je fais un document vierge oui ça fonctionnera car mes 100 même ligne fonctionne.

  10. #10
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Dans la doc MSDN ils conseillent l'utilisation de ClearFormatting(), sous peine d'avoir des " résultats inattendus dans le texte de remplacement". Mais pas sur que ça aide vraiment, tu n'as pas de résultat inattendu étant donné que ça plante

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2016
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2016
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    Alors j'ai fait un test et c'est dans le tableau qu'il y a un problème (ça je le savais mais c'est dans la colonne de gauche).
    Il aime pas quand il y a plusieurs ligne dans une cellule.

    Le problème c'est que ça fonctionnait avant, j'ai vérifié en prenant un devis créer par le logiciel la semaine dernière.

    Je n'arrive pas à vous ajouter la photo.
    Je vois que Word le problème... Il faut que je test chez moi ce soir..

  12. #12
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Les opérations OLE/interop demandent beaucoup de mémoire et de ressources. Si tu fais une centaine d'opérations avant que cela plante, cela pourrait bien être un problème de mémoire.

    Et puis Interop n'est pas la façon la plus efficace de faire cohabiter .net et Office. (Même si c'est probablement la solution la plus facile à mettre en œuvre.)

    Mais, je pense que tu devrais faire un pas en arrière et expliquer clairement le pourquoi de ces changements à répétition. Parce que à mon avis, tu dois repenser la démarche. Parce que si c'est le nombre de caractères dans une cellule de tableau qui cause problème...

    Un test que tu peux faire, c'est d'afficher tous les caractères de ton document et de vérifier ce qu'il y a vraiment dans ta cellule en cause. IL y a peut-être un caractère parasite ou quelque chose qui a été modifiée par erreur.

    Sinon, tu peux aussi jeter un œil par là. C'est en VBA, mais ce n'est pas insurmontable.

    Aussi, au lieu de passer par Word, tu peux essayer de traiter ton document avec DocX. C'est un composant .net pour travailler avec des documents Word.

    Ajout subséquent:

    Il s'est passé quoi sur ta machine entre le moment où cela marchait et le moment où cela ne marchait plus. Avec la manie des mises à jour automatiques et des tâches automatiques, on ne sait jamais.

    Essaie de faire ton remplacement problématique avant tous les autres pour voir si cela va mieux.

    Et puis, il existe des solutions plus simples que de faire 100 remplacements dans un texte. À vrai dire cela me donne l'impression que tu appliques une solution dûe à un manque de connaissance de Word:

    On peut faire du publipostage dans Word pour n'importe quoi, ou presque, et pas juste pour des adresses ou des étiquettes.
    On peut utiliser des signets pour placer les bons mots aux bons endroit du premier coup. Il suffit de commencer avec un modèle et de terminer par Enregistrer sous un autre nom, sans ré-enregistrer le modèle
    On peut avoir deux documents-modèles et utiliser le Phillips, ou l'autre selon les besoin. Et encore là on termine par enregistrer sous un autre nom, sans enregistrer le modèle.
    Et si on ne veut pas faire de publipostage, on peut insérer directement des champs de base de données (toujours) dans un modèle.
    On peut utiliser des champs de Word pour écrire une information une fois dans un champ et la reproduire dans d'autres champs du document.

    Et puis ce type de problème ne devrait théoriquement pas, ou au pire seulement dans des conditions extrêmes, obliger à réinstaller Office. En gros, c'est un message qui vient quand le programme lui-même, ou le serveur OLE, n'est pas en mesure de compléter le travail. (Dans ce cas, précis, le serveur OLE, c'est Word.

    Mais là, c'est malheureusement un cas de
    Nom : smileys-boule-cristal-tns0.gif
Affichages : 434
Taille : 49,8 Ko
    à cause du manque d'information.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2016
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2016
    Messages : 147
    Points : 81
    Points
    81
    Par défaut
    Alors merci pour tout, non ce n'est pas un caractère parasite j'avais déjà vérifié.
    Le devis est tellement complexe que je ne souhaitais pas changer tout le code (2000 lignes de codes) donc je garde tout de même tes solutions pour une prochaine évolution.

    Je n'ai pas trouvé le véritable problème, pour le moment j'ai contourné en ne mettant pas plusieurs ligne et donc plusieurs mot clé dans une cellule de tableau et ça fonctionne.

    Je vous remercie

Discussions similaires

  1. [XL-2010] Gestion erreur ouverture fichier word sur base intranet
    Par kesimon63 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 31/03/2014, 09h56
  2. [erreur] ouverture d'un Popup
    Par baillador dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 07/06/2006, 15h48
  3. Problème à l'ouverture de fichiers Word
    Par Asdorve dans le forum Word
    Réponses: 8
    Dernier message: 19/05/2006, 12h03
  4. [Word] Ouverture de fichier
    Par oyigit dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 03/10/2005, 16h16
  5. ouverture de fichiers word dans delphi (sans utiliser word)
    Par poussinphp dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 11/07/2005, 14h25

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