VBA:Justifier un copier-coller d'exl vers wrd

Résolu
Mr_Flush Messages postés 8 Statut Membre -  
Mr_Flush Messages postés 8 Statut Membre -
Bonjour à tous,

J'ai crée un petit programme sous VBA (version Excel), qui a pour but principal de copier à partir d'un classeur excel les cases de mon choix et de les coller dans un nouveau document word créé pour l'occasion. Chaque case excel contient un titre et plusieurs paragraphes, j'ai effectué les retours chariot avec [alt]+[entrée].

Je voudrais que lors du collage dans le fichier excel, les paragraphes soient justifiés. J'ai utilisé la commande wdAlignParagraphJustify qui fonctionne correctement, mais un problème apparaît: En collant, Word justifie absolument tout (i.e. même s'il n'y a que deux mots dans une ligne de la case Excel, en collant sur le fichier Word ces deux mots prendront toute la ligne).

Cela semble venir du fait que alt+entrée ne soit pas considéré sous word comme un retour chariot puisqu'en cliquant sur Afficher/masquer je n'ai pas de ¶ entre les paragraphes mais une flèche de retour à la ligne (du type de celle dessinée sur la touche entrée du clavier). Du coup word justifie tout.

Auriez-vous une solution pour pouvoir justifier "normalement", c'est à dire ni les titres, ni les fins de paragraphes? J'espère avoir été clair.

En vous remerciant,
Mr_Flush

4 réponses

  1. Mr_Flush Messages postés 8 Statut Membre
     
    Je up un peu, désolé :/.

    Peut-être me suis-je mal exprimer, ou ai-je mis mon post dans un mauvais forum?
    0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Salut,
    Non tu t'es très bien exprimé. Cependant, je ne trouve pas vraiment de solutions, et je ne dois pas être le seul...
    Voici les différentes propriétés d'alignement :
    wdAlignParagraphCenter Aligné au centre.
    wdAlignParagraphDistribute Les caractères du paragraphe sont distribués équitablement pour remplir toute la largeur du paragraphe.
    wdAlignParagraphJustify Totalement justifié.
    wdAlignParagraphJustifyHi Justifié avec un rapport élévé de compression de caractères.
    wdAlignParagraphJustifyLow Justifié avec un faible rapport de compression de caractères.
    wdAlignParagraphJustifyMed Justifié avec un rapport moyen de compression de caractères.
    wdAlignParagraphLeft Aligné à gauche.
    wdAlignParagraphRight Aligné à droite.
    essaye peut être (si ce n'est déjà fait) les Hi, Low ou Med, juste pour voir si cela change...
    trouvées ici

    Il faudrait que tu nous copie/colle tout ton code ici, juste pour voir si quelqu'un comprends quelque chose, ou pour voir s'il n'y a pas une autre solution : copier/coller tes titres en alignements à gauche puis tes paragraphes (ça n'est qu'une piste...)

    Pour moi, je serais de retour lundi et constaterait l'avancée, ou non, des travaux...
    Bon week end
    0
  3. Mr_Flush Messages postés 8 Statut Membre
     
    Désolé je viens également de rentrer. En tout cas merci pour la réponse.

    J'ai eu un instant une lueur d'espoir car je ne connaissais pas la fonction wdAlignParagraphDistribute, mais cela n'a malheureusement pas réglé le problème (d'ailleurs je ne vois pas de différence entre Distribute et Justify, en tout cas pas pour mon cas).

    Voici un extrait de mon code, je n'ai mis que ce qui je pense pourrait être utile:

    Module principal
    Public appWrd As Word.Application 'Crée le document word
    Public docWrd As Word.Document
    Public Auto As Boolean
    
    Sub Traitement_Exigences_Clients()
        Set appWrd = CreateObject("Word.Application")
        Set docWrd = appWrd.Documents.Open(ThisWorkbook.Path & "\Masque_Exigences_Clients.doc")
        Dim NomDoc As String
        NomDoc = InputBox("Comment souhaitez-vous appelez votre fichier?"
        docWrd.SaveAs (ThisWorkbook.Path & "\" & NomDoc & ".doc")
    End sub


    Autre module
        If CheckBox3 = True Then
            Range("A5").Select
            Selection.Copy
            appWrd.Selection.PasteSpecial Placement:=wdFloatOverText
        End If 'Il y a une vingtaine de checkbox comme cela qui copient et collent sous word si la checkbox renvoie true
    
        docWrd.Paragraphs.Alignment = wdAlignParagraphJustifyMed
        Application.CutCopyMode = False
        appWrd.Visible = True
        appWrd.Activate
        Me.Hide
    End
    End Sub


    Voila. Dans la case "A5" en question ici, il y a un titre, et plusieurs paragraphes. Le nombre de paragraphes étant variable dans les différentes cellules que je souhaite coller, je ne peux pas vraiment mettre le titre dans une cellule où le copié-collé se ferais avec un alignement à gauche, et les paragraphes dans une autre cellule où le collage se ferait en justifiant. Et de toute façon cela ne règlerait pas le problème de la fin des paragraphes qui se justifie tout seul..

    Bref, je ne m'en sors pas ! N'y aurait-il pas juste moyen d'effectuer sous excel des retour chariots qui soient compris en tant que tels par word?
    0
    1. Mr_Flush Messages postés 8 Statut Membre
       
      En fait je m'étais trompé, il y a effectivement une grande différence entre Justify et Distribute. Cela dit, ce n'est pas ce que je veux non plus ^^
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut,
      Malheureusement, je ne vois pas comment t'aider davantage.
      As tu essayé toutes les possibilités (hi, med, low) ?
      Sinon peut être justifier sous excel avant de transférer sous word :
      If CheckBox3 = True Then
              Range("A5").Select
          With Selection
              .HorizontalAlignment = xlJustify
          End With
              Selection.Copy
              appWrd.Selection.PasteSpecial Placement:=wdFloatOverText
          End If
      0
  4. Mr_Flush Messages postés 8 Statut Membre
     
    Oui j'ai bien essayé tout ça.
    Justifier sous excel est une bone idée, mais malheureusement le copier coller n'a pas l'air de garder l'alignement du texte (bizarre puisque mon titre en gras sous excel reste en gras sous word...). J'ai essayé de trouver un type de copier coller qui garderait le formatage (ou au minimum l'alignement), mais sans succès :/.
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Alors essayer de copier coller comme ceci :
      If CheckBox3 = True Then
              Range("A5").Select
          With Selection
              .HorizontalAlignment = xlJustify
          End With
              Selection.Copy
              appWrd.Selection.Paste
          End If
      0
    2. Mr_Flush Messages postés 8 Statut Membre
       
      Rien n'y fait :/. Ca paraît tellement simple comme ça.. c'est fou de ne pas trouver de solutions!
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bon. Au lieu de traiter le problème par Excel, essayons de le traiter par Word...
      J'ai trouvé ici une solution qui consiste à :
      Ce que tu décris semble provenir non pas d'un retour à la ligne avec
      fin de paragraphe (touche ) mais plustôt de la touche Maj+
      Si c'est le cas, voici ce qu'il faut faire.
      Word : Outils/Options... [Compatibilité]
      Cocher l'option : Etirer les espaces des lignes finissant par
      Maj+RETOUR

      Essaye et tiens nous au courant...
      0
    4. Mr_Flush Messages postés 8 Statut Membre
       
      A priori......... Ca marche! :)
      Du coup même plus besoin d'utiliser wdAlignParagraphMed, à partir du moment où le document word est initialisé en mode justifié.

      Conclusion: Quand un problème reste sans réponse, changer de point de vue! Merci beaucoup pour le temps passé, tout le monde n'aurait pas fait ça:).
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Et ben j't'assure ça fait plaisir!!
      Honnêtement, quand j'ai pris ce sujet, je n'y croyais pas moi même...
      Quant à : tout le monde n'aurait pas fait ça tu serais surppris de cela. Ce site est fait pour cela et bon nombre de ces membres ne "lâchent pas l'affaire" comme on dit.
      Bonne fin de journée.
      0