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 :

Macro d'extraction vers word automatique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    dans l'énergétique mais qui aime l'info
    Inscrit en
    Mars 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : dans l'énergétique mais qui aime l'info
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2019
    Messages : 8
    Par défaut Macro d'extraction vers word automatique
    Bonsoir à tous,
    Pour me faciliter la vie et celle de mes collègue je me suis lancer dans une macro d'extraction depuis excel vers word. Cependant je n'est aucune connaissance en VBA, j'ai des notions d'autre langage de programmation orienté objet alors je me suis dit : "aller jme lance ça doit pas être si compliquer". J'ai donc commencer par me renseigné sur le sujet pour avoir de bonne base, puis j'ai codé et lus des messages d'autres membres qui souhaitaient plus ou moins faire la même chose que moi.
    Bon passons maintenant à mon problème, j'ai donc réaliser une macro qui marche et qui extrait la date et les cases entre 2 cellules donné avec la méthode "range" (je vous joint tout les code plus loin)[1]. Ce genre de macro marche bien pour chaque rapport qui ont les sauts de page au même endroit mais ce n'est pas toujours le cas, je suis donc partis à la recherche d'un moyens plus approprié pour automatiser avec n'importe qu'elle rapport, leur point commun étant la mise en page et la zone d'impression (impossible d'utiliser le nom zone_d_impression dans range car cela met mes 10 pages or je veux chaque page indépendantes).

    j'ai donc trouver une méthode HPageBreaks qui pourrait me sauver mais je n'arrive pas à l'utiliser correctement cela m'affiche un message d'erreur.
    Voici comment je l'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Matrice rapport").HPageBreaks(1).Location.Offset(0, 0).Address
    Si j'ai bien compris je me place dans la feuille "Matrice rapport" au saut de page n°1 sans offset car je veux la cellule suivante (j'utilise l'offset pour récupérer la cellule d'avant afin de les renseigner dans le "range"

    Une dernière question la function que j'utilise pour récupérer la date me la donne sous forme de texte dans un tableau, est t'il possible de récupérer les caractères et de les mettre a la suite du texte à mon signet ?

    Code [1] fonctionnel mais pas optimiser :
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    Sub extraction()
     
    CopDate
    CopPage1
    CopPage2
    CopPage3
    CopPage4
    CopPage5
     
    End Sub
     
    Function CopDate()
     
    'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
    'Lancement application Word
    'Référence Microsoft Word 14.0 Object Library chargée dans menu déroulant Outils
    Dim aWord As Word.Application
    Set aWord = CreateObject("Word.Application")
     
    'Ouverture du rapport-type, rendu visible
    aWord.Documents.Open ("C:\Users\TFT\Théo FEUILLET\Rapport_Type.docx")
    aWord.Visible = False
     
    'Copie 1 depuis Excel\Feuil1
     
    Sheets("Matrice rapport").Select
    Range("H54").Select
    Selection.Copy
     
    'Cherche "date" dans le rapport-type
    aWord.Selection.Goto What:=wdGoToBookmark, Name:="date"
     
    'Colle la selection au signet défini sous forme d'un texte
    aWord.Selection.PasteSpecial DataType:=ppPasteDefault, Link:=False
     
    'Colle la selection au signet défini sous forme d'une image
    'aWord.Selection.PasteSpecial , Link:=False, DataType:=wdPasteEnhancedMetafile, DisplayAsIcon:=False
     
    'Variantes Options de collage :
    '- aWord.Selection.PasteAndFormat (wdPasteDefault) : copie en format tableau / ajuste à la largeur de la page word
    '- aWord.Selection.Paste
    '- aWord.Documents.Tables(1).AutoFitBehavior wdAutoFitWindow
     
    aWord.Quit SaveChanges:=wdSaveChanges
     
     
     
    End Function
     
    Function CopPage1()
     
    'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
    'Lancement application Word
    'Référence Microsoft Word 14.0 Object Library chargée dans menu déroulant Outils
    Dim aWord As Word.Application
    Set aWord = CreateObject("Word.Application")
     
    'Ouverture du rapport-type, rendu visible
    aWord.Documents.Open ("C:\Users\TFT\Théo FEUILLET\Rapport_Type.docx")
    aWord.Visible = False
     
    'Copie 1 depuis Excel\Feuil1
    Sheets("Matrice rapport").Select
    Range("A72:J138").Select
    Selection.Copy
     
    'Cherche "ici" dans le rapport-type
    aWord.Selection.Goto What:=wdGoToBookmark, Name:="ici1"
     
     
    'Colle la selection au signet défini sous forme d'une image
    aWord.Selection.PasteSpecial , Link:=False, DataType:=wdPasteEnhancedMetafile, DisplayAsIcon:=False
     
    'Variantes Options de collage :
    '- aWord.Selection.PasteAndFormat (wdPasteDefault) : copie en format tableau / ajuste à la largeur de la page word
    '- aWord.Selection.Paste
    '- aWord.Documents.Tables(1).AutoFitBehavior wdAutoFitWindow
    aWord.Quit SaveChanges:=wdSaveChanges
     
     
    End Function
    Code [2] avec la tentative rater
    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
    Function CopPage1()
     
    'déclaration des variables pour la selection
    Dim celDeb As Cell
    Dim celFin As Cell
     
    'on recherche la cellule le saut de page n°(x) et on la place dans notre variable
    'Mieux déclarer mes variable ESSAIE SANS DECLA 
    Sheets("Matrice rapport").HPageBreaks(1).Location.Offset(0, 0).Address = celDeb
    Sheets("Matrice rapport").HPageBreaks.Item(2).Location.Offset(-1, 10).Adress = celFin
     
     
     
    'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
    'Lancement application Word
    'Référence Microsoft Word 14.0 Object Library chargée dans menu déroulant Outils
    Dim aWord As Word.Application
    Set aWord = CreateObject("Word.Application")
     
    'Ouverture du rapport-type, rendu visible
    aWord.Documents.Open ("C:\Users\TFT\Théo FEUILLET\Rapport_Type.docx")
    aWord.Visible = False
     
    'Copie 1 depuis Excel\Feuil1
    Sheets("Matrice rapport").Select
    Range("celDeb:celFin").Select
    Selection.Copy
     
    'Cherche "ici" dans le rapport-type
    aWord.Selection.Goto What:=wdGoToBookmark, Name:="ici1"
     
     
    'Colle la selection au signet défini sous forme d'une image
    aWord.Selection.PasteSpecial , Link:=False, DataType:=wdPasteEnhancedMetafile, DisplayAsIcon:=False
     
    'Variantes Options de collage :
    '- aWord.Selection.PasteAndFormat (wdPasteDefault) : copie en format tableau / ajuste à la largeur de la page word
    '- aWord.Selection.Paste
    '- aWord.Documents.Tables(1).AutoFitBehavior wdAutoFitWindow
    aWord.Quit SaveChanges:=wdSaveChanges
     
     
    End Function
    Voilà voilà,
    Merci pour votre aide !

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut Coorection erreur de frappe
    Tu dois inverser les affectation

    celdeb=.....


    Tes déclarations sont archaiques


    Je ferai comme ceci
    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
    Sub CopPage1()
    Dim celDeb As String, celFin As String
    Dim aWord As Object    'Late binding
     
    With Worksheets("Matrice rapport")
        If .HPageBreaks.Count > 1 Then
            celDeb = .HPageBreaks(1).Location.Address
            celFin = .HPageBreaks(2).Location.Offset(-1, 10).Address
            .Range(celDeb & ":" & celFin).Copy
            Set aWord = CreateObject("Word.Application")
            With aWord
                .Documents.Open "C:\Users\TFT\Théo FEUILLET\Rapport_Type.docx"
                .Visible = False
                .Selection.Goto What:=-1, Name:="ici1"
                .Selection.PasteSpecial , Link:=False, DataType:=9, DisplayAsIcon:=False
                .Quit SaveChanges:=True
            End With
            Set aWord = Nothing
        End If
    End With
    End Sub
    EN late binding, pas besoin d'activer le référence MS-W

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Si le bookmark est correctement placé sur le texte à remplacer par la donnée Excel, inutile d'utiliser un Goto.
    Un exemple d'utilisation dans ce sujet : https://www.developpez.net/forums/d1...ts-mise-forme/

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour

    J'ajoute que le code tel présenté au # nécessite l'ouverture/ fermeture de word dans chaque sous sub avec sauvegarde et création d'instance word

    C'est loin d'être une bonne idée.

  5. #5
    Membre du Club
    Homme Profil pro
    dans l'énergétique mais qui aime l'info
    Inscrit en
    Mars 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : dans l'énergétique mais qui aime l'info
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2019
    Messages : 8
    Par défaut
    Bonjour,

    Merci de votra aide je vais regarder tout ça.
    Pour l'ouverture et la fermeture de word, c'était pout moi un moyen de contourner un problème ; lorsque j'éssayais d'écrire dans un word déjà ouvert a l'aide de la macro, je lui demandais d'ouvrir encore une fois word car je ne sais pas écrire dans un word déjà ouvers.

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pour l'ouverture et la fermeture de word, c'était pout moi un moyen de contourner un problème ; lorsque j'éssayais d'écrire dans un word déjà ouvert a l'aide de la macro, je lui demandais d'ouvrir encore une fois word car je ne sais pas écrire dans un word déjà ouvers.
    Il suffit de l'ouvrir une seule fois et d'y travailler. Tu peux pour cela utiliser des sub paramétrées.

    Commence par adapter et tester et on ira pas à pas par la suite

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

Discussions similaires

  1. macro collage special excel vers word
    Par betabasic dans le forum Général VBA
    Réponses: 1
    Dernier message: 05/11/2010, 14h37
  2. Macro Mise en Forme + Export vers Word
    Par Piernod dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/03/2010, 07h47
  3. [AC-2007] Extraction Etat Access vers Word
    Par thi12 dans le forum IHM
    Réponses: 1
    Dernier message: 26/01/2010, 08h20
  4. Macro VBA depuis project vers word
    Par mozart95 dans le forum Project
    Réponses: 2
    Dernier message: 17/02/2008, 11h51
  5. Macro import du texte Word vers Excel
    Par Bernard6773 dans le forum VBA Word
    Réponses: 6
    Dernier message: 05/09/2007, 10h42

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