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 :

Code vba - Modifié mise en forme texte sur Word [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2020
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Code vba - Modifié mise en forme texte sur Word
    Bonjour tout le monde,

    Je bloque depuis un moment sur quelque chose qui me semble simple mais je n'arrive pas à trouver de solution. Je fais donc appel à vos lumières.

    J'ai compilé un code qui me permet en fonction du nombre de feuille sur un fichier Excel de copier sur un Word sous format paysage des tableaux des feuilles nommées de 1 à beaucoup. Ce sont ces tableaux qui m'intéressent avec un saut de page entre chaque tableau copié. Cela me permet de faire une synthèse rapide sur Word.

    Il n'y a pas de problème et le code fonctionne bien. Le seul hic c'est lors de la copie, Word met automatiquement un espacement "après" de 8pt, ce qui fait que le tableau dépasse de la feuille Word. J'avais réalisé le tableau de façon à ce qu'il prenne tout l'espace d'une page Word. Un copier - coller basique fonctionne très bien car il ne m'insère pas cet espacement.

    J'ai essayé d'utiliser l'enregistrement de code de Word pour l'importer dans mon code Excel mais ça ne marche pas. Je pense que je passe à coté de quelque chose mais je ne vois pas.

    Voici le code, que j'ai mis en place :

    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
    Public Const wdOrientLandscape = 1
    Public Const wdSectionBreakNextPage = 2
     
     
    Sub Export_word()
     
    Dim WordApp As Object, WordDoc As Object
    Dim nbf As Long
    nbf = ActiveWorkbook.Sheets.Count
    Dim i As Integer
    i = 0
     
        On Error Resume Next
     
        Set WordApp = CreateObject("Word.Application")
        WordApp.Visible = True
     
        Set WordDoc = WordApp.Documents.Add
        WordDoc.PageSetup.Orientation = wdOrientLandscape
     
    While i < nbf - 9
    Sheets(i + 3).Select
     
        With WordApp.Selection
            Sheets(i + 3).Range("R2:T22").Copy
            .Paste
            .InsertBreak Type:=wdSectionBreakNextPage
        End With
     
    i = i + 1
    Wend
     
    '---------- Partie du code qui ne fonctionne pas------------------
        With WordApp.Selection.WholeStory
            .SpaceBeforeAuto = False
            .SpaceAfter = 0
            .SpaceAfterAuto = False
            .LineUnitAfter = 0
        End With
    '---------- Partie du code qui ne fonctionne pas------------------
     
    Sheets("Typologie").Select
     
        Application.CutCopyMode = False
     
        Set WordDoc = Nothing
        Set WordApp = Nothing
     
        MsgBox "Export Word Ok", , "Succès"
     
    End Sub


    J'espère avoir été clair dans ma demande. Je vous remercie par avance pour votre temps et pour vos futures réponses.
    Bien cordialement,
    Rofou13

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Personnellement, mon interface Excel Word est basé sur les cellules et plages nommées dans excel et sur les signets dans word.
    A une cellule ou plage nommée est donc associée un signet.
    La mise en forme est faite dans mon modèle word qui est ouvert depuis excel.
    Par contre, j'utilise deux méthodes différentes suivant le nombre de cellules copiées. Une méthode pour une cellule unique, une autre pour une plage car pour cette dernière, le format peut poser problème.
    N'étant pas chez moi, je ne sais pas donner une réponse plus détaillée.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2020
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    merci pour ta réponse. En cherchant mon code initial, j'ai vu qu'il était possible de travailler avec le principe de signet.

    Le problème c'est que, d'après ce que j'ai compris, je dois d'abord créer un fichier word et lui affecter un certain nombre de signet prédéfini.

    Or ça ne m'intéresse pas, le fichier excel a pour vocation d'être manipulé, renommé, copié et déplacé de partout. J'ai donc une préférence sur le code que j'ai créé qui consiste à ouvrir un nouveau word vierge et à exporter les tableurs qui m'intéressent.

    Sachant que le nombre de plage copié peut varier en fonction de la saisie. ça va de 1 à une infinité.

    Et pour répondre à ta question ce sera dans tous les cas, une plage de donnée qui sera copiée.

  4. #4
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    Je ne sais pas si ça peut aider, mais dans la page d'accueil de Word, il y a moyen de modifier les "Styles" et y mettre l'apparence par défaut (en créer un template) à utiliser.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2020
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Tu m'as donné une idée, et du coup j'ai modifié le code de la façon suivante. L'idée étant de modifier le style "normal" de la feuille pour enlever cet espacement.

    Le code final et qui fonctionne 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
    60
    61
    62
    Public Const wdOrientLandscape = 1
    Public Const wdSectionBreakNextPage = 2
     
     
    Sub Export_word()
     
    Dim WordApp As Object, WordDoc As Object
    Dim nbf As Long
    nbf = ActiveWorkbook.Sheets.Count
    Dim i As Integer
    i = 0
     
        On Error Resume Next
     
        Set WordApp = CreateObject("Word.Application")
        WordApp.Visible = True
     
        Set WordDoc = WordApp.Documents.Add
        WordDoc.PageSetup.Orientation = wdOrientLandscape
     
    '---------code pour enlever l espacement des mots----------------------------
        With WordDoc.Styles("Normal").ParagraphFormat
            .SpaceBefore = 0
            .SpaceBeforeAuto = False
            .SpaceAfter = 0
            .SpaceAfterAuto = False
            .LineUnitBefore = 0
            .LineUnitAfter = 0
        End With
        WordDoc.Styles("Normal").NoSpaceBetweenParagraphsOfSameStyle = _
            False
        With WordDoc.Styles("Normal")
            .AutomaticallyUpdate = False
            .BaseStyle = ""
            .NextParagraphStyle = "Normal"
        End With
     
    '---------code pour enlever l espacement des mots----------------------------
     
    While i < nbf - 9
    Sheets(i + 3).Select
     
        With WordApp.Selection
            Sheets(i + 3).Range("R2:T22").Copy
            .Paste
            .InsertBreak Type:=wdSectionBreakNextPage
        End With
     
    i = i + 1
    Wend
     
     
    Sheets("Typologie").Select
     
        Application.CutCopyMode = False
     
        Set WordDoc = Nothing
        Set WordApp = Nothing
     
        MsgBox "Export Word Ok", , "Succès"
     
    End Sub

    Merci pour vos réflexions

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le problème c'est que, d'après ce que j'ai compris, je dois d'abord créer un fichier word et lui affecter un certain nombre de signet prédéfini.
    Bien évidemment

    Or ça ne m'intéresse pas, le fichier excel a pour vocation d'être manipulé, renommé, copié et déplacé de partout. J'ai donc une préférence sur le code que j'ai créé qui consiste à ouvrir un nouveau word vierge et à exporter les tableurs qui m'intéressent.
    C'est mon cas également.
    Tous les fichiers Word que j'utilise sont dans un sous-répertoire nommé Template et je dédicace une feuille d'excel à un modèle indiqué comme paramètre ainsi que l'endroit où il doit être sauvé avec numérotation éventuelle.
    Ce qui permet à un utilisateur de créer son propre modèle et ses plages nommées d'une façon autonome.
    Finalement, je ne lis que les paramètres et les plages dédiées sans modifier une ligne de code.

    Sachant que le nombre de plage copié peut varier en fonction de la saisie. ça va de 1 à une infinité.
    Je n'imagine pas un instant faire un programme avec un nombre de lignes ou de colonnes limité. Il est évidement que la plage nommée faisant référence à un tableau structuré, le nombre de ligne est variable.

    Et pour répondre à ta question ce sera dans tous les cas, une plage de donnée qui sera copiée
    Dans mon code, je teste le nombre d'élément qu'il y a dans le Range et si c'est supérieur à 1, j'utilise en VBA, le Copier/Collage Spécial Image en méta dossier. Après de nombreux essai c'est la seule manière que j'ai trouvé pour coller l'image en respectant le format d'excel (couleur, police, etc

    Soit en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.PasteSpecial DataType:=wdPasteEnhancedMetafile, Placement:=wdInLine
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2020
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Merci pour ta réponse. Malheureusement ta méthode copie/colle une image alors que je souhaite copier un tableau qui peut être modifié par la suite sur word car j'aurai d'autres éléments à rajouter par la suite comme une image.

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

Discussions similaires

  1. [XL-2019] CODE VBA pour mise en forme et calculs
    Par titilex dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 21/08/2019, 08h39
  2. Améliorer code VBA pour mise en forme
    Par majothi dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 28/12/2012, 08h20
  3. [VBA-E] mise en forme texte dans le noeud d'une treeview
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/08/2006, 16h16
  4. Réponses: 2
    Dernier message: 03/08/2006, 22h00
  5. Réponses: 8
    Dernier message: 19/06/2006, 16h31

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