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 :

Mise en page/export Excel sur Word [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut Mise en page/export Excel sur Word
    Bonjour à tous !

    J'ai un fichier excel, d'une dizaine d'onglets, qui me sort au final 3 onglets utiles, synthétiques, mis en forme et qu'il faut que j'imprime.

    J'ai vu comment faire une impression, assez brute des onglets qui m’intéressent.

    Comme je voulais aussi avoir mes onglets sur PDF voire Word, j'ai regardé l'export avec liaison d'Excel sous Word.
    Et à partir de là, il y a peut-être beaucoup plus efficace à faire, ça je ne sais pas

    En tout cas j'ai trouvé deux modes de collages plutôt pratiques : Avec liaison - Feuille de calcul Excel ou Avec liaison - Image en mode point.

    En tout cas si j'utilise un des deux, que je réduis par les coins le tout pour que ça rentre en largeur ma feuille A4, ça donne quelque chose de plutôt correct et qui se modifie selon ce que je tape sur Excel.
    Par la suite je peux modifier la source des liaison pour adapter le word avec un autre version du fichier Excel.

    Le problème (on y vient) c'est que ce que j'ai à mettre sur mon word prend parfois plusieurs pages et parfois non. (ça varie en fonction des équipements sélectionnés/cachés) Du coup sur mon word, ça dépasse de la page et je perds une partie de l'information.
    Je vois que sur word, le lien se fait via une zone d'impression. Du coup je me dis qu'il faudrait que la zone d'impression fasse tout pile une page A4, ou un maximum de 25 lignes par exemple.

    En pièce jointe mon fichier Excel simplifié et le fichier Word https://www.cjoint.com/c/IGlmlQ2KXvP

    Comme faire varier cette zone d'impression pour que le résultat sur Word fasse la longueur d'une page puis qu'une autre soit créer (ou est vide par défaut) dès que la zone d'impression précédente devient trop longue ?

    Merci à tous !

  2. #2
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    En lisant d'autres post, j'ai l'impression que c'est faisable avec du VBA, mais je serai incapable de le faire

    En gros j'ai 3 onglets :

    - Le premier fait 1 à 2 pages
    - Le deuxième fait de 1 à 15 pages, facilement identifiable (l'utilisateur va faire en sorte que chaque page se termine au même endroit (par exemple chaque ligne 70 fait une nouvelle page : 70, 140, 210, etc)
    - Le troisième onglet comme le premier fait de une à deux pages

    Dans le Word, les onglets doivent être dans l'ordre.

    Ce serait top d'avoir la génération du fichier Word avec un macro

    Comme ça pas de changement de source à faire puisque j’obtiens un nouveau fichier Word à chaque fois. D’ailleurs le fichier Word aura le même nom que le fichier Excel.

  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
    Citation Envoyé par Anthony47 Voir le message
    En pièce jointe mon fichier Excel simplifié et le fichier Word https://www.cjoint.com/c/IGlmlQ2KXvP
    Lire les règles du forum : https://www.developpez.net/forums/d8...s-discussions/

    Comme faire varier cette zone d'impression pour que le résultat sur Word fasse la longueur d'une page puis qu'une autre soit créer (ou est vide par défaut) dès que la zone d'impression précédente devient trop longue ?
    Avec la propriété PageSetup.PrintArea appliquée à la Worksheet concernée.
    https://docs.microsoft.com/fr-fr/off...etup.printarea

  4. #4
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Ah pardon, je pensais pas qu'avec ci-joint on ne pouvait pas non plus

    Je voudrais pas te déranger, mais je vois pas trop quoi faire de ce PageSetup.PrintArea

    Mes compétences en VBA sont assez limitées, j'arrive à comprendre les bouts de codes existants, les adaptés un peu, mais souvent pas à m'en créer de toute pièce

  5. #5
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    Petit coup de pouce:

    Si votre zone d'impression est connue ("$A$1:$C$35" par exemple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Sheet1").PageSetup.PrintArea = "$A$1:$C$35"
    Si le nombre de colonnes est variable, et que les colonnes sont adjacentes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Worksheets("Sheet1").Activate 
    ActiveSheet.PageSetup.PrintArea = ActiveCell.CurrentRegion.Address

  6. #6
    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
    Citation Envoyé par Anthony47 Voir le message
    Je voudrais pas te déranger, mais je vois pas trop quoi faire de ce PageSetup.PrintArea
    As-tu regardé le contenu du lien que je t'ai proposé ?

    Mes compétences en VBA sont assez limitées,
    Etant donné que ça fait plusieurs demande que tu places sur ce forum, il serait peut-être temps d'étudier sérieusement la question plutôt que de rester au bricolage.
    Lire ceci : http://bidou.developpez.com/article/VBA/

    j'arrive à comprendre les bouts de codes existants, les adaptés un peu, mais souvent pas à m'en créer de toute pièce
    Justement, dans le lien que je t'ai proposé, il y a un bout de code en exemple.

  7. #7
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Oui, oui, j'ai regardé ce que tu m'as envoyé mais comme dit, ça me parle pas

    Je ne sais pas quoi faire de ce truc, je le met dans une macro ? comme se fait le lien avec Word, je le met en formule de la zone d'impression ? qu'est-ce que je met autours ? Bref je suis perdu

    Tu as raison, il faut que je me forme, et je suis en train de le faire justement depuis quelques semaines, mais j'en suis qu'à essayer de bien comprendre comme régler/déclarer des variables, les boucles et les conditions.. Il me faut encore 5/6 mois avant d'arriver à comprendre ce que je fait de ce PageSetup.PrintArea

  8. #8
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Citation Envoyé par Zekraoui_Jakani Voir le message
    Petit coup de pouce:

    Si votre zone d'impression est connue ("$A$1:$C$35" par exemple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Sheet1").PageSetup.PrintArea = "$A$1:$C$35"
    Si le nombre de colonnes est variable, et que les colonnes sont adjacentes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Worksheets("Sheet1").Activate 
    ActiveSheet.PageSetup.PrintArea = ActiveCell.CurrentRegion.Address
    Merci de ta réponse, mon nombre de colonne est fixe, mais le nombre de lignes non.

    Par exemple ma plage à disposer sur Word va de A1 à M150. Sur cette plage 1/3 des lignes sont masquées (jamais les mêmes, ni le même nombre)

    Tantôt la zone d'impression devrait faire de A1 à M150 parceque beaucouop de lignes sont masquées donc tout rentre sur un page;
    Tantôt la zone d'impression devrait aller de A1 à M45; puis une autre devrait aller de A46 à M150 parceque moins de lignes sont masquées donc ça doit se répartir sur 2 pages.

    J'ai testé la macro que tu m'as envoyé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Bouton2314_Cliquer()
    Worksheets("En_tête").PageSetup.PrintArea = "$A$1:$M$150"
    End Sub
    Mais ça me fait juste une zone d'impression de A1 à M150 sans découpage, et je vois pas non plus comment reporter ça sur Word

  9. #9
    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
    Citation Envoyé par Anthony47 Voir le message
    Oui, oui, j'ai regardé ce que tu m'as envoyé mais comme dit, ça me parle pas
    Je ne sais pas quoi faire de ce truc, je le met dans une macro ?
    Etant donné que c'est un élément de code VBA, bin oui, il faut le mettre dans une macro.

    comme se fait le lien avec Word
    Tu as dis que le lien avec Word était déjà fait dans ta macro.
    Ta question était de savoir comment spécifier la zone d'impression. C'est à ça que répond PageSetup.PrintArea.

    Si la demande est différente, il faut l'indiquer clairement.

    je le met en formule de la zone d'impression ?
    C'est l'élément qui, en VBA, permet de définir la zone d'impression, comme indiqué dans le lien fourni.

    qu'est-ce que je met autours ?
    Je te l'ai dit, il faut le référencé à la feuille de calcul (Worksheet) concernée, comme le montre l'exemple du lien donné.

    Tu as raison, il faut que je me forme, et je suis en train de le faire justement depuis quelques semaines, mais j'en suis qu'à essayer de bien comprendre comme régler/déclarer des variables, les boucles et les conditions.. Il me faut encore 5/6 mois avant d'arriver à comprendre ce que je fait de ce PageSetup.PrintArea
    Dans le document que je t'ai mis en lien dans ma réponse précédente, commence à lire la partie sur les objets (page 102 à 107) et plus particulièrement les objets Workbook (p 128), Worksheet (p 135) et Range (p 143) qui sont les principaux objets manipulés dans Excel.

  10. #10
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    Essayez ceci (création de pdf sous le même répertoire)
    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
    Sub Bouton2314_Cliquer()
    'Attention: si la zone d'impression n'est pas un "range", ça va générer une erreur !!!
     
        Dim zone, zoneX As String
        Dim i As Integer: i = 1
        Dim myPath, myFile As String
     
        Do While True
            zone = "zone " & i
            zoneX = InputBox("Donnez la zone d'impression numéro " & i, "Zones d'impression")
            If zoneX = "" Then Exit Do
            ActiveSheet.PageSetup.PrintArea = zoneX
     
            myPath = ActiveWorkbook.Path + "\"
            myFile = myPath & Replace(ActiveWorkbook.Name, ".xlsm", "")
            myFile = myFile & "_" & Format(Now(), "yyyymmdd-hhmmss") & ".pdf"
     
            Application.DisplayAlerts = False
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myFile, Quality:= _
                xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
                OpenAfterPublish:=False
            Application.DisplayAlerts = True
            ActiveWorkbook.Save
            i = i + 1
        Loop
     
    End Sub

  11. #11
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Etant donné que c'est un élément de code VBA, bin oui, il faut le mettre dans une macro.


    Citation Envoyé par Menhir Voir le message
    Tu as dis que le lien avec Word était déjà fait dans ta macro.
    Ta question était de savoir comment spécifier la zone d'impression.
    Non, non, je disais que j'ai fait le lien avec Word par un simple copier coller avec liaison : je copie sur Excel ce que je souhaite mettre sur Word, puis je fais collage spéciale Image en mode point sur Word. C'est tout
    J'ai pas de macro pour faire ça.

    Pour la zone d'impression c'est juste que je me suis aperçu que ce type de copier/coller générait une zone d'impression, donc je me dis qu'il y a peut-être quelque chose à faire de ce côté là. Si la zone d'imrpession de l'onglet évolue, lors de la mise à jour sur Word ça évolue aussi, donc il faudrait "juste" que la zone d'impression fasse tout pile une page A4.

    C'est tout ce que j'ai su identifier comme axe de solution, mais je ne sais pas le faire

    Citation Envoyé par Zekraoui_Jakani Voir le message
    Merci pour ta proposition, ça fonctionne bien mais c'est trop éloigné de ce que j'ai besoin

    J'ai besoin d'avoir ça sur Word, et ça provient de plusieurs onglets. Mais merci quand même !

  12. #12
    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
    Citation Envoyé par Anthony47 Voir le message
    Pour la zone d'impression c'est juste que je me suis aperçu que ce type de copier/coller générait une zone d'impression
    Un copier/coller qui génère une zone d'impression ??? C'est peu probable.

    Perso, j'arrête là.
    Bonne chance pour la suite.

  13. #13
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Un copier/coller qui génère une zone d'impression ??? C'est peu probable.

    Perso, j'arrête là.
    Bonne chance pour la suite.
    Je te promet que c'est vrai ! C'est ce qui permet à Word de garder le lien avec le fichier Excel, d'ailleurs sur Word quand tu regardes la source de liaison ça pointe bien vers la zone d’impression du fichier Excel. Et si je modifie sur Excel la plage de la zone d'impression, ça se modifie bien sur Word.

    C'est pour ça que je pensais que la solution pouvait venir de la zone d'impression. Je me dis que faire une zone d’impression de la taille d'une page A4 doit pas être bien compliqué

  14. #14
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Quand je passe par l'enregistreur de macro sous Word et que je fais le coller en mode point j'obtiens ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Selection.PasteSpecial Link:=True, DataType:=wdPasteBitmap, Placement:= _
            wdInLine, DisplayAsIcon:=False
    Y a peut-être quelque chose à en tirer ?

  15. #15
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    J'ai testé ceci, et ça fonctionne sur mon pc:
    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 export_excel_to_word()
     
        Set obj = CreateObject("Word.Application")
        obj.Visible = True
        Set newObj = obj.Documents.Add
     
        For Each sh In ActiveWorkbook.Sheets
            sh.Activate
            myRange = InputBox("Donnez la zone d'impression de la feuille " & sh.Name, "Zones à exporter vers Word")
            If myRange = "" Then Exit For    'on a cliqué sur Cancel
            Range(myRange).Select
     
            ActiveSheet.UsedRange.Copy
            newObj.Range.Paste
            Application.CutCopyMode = False
            obj.Activate
            newObj.SaveAs Filename:=Application.ActiveWorkbook.Path & "\" & ActiveSheet.Name
            Set newObj = obj.Documents.Add
        Next sh
     
    End Sub

  16. #16
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Bonjour Zekraoui_Jakani,

    Merci de votre aide.

    Alors j'ai testé ça, on tient quelque chose mais c'est pas encore ça ^^'

    Ce qui ressort de votre macro n'a pas du tout la bonne mise en forme, comme on est sur collage standard on perd toute la mise en forme initiale et les liaisons. Autre point, ça me génère 3 fichiers Excel, alors qu'il faudrait que tout soit sur le même.

    Mais le plus gros problème c'est le résultat du collage, c'est inexploitable pour l'instant

    Mais je suis sûr qu'on peut arriver à faire quelque chose qui marche bien !

    Dans le msgbox, j'écris A1:M140, mais ça me sort toute les colonne quand même, ma syntaxe n'est pas bonne ?

    Notons que je n'ait que 3 onglets dont le nom ne changera pas :
    En_tête
    Descriptif
    Carac_tech

    D'ailleurs la plage à insérer ne change pas non plus en fait, ce sera toujours A1:M140 pour En_tête par exemple. Par contre tantôt je n'aurai que 50 lignes affichées et 90 lignes masquées (donc tout rentre sur un A4) alors que d'autres fois j'aurais 110 lignes affichées et 30 lignes masquées (donc la ça doit se répartir sur deux pages)

  17. #17
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    On ne s'en sortira pas; si votre fichier est "virus-free", mettez en copie ici, sans info confidentielles ! la solution me paraît très proche

  18. #18
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Ci-joint le fichier anonymisé et simplifié mais proche de la réalité.

    Je vais essayé de résumer ce que j'ai besoin :

    Parmi tous les onglets du fichier Excel, il ne m'en faut que 3, dans cet ordre :
    En_tête
    Descriptif
    Carac_tech

    Le contenu doit être exporté sur Word avec liaison et sans modifier la mise en forme d'Excel, de ce que j'ai trouvé, 2 modes de collage fonctionnent sur Word : Avec liaison - Feuille de calcul Excel ou Avec liaison - Image en mode point.

    La plage de En_tête va de A1 jusqu'à M et dernière ligne ou N=1 (j'ai une macro qui masque les lignes où N=0). Si cette plage dépasse une page A4, le reste doit être reporté en page 2 du Word

    L'onglet descriptif présente le descriptif de chaque projet qu'on souhaite afficher sur Word (Note qui peut aider : l'utilisateur d'excel se brouillera en amont pour que le descriptif de chaque projet rentre sur une page) Le nombre de projet est entre 1 à 15 donc pour cette partie on aura de une à 15 pages. Comme pour en-tête j'ai une macro qui masque les lignes où N=0.

    Le dernier onglet à exporter Carac_tech est similaire à en_tête, la plage a exporter va de A1 à E81, et de même j'ai une maccro qui masque les lignes quand H=0, il peut donc aller de 1 à 2pages selon le nombre de lignes masquées.

    Cerise sur le gateau : Le fichier Word s'enregistre au même nom que le nom du fichier Excel

    Voilà, hésite pas si je peux t'éclaircir quelque chose !
    Fichiers attachés Fichiers attachés

  19. #19
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    Voici ma proposition:
    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
    Sub export_excel_to_word()
     
        Dim obj As Object
        Dim newObj As Object
        Dim sh As Worksheet
        Dim myRange, myFile
     
        Set obj = CreateObject("Word.Application")
        obj.Visible = True
        Set newObj = obj.Documents.Add
     
        For Each sh In ActiveWorkbook.Sheets
            If sh.Index < 4 Then
                sh.Activate
                myRange = InputBox("Donnez la zone d'impression de la feuille " & sh.Name, "Zones à exporter vers Word")
                If myRange = "" Then Exit For    'on a cliqué sur Cancel
                If InStr(1, myRange, ":") = 0 Then MsgBox "Coordonnées de plage NON valide !", vbOKOnly, "Incorrect Range": Exit Sub
                'on peut créer un loop sur la ligne ci-dessus
                Range(myRange).Select
     
                ActiveSheet.Range(myRange).Copy
                With obj.Selection
                    .PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
                        Placement:=wdInLine, DisplayAsIcon:=False
                    .TypeParagraph
                End With
     
                Application.CutCopyMode = False
            End If
        Next sh
     
        myFile = Replace(ActiveWorkbook.Name, "xlsm", "docx")   'remplacer "docx" par l'extension qui convient, si nécessaire
        newObj.SaveAs Filename:=Application.ActiveWorkbook.Path & "\" & myFile
     
        MsgBox "Export vers Word terminé", vbInformation + vbOKOnly, "Export vers Word"
     
        obj.Activate    'vous pouvez jouer sur les marges pour améliorer la lecture
        Set obj = Nothing
        Set newObj = Nothing
     
    End Sub

  20. #20
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Oh c'est pas mal !

    Par contre il y a toujours le soucis de la mise en page
    Chaque onglet est sur une seule page du coup le objet dépasse et une grande partie est hors page.

    Impossible de tenir compte des sauts de page ?

    Je me demande si tu t’embête pas à demander la plage, au final la plage est fixe.
    C'est le découpage des pages qui pose problème.

    En tous cas merci pour ce que tu as déjà fait, je suis encore plus convaincu que c'est possible, vu que t'as réussi à exporter les données.

    je vois que tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
                        Placement:=wdInLine, DisplayAsIcon:=False
    J'ai remplacé ça par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .PasteSpecial Link:=True, DataType:=wdPasteBitmap, Placement:= _
            wdInLine, DisplayAsIcon:=False
    Ca me permet d'avoir la liaison et le bon format. A ton avis, est-il possible de mettre de le VBA mise à jour manuelle, par défaut elle est en automatique et ça fait ramer le fichier Excel

    Ensuite si tu regarde les liaisons des éléments, Word reprend les valeur demandé par ton msgbox, mais peut-être qu'on peut remplacer la plage demandé par une plage avec formule ? ça permettrait de scinder les plages peut-être

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Export de tableaux Excel sur Word
    Par Wenth dans le forum Général VBA
    Réponses: 1
    Dernier message: 09/07/2014, 23h07
  2. Mise en page d'un document word depuis excel VBA
    Par tinange dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/12/2012, 13h42
  3. [WebI XiR2] Problème mise en page export excel
    Par moemie dans le forum Débuter
    Réponses: 8
    Dernier message: 18/06/2009, 16h10
  4. [Mise en page] Export Gridview vers Excel
    Par dai.kaioh dans le forum ASP.NET
    Réponses: 9
    Dernier message: 15/03/2008, 13h41
  5. Réponses: 3
    Dernier message: 02/05/2007, 17h27

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