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

VBA Word Discussion :

Utilisation de l'outil Image en VBA


Sujet :

VBA Word

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 24
    Points : 16
    Points
    16
    Par défaut Utilisation de l'outil Image en VBA
    Bonjour à tous,

    J'ai crée à l'aide d'un publipostage une quarantaine de documents word identiques dans lesquels il y a des tableaux excel importés par copier-collage spécial "image en mode point", tout cela à l'aide de macro pour piloter le publipostage et l'import de tableaux excel.

    Puis, pour les rendre plus lisibles, je dois faire pivoter 1 de ces tableaux de 90° avec l'"outil image" dans Word. Malheureusement quand je lance l'enregistrement de la macro dans Word et que j'utilise l'"outil image", Word VBA n'enregistre aucune ligne en VBA.
    Plutôt que d'ouvrir les 40 fichiers les uns après les autres pour faire ce pivotement, je préférerais utiliser un morceau de code VBA qui m'ouvre ces fichiers les uns après les autres et me fait pivoter ce tableau de 90° avec également une modification de l'échelle à 75% .

    Avez vous svp une solution?

    De même lorsque je copie-colle des informations d'excel vers word, je ne peux pas faire pivoter l'image copiée en même temps.

    Merci de votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bercud Voir le message
    Bonjour,

    Comment identifiez-vous cette forme dans vos fichiers ?

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 24
    Points : 16
    Points
    16
    Par défaut Utilisation de l'outil Image en VBA. piece jonte
    Bonjour ,

    Voici un fichier Word joint pour mieux comprendre ce que je souhaite faire en VBA. Je souhaite basculer l'image du premier tableau qui est horizontal comme la seconde où l'image a fait une rotation à 90° et le tableau apparait maintenant vertical et devient lisible.

    Pour cela dans word office 365, je sélectionne la forme (l'image de mon tableau). Puis, le Menu "Outil Image" est actif, l'onglet "Mise en forme" est sélectionné, je vais dans le pavé "Taille" ( à droite) . Une fenêtre "disposition" apparait. Je sélectionne l'onglet "Taille" et je modifie les zone "Faire Pivoter" à 270° et la zone Echelle à 26%.
    Merci .

    Salutations.
    Fichiers attachés Fichiers attachés

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bercud Voir le message
    Pour cela dans word office 365, je sélectionne la forme (l'image de mon tableau). Puis, le Menu "Outil Image" est actif, l'onglet "Mise en forme" est sélectionné, je vais dans le pavé "Taille" ( à droite) . Une fenêtre "disposition" apparait. Je sélectionne l'onglet "Taille" et je modifie les zone "Faire Pivoter" à 270° et la zone Echelle à 26%.
    Décidément, je ne dois pas être fait comme tout le monde, j'aurais plutôt vu l'inverse, c'est à dire la deuxième image à l'horizontale et changé l'orientation du document en mode paysage.

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Décidément, je ne dois pas être fait comme tout le monde, j'aurais plutôt vu l'inverse, c'est à dire la deuxième image à l'horizontale et changé l'orientation du document en mode paysage.
    Le souci du mode portrait est le fait que le tableau comporte de nombreuses colonnes. Word dézoome pour faire rentrer l'image dans la largeur de la page et on finit par ne plus rien voir.

    Vous avez raison :
    Autre Solution pour rendre ce tableau lisible en mode horizontal : Insérer un saut de section, passer la page en mode paysage pour cette page uniquement, puis revenir en mode portait pour la suite du document. Oui cela fonctionne bien, mais ce n'est pas ce que souhaite le juriste pour ce contrat.

    Merci de votre aide.

    Salutations.

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par Bercud Voir le message
    Oui cela fonctionne bien, mais ce n'est pas ce que souhaite le juriste pour ce contrat.

    Merci de votre aide.

    Salutations.
    À moins d'avoir une imprimante beaucoup plus large, et une feuille de papier en conséquence, il n'y a pas vraiment de solution directe. Tu peux créer une section distincte et gagner peut-être un centimètre ou deux en réduisant les marges; mais cela risque d'avoir l'air fou.


    Ou bien tu regardes du côté de Publisher qui peut répartir automatiquement les documents trop grands sur plusieurs pages à l'impression, mais c'est loin d'être évident pour le document final.


    Ou bien tu répartis manuellement ton tableau d'origine en plusieurs tableaux plus petits que tu mets à la suite sur ta page.

    Mais de solution directe et esthétique, je doute...
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bercud Voir le message
    Quel code avez-vous utilisé pour obtenir votre fichier ? Pouvez-vous le mettre en ligne ? Pourquoi le deuxième tableau se retrouve dans la position souhaitée et pas le premier ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bercud Voir le message
    Il faut convertir les images en objets Shape et créer un saut de page pour éviter que l'image 2 se retrouve en page 1 après conversion. La hauteur n'est pas optimale en raison des titres présents sur la page 1.

    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
     
    Sub ModifierLaPositionEtLOrientationDeLImage1()
     
    Dim DocEnCours As Document
    Dim ParagrapheEnCours As Paragraph
    Dim I As Integer, J As Integer
    Dim ShapeEnCours As Shape
     
        Set DocEnCours = ActiveDocument
     
        With DocEnCours
     
             ' Création d'un saut de page pour éviter que l'image 2 se retrouve en page 1
             For I = .Paragraphs.Count To 1 Step -1
                 With .Paragraphs(I).Range
                      If .Information(wdActiveEndAdjustedPageNumber) = 1 Then
                         .InsertBreak Type:=wdPageBreak
                         Exit For
                      End If
                 End With
             Next I
     
             ' Transformation des images en objets Shape
             For I = .InlineShapes.Count To 1 Step -1
                 .InlineShapes(I).ConvertToShape
             Next I
     
             ' Sélection de la Shape de la page 1
             .Shapes(.Shapes.Count).Select
     
              ' Repositionnement de la forme.
              With Selection.ShapeRange
                   .Rotation = -90
                   .RelativeHorizontalPosition = wdRelativeHorizontalPositionLeftMarginArea
                   .ScaleHeight 0.23, msoCTrue
                   .ScaleWidth 0.23, msoCTrue
                   .Left = CentimetersToPoints(-1#)
                   .Top = CentimetersToPoints(10.5)
              End With
     
        End With
     
        Set DocEnCours = Nothing
     
    End Sub

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 24
    Points : 16
    Points
    16
    Par défaut Utilisation de l'outil Image en VBA. code
    Citation Envoyé par Eric KERGRESSE Voir le message
    Quel code avez-vous utilisé pour obtenir votre fichier ? Pouvez-vous le mettre en ligne ? Pourquoi le deuxième tableau se retrouve dans la position souhaitée et pas le premier ?
    Voici le code VBA sous Excel que j'ai utilisé pour exporter une zone d'une feuille Excel vers un signet dans Word.

    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
    Sub Export_Donnees_Excel_Dans_Signets_Word()
     
    ' ouvrir le fichier Liste_Publipostage_contrat
    ' ouvrir les fichiers de données
     
    'nécéssite d'activer la référence Microsoft Word xx.x Object Library
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim i As Byte
    Dim FichierOrigine
    Dim FichierMaster
    Dim FeuilleMaster
    Dim Choix_NRO
    Dim Fichier_Contrat
    Dim Departement
     
        FichierMaster = ActiveWorkbook.Name
        FeuilleMaster = ActiveSheet.Name
        Range("H1").Select
     
        Do
     
            ActiveCell.Offset(1, 0).Range("A1").Select
            Choix_NRO = ActiveCell.Value
            Fichier_Contrat = ActiveCell.Offset(0, 1).Range("A1").Value
            Departement = ActiveCell.Offset(0, -3).Range("A1").Value
     
            FichierOrigine = "DQE NRO 52 - 111018_new.xlsx"
            Workbooks(FichierOrigine).Worksheets(Choix_NRO).Range("A1:F80").Copy
     
     
            Set WordApp = CreateObject("word.application") 'ouvre session word
            Set WordDoc = WordApp.Documents.Open("C:\temp\" & Fichier_Contrat & ".doc") 'ouvre document Word
            WordApp.Visible = False 'word masqué pendant l'operation
     
     
           For i = 2 To 2
                Workbooks(FichierOrigine).Worksheets(Choix_NRO).Range("A1:F80").Copy
     
    '           Colle les données dans Word
    '           les signets du document Word sont nommés Signet1 , Signet2 , Signet3
                WordApp.Selection.Goto What:=wdGoToBookmark, Name:="Signet" & i
     
                WordApp.Selection.Range.PasteSpecial Link:=False, DataType:=wdPasteBitmap, Placement:= _
                wdInLine, DisplayAsIcon:=False
     
            Next i
     
     
            WordApp.Visible = True 'affiche le document Word
     
     
            WordDoc.Close True 'ferme le document word en sauvegardant les données
            WordApp.Quit 'ferme la session Word
     
     
            Windows(FichierMaster).Activate
            Worksheets(FeuilleMaster).Select
     
     
        Loop Until ActiveCell.Offset(1, 0).Range("A1").Value = ""
     
     
    ' MsgBox ("operation insertion DQE terminee")
     
    End Sub

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bercud Voir le message
    V
    Je ne vois pas dans ce code, la commande qui fait la rotation à -90 ° de la 2ème image. Comment cela se réalise ?

    Avez-vous testé le code proposé ?

    Sinon, lorsque vous postez du code, mettez le entre balises #.

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 24
    Points : 16
    Points
    16
    Par défaut Utilisation de l'outil Image en VBA
    Citation Envoyé par Eric KERGRESSE Voir le message
    Il faut convertir les images en objets Shape et créer un saut de page pour éviter que l'image 2 se retrouve en page 1 après conversion. La hauteur n'est pas optimale en raison des titres présents sur la page 1.

    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
     
    Sub ModifierLaPositionEtLOrientationDeLImage1()
     
    Dim DocEnCours As Document
    Dim ParagrapheEnCours As Paragraph
    Dim I As Integer, J As Integer
    Dim ShapeEnCours As Shape
     
        Set DocEnCours = ActiveDocument
     
        With DocEnCours
     
             ' Création d'un saut de page pour éviter que l'image 2 se retrouve en page 1
             For I = .Paragraphs.Count To 1 Step -1
                 With .Paragraphs(I).Range
                      If .Information(wdActiveEndAdjustedPageNumber) = 1 Then
                         .InsertBreak Type:=wdPageBreak
                         Exit For
                      End If
                 End With
             Next I
     
             ' Transformation des images en objets Shape
             For I = .InlineShapes.Count To 1 Step -1
                 .InlineShapes(I).ConvertToShape
             Next I
     
             ' Sélection de la Shape de la page 1
             .Shapes(.Shapes.Count).Select
     
              ' Repositionnement de la forme.
              With Selection.ShapeRange
                   .Rotation = -90
                   .RelativeHorizontalPosition = wdRelativeHorizontalPositionLeftMarginArea
                   .ScaleHeight 0.23, msoCTrue
                   .ScaleWidth 0.23, msoCTrue
                   .Left = CentimetersToPoints(-1#)
                   .Top = CentimetersToPoints(10.5)
              End With
     
        End With
     
        Set DocEnCours = Nothing
     
    End Sub
    Bonjour,
    Le code proposé ci-dessus fonctionne parfaitement. Je vais l'adapter à mon problème.
    C'est parfait. Merci.

    Salutations.

    Bernard

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

Discussions similaires

  1. [PPT-2007] Numérotation d'image via VBA (utilisation de masque)
    Par Labrey dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 16/10/2013, 15h06
  2. Réponses: 1
    Dernier message: 26/08/2013, 23h29
  3. delai d'utilisation d'un outil sous vba
    Par sardja dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 26/08/2013, 22h45
  4. Utiliser SQL = (Comme "blabla*") mais En VBA sur I
    Par samlepiratepaddy dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 28/10/2005, 19h30

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