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 :

Pilotage Excel et Word


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Points : 333
    Points
    333
    Par défaut Pilotage Excel et Word
    Bonjour tout le monde,
    Je vais essayer d'expliquer tout ça clairement.
    J'ai développe une application dont l'une des fonctions est d'imprimer une fiche récap par personne pour une liste de personnes données.
    J'ouvre donc Excel je rempli un tableau avec le récap des infos de la personne.
    J'ouvre un fichier Word (pré rempli, avec des infos légales) et je copie dedans le tableau Excel.

    ça fonctionne très bien sauf que quand je lance des listes de personnes, le copier/coller du tableau plante de temps en temps
    Sur une même liste de 20 personnes parfois tout se passe bien parfois ça plante 3 fois et jamais sur la même fiche.

    J'ai un message d'erreur sur le "paste" disant que le presse papier n'est pas défini.

    quand je continue en "pas à pas" et que je reviens sur l'instruction "paste" tout se passe bien.

    si quelqu'un a une piste.

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Dim Doc_wrd, Imp_xls As Object
                'ouvre le fichier excel des tableaux
                Imp_xls = CreateObject("Excel.Application")
                Imp_xls.Visible = True
                Imp_xls.Workbooks.open("Chemin/Fichier.xls")
                Imp_xls.ActiveWorkbook.SaveAs(My.Settings.ChemRepDataAppli & "\ProvisAdh") 'enregistre le fichier modéle en provis pour ne pas l'écraser
                Imp_xls.ActiveWorkbook.Sheets("Adherent").select()
                AdhXls_cpt = 2
                'Lecture en base de données des infos relatives à la personne et création du tableau des infos dans excel
     
                'impression de avec word
                Doc_wrd = CreateObject("Word.Application")
                Doc_wrd.Visible = True
                Doc_wrd.Documents.Open("Chemin/Fichier.doc")
                Dim Provis_str As String = My.Settings.ChemRepDataAppli & "\ProvisAdh"
                Doc_wrd.Application.ActiveDocument.SaveAs(Provis_str) 'enregistre le fichier modéle en provis pour ne pas l'écraser
     
                DateImp_str = Format(Now, "dd/MM/yyyy")
                'remplace les balises dans le corp de texte
     
                'recherche la le mot TableauAdherent dans pour le remplacer par le tableau Excel
                Dim Parag As Object
                For Each Parag In Doc_wrd.Application.ActiveDocument.Paragraphs
                    Parag.Range.Select()
                    If Doc_wrd.Application.Selection.Words(1).text = "TableauAdherent" Then
                        Doc_wrd.Application.ActiveDocument.Content.Find.Execute(FindText:="TableauAdherent", ReplaceWith:="", Replace:=2)
                        '----------------------------------------------------------------------------------------
                        'copie le tableau excel et le cole dans le doc word
                        Imp_xls.ActiveWorkbook.sheets("Adherent").Range("A1:N" & AdhXls_cpt).copy()
                        Doc_wrd.Application.Selection.Paste()
                        '----------------------------------------------------------------------------------------
                        Dim wdAutoFitWindow As Integer = 2
                        Doc_wrd.Application.ActiveDocument.Tables(1).AutoFitBehavior(wdAutoFitWindow)
                    End If
                Next
     
                'imprime le doc et ferme word 
                Doc_wrd.ActivePrinter = "Imprimante sélectionnée"
                Doc_wrd.PrintOut()
                Doc_wrd.Application.ActiveDocument.save()
                Doc_wrd.Application.ActiveDocument.Close(0) 
                Doc_wrd.Application.Quit()
                Doc_wrd = Nothing
     
                Imp_xls.activeworkbook.save()
                Imp_xls.Application.quit()
                Imp_xls = Nothing
    A oui j'utilise VB 2010 et Office 2007 sur mon poste de développement sous W10.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 351
    Points : 333
    Points
    333
    Par défaut
    Bonjour
    Je reviens à la charge parce que suite à de multiples essais notamment sur l'un des futurs postes clients (W7 Office 2016).
    Le code continue à planter parfois, mais pas toujours sur la même instruction. Toujours sur les commandes word par contre.

    J'ai l'impression que parfois, Word n'a pas fini d'exécuter une commande et bloque sur la suivante.
    Est il possible de savoir si la commande s'est terminée et éventuellement d'attendre qu'elle le soit ?

  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,

    Désolé pour les généralités, mais mon Visual Studio est planté.

    Une des choses que tu pourrais regarder, c'est la mémoire vive disponible. Tu as visiblement deux liens OLE actifs (VB - Excel et VB-Word) plus une utilisation du presse-papiers, toutes des opérations qui demandent beaucoup de mémoire.

    La plupart du temps les opérations de copier-coller entre les applications Office passent par le presse-papier d'Office, au lieu de celui de Windows. Si mes souvenirs sont exacts, cela suppose de conserver en mémoire jusqu'à un maximum de 15 opérations de copier-coller.

    Et puis là, on n'a pas encore parlé de la principale faiblesse d'Excel; il a toujours besoin de tout le classeur en mémoire vive pour travailler. (Ce qui n'est pas le cas d'Access, par exemple.)

    Autres choses que tu peux aussi regarder :

    - Si ton "TableauAdherent" dans Word est un tableau Word en bonne et due forme, tu peux itérer sur la collection Tables au lieu de la collection Paragraphs. Cela devrait de permettre de gagner un (petit) peu de temps.

    - Au lieu d'ouvrir Excel et ton classeur, tu pourrais envisager de l'interroger comme une banque de données en utilisant OLEDB et la requête qui va bien. Encore là, tu pourrais gagner un peu de temps et de mémoire. Un exemple par là.

    Sinon, je ne sais pas...

    P.S. Un endroit qui peut être utile.
    À 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.

Discussions similaires

  1. [XL-2007] Récup par Excel d'éléments de la page web active et pilotage Fichier journal Word
    Par Rando31 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 14/12/2014, 18h14
  2. Pilotage Ole de word
    Par beauchastel dans le forum Langage
    Réponses: 6
    Dernier message: 10/01/2006, 10h43
  3. Excel dans word
    Par belgiuman dans le forum VBA Word
    Réponses: 3
    Dernier message: 11/08/2005, 13h19
  4. [VBA Excel Word]Adapter un code Excel a Word
    Par Baxter67 dans le forum VBA Word
    Réponses: 4
    Dernier message: 08/08/2005, 23h43
  5. Pilotage excel (couleur cellule)
    Par TheGoldViking dans le forum C++Builder
    Réponses: 1
    Dernier message: 14/04/2005, 10h59

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