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 :

Automatisation de Copier-Coller d'Excel vers Word


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Automatisation de Copier-Coller d'Excel vers Word
    Bonjour tout le monde,

    Dans un dossier, j'ai 100 documents word à mettre à jour. Ces 100 documents commençent tous par un certain code (ex. B0124)

    Sur un fichier excel, j'ai un tableau dont les valeurs changent en fonction du code qu'on entre dans une cellule spécifique.

    Je dois, pour chacun des 100 codes, mettre à jour le tableau, copier ce tableau, ouvrir le fichier word correspondant , et coller le tableau à un endroit spécifique dans le document word (entre deux bookmarks..).

    Cette opération est à répéter 100 fois (pour chacun des 100 rapports). Le code a pour but d'automatiser ce procédé.

    Mon code fonctionne très bien. Le seul problème est que la macro buge systématiquement au bout du 8ème rapport qu'elle traite (un débug sur une ligne de code qui passe très bien avant..).

    La solution passagère que j'avais à cela était d'ouvrir le gestionnaire des taches et de fermer le processus Word à chaque bug.
    Ensuite je relance la macro et cela fonctionne.

    Au début je croyais que le problème était lié au fait que le presse papier accumulait des données au fur et à mesure que la macro tournait, et que celui-ci devait être vidé. J'ai donc intégré, à la fin de la boucle, un code pour vider le presse papier.

    Résultat: la macro buge toujours après le 8ème rapport, mais l'erreur est différente, au lieu de me faire un débug sur une ligne de code, j'ai une fenêtre windows qui s'ouvre me disant que les ressources d'Excel ne permettent pas de continuer.

    Maintenant, je suis à cours d'idées pour que la macro puisse tourner d'une seule traite sur les 100 rapports.
    Je suis étonné que les ressources de mon ordi soient limitées, car j'ai un 2.8 GHZ avec 1 GB de RAM, et le disque dur a encore 80% d'espace libre.

    Merci de votre aide précieuse, j'apprécierai toutes les pistes pour parvenir à éviter ce bug. Je ne sais pas si c'est la manière dont j'ai écrit le code qui peut être allegée, où s'il y a une astuce que je ne connais pas.

    Mon code est le suivant:

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Sub Automation()
     
    Dim wdApp As Word.Application, wdDoc As Word.Document
     
    For N = 1 To 100
     
    Application.GoTo Reference:="Reference"
     
    ActiveCell.Offset(N, 0).Copy 
     
    Application.GoTo Reference:="CodeHotelValo"
     
    ActiveCell.Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
     
    Application.GoTo Reference:="Reference"
     
    ActiveCell.Offset(N, -1).Copy 
     
    Sheets("Liste Automation").Select
     
    Range("E3").Select    
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
    Application.CutCopyMode = False
     
    On Error Resume Next
    Set wdApp = GetObject(, "Word.Application")
    If Err.Number <> 0 Then 
    Set wdApp = CreateObject("Word.Application")
    End If
    On Error GoTo 0
    wdApp.Visible = False
     
    NomFichier = Sheets("Liste Automation").Range("E3").Value
     
    Set wdDoc = wdApp.Documents.Open("C:\Documents and Settings\436992\Desktop\MACRO TEST\" & NomFichier)
     
    Sheets("Reporting Valuation Table").Range("A1:P70").Copy
     
    wdDoc.Range(ActiveDocument.Bookmarks("BM3").Range.Start, wdDoc.Bookmarks("BM4").Range.End).PasteSpecial DataType:=wdPasteBitmap
     
    Sheets("Reporting P&L Table").Range("B4:R27").Copy
     
    wdDoc.Range(ActiveDocument.Bookmarks("BM1").Range.Start, wdDoc.Bookmarks("BM2").Range.End).PasteSpecial DataType:=wdPasteBitmap
     
    'Vider le presse papier
    Application.Run _
            "'BETA VERSION NVLLE MACRO.xls'!ccc"
     
    wdDoc.Save
    wdDoc.Close
     
    Next N
     
    End Sub
    Sur la feuille "liste automation" se trouvent tous les nom de fichiers word à mettre à jour, de la ligne 1 à 100.

    Ce fichiers sont du format NOMDECODE - TEXTETEXTE.doc, où NOMDECODE est par exemple B0125.

    Pour votre info, le code suivant est la macro "ccc" que j'appelle en fin de boucle pour vider le presse papier windows:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
    Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
    Public Declare Function EmptyClipboard Lib "user32" () As Long
    Public Declare Function CloseClipboard Lib "user32" () As Long
     
    Public Function ClearClipboard()
        OpenClipboard (0&)
        EmptyClipboard
        CloseClipboard
    End Function
     
    Sub ccc()
        Call ClearClipboard
    End Sub

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir

    je n'ai pas testé ta procédure mais je déplacerais déjà cette portion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    On Error Resume Next
    Set wdApp = GetObject(, "Word.Application")
    If Err.Number <> 0 Then 
    Set wdApp = CreateObject("Word.Application")
    End If
    On Error GoTo 0
    wdApp.Visible = False
    avant la boucle For N = 1 To 100
    et en utilisant un simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set wdApp = CreateObject("Word.Application")
    wdApp.Visible = False


    Par contre, ton code est certainement optimisable en supprimant tous les Select et GoTo.
    tu y gagnerais certainement en temps de procédure.



    bonne soirée
    michel

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci Michel,
    j'ai déplacé les lignes comme tu me l'as dit, je gagne en effet en vitesse mais la macro bloque toujours au bout de 8 boucles...

    Dois-je poster un fichier excel qui reprend le problème peut-être serait-ce plus pratique?

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    Dois-je poster un fichier excel qui reprend le problème peut-être serait-ce plus pratique?
    oui car j'ai un peu de mal à lire et comprendre ta macro

    bon apres midi
    michel

Discussions similaires

  1. [PPT-2003] Copier coller tableau Excel vers PP
    Par Kam's11 dans le forum VBA PowerPoint
    Réponses: 2
    Dernier message: 15/12/2017, 11h23
  2. [XL-2003] Macro Copier/Coller données Excel vers document Word avec Signets
    Par Julien91080 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 22/05/2013, 12h28
  3. [XL-2007] Copier-coller texte Excel vers internet ajoute des guillemets intempestifs
    Par cornelius59 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/10/2009, 21h31
  4. coller de excel vers word
    Par willson dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 24/01/2008, 16h00
  5. Copier - Coller de Excel vers un datagridview
    Par sylchar dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 28/03/2007, 10h26

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