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 :

Importer tableau d'Excel sous Word sous format image à partir de Word [WD-2016]


Sujet :

VBA Word

  1. #41
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Wilkoo Voir le message
    Pour tester la mise en forme de vos images, il vous faut vous y prendre provisoirement autrement pour gagner du temps. A partir d'un fichier Word créé avec la macro, vous le sauvegardez en .docm pour pouvoir travailler en VBA directement sur les formes qui ont été créées pour les modifier sans avoir à tout retester.

    De plus, en travaillant directement dans Word, vous pourrez bénéficier de l'intellisense en déclarant vos variables objets. Une fois une variable instanciée, regardez ce qui se passe en mettant un point juste derrière le nom de votre variable. Vous avez accès aux propriétés et aux méthodes possibles pour votre variable, c'est un énorme gain de temps (surtout quand on débute). Ensuite, si vous avez besoin d'explications sur les propriétés et les méthodes servez-vous de l'aide VBA Word pour comprendre le fonctionnement et les paramètres possibles applicables aux collections (Wd....) et il y a souvent des exemples que vous pouvez utiliser.

    En ce qui concerne vos tableaux multiples et diagrammes, il faudrait partir d'un exemple complexe, pour voir ce qui permettrait de distinguer vos zones.

    Une fois votre code au point, il suffira de le transposer dans Excel, en remplaçant le cas échéant les objets Selection par MaSelection déjà instancié dans le code Excel.

  2. #42
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 29
    Points : 7
    Points
    7
    Par défaut
    Bonjour !

    Citation Envoyé par Eric KERGRESSE Voir le message
    DimensionSouhaitee2 et PositionSouhaitee2 ne peuvent pas être de type String mais de type Single dans vos paramètres de MettreEnFormeUneFormeShape. Il faut donc tester par rapport à un 0 qui serait présent dans votre tableau d'origine.

    PositionSouhaitee n'est pas un objet, mais une variable numérique, donc supprimer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set PositionSouhaitee = PositionSouhaitee2
    J'ai modifié le code, et je parviens enfin à faire des modifications sur mes images grâce à ça !

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    Sub MettreAJourLesSignets()
     
    Dim WordApp As Word.Application
    Dim DocEnCours As Word.Document
    Dim MaSelection As Word.Selection
    Dim MaForme As Word.Shape
     
    Dim TableParametres2 As ListObject
    Dim InfosFichiers As Range
    Dim CheminCompletWord As String
    Dim FichierEnCours As Workbook
     
    Dim NomAvant As String
    Dim NomApres As String
     
    Dim i As Long
     
        'On Error GoTo Fin
     
     
        With Sheets("Liste des tableaux")
             CheminCompletWord = .Range("WordRepertoire") & "\" & .Range("WordFichier")
             'CheminCompletWord = C:\Users\gx5932\Documents\Modèles Office personnalisés\Test.dotm
             Set TableParametres2 = .ListObjects("TableDesParametres")
             'TableParametres2 = "TableDesParamètres"
             Set InfosFichiers = TableParametres2.ListColumns("Nom du fichier").DataBodyRange
             'Crée un tableau contenant les données du tableau renseigné en réel (ici, de A11 à G?)
        End With
     
        Set WordApp = CreateObject("word.application") 'ouvre session word
     
        With WordApp
             .Visible = True
             .ChangeFileOpenDirectory Sheets("Liste des tableaux").Range("WordRepertoire")
             'Définit C:\Users\gx5932\Documents\Modèles Office personnalisés comme le dossier dans lequel Word recherche les documents
             Set DocEnCours = .Documents.Add(CheminCompletWord)
             'DocEnCours = C:\Users\gx5932\Documents\Modèles Office personnalisés\Test.dotm
             Set MaSelection = WordApp.Selection
        End With
     
     
        For i = 1 To InfosFichiers.Count
        'Pour chaque ligne du tableau, c'est-à-dire chaque fichier à importer
     
            If InfosFichiers(i).Offset(0, 2) <> "" Then
            'Si l'onglet correspondant n'est pas vide (ex : "2019", "LISTE",...)
     
                OuvertureFichiers InfosFichiers(i), InfosFichiers(i).Offset(0, 1)
                'Ouvre le fichier en question
                Set FichierEnCours = ActiveWorkbook
                If InfosFichiers(i).Offset(0, 3) = "" Then
                'Si pas d'aire demandée
                    RechercheAireAcopier FichierEnCours, InfosFichiers(i).Offset(0, 2)
                    'AireACopier = vraie aire à copier (calculée)
                Else
                    RechercheAireAcopier FichierEnCours, InfosFichiers(i).Offset(0, 2), InfosFichiers(i).Offset(0, 3)
                    'AireACopier = vraie aire à copier (demandée)
                End If
     
                AireACopier.Copy
     
                With MaSelection
                    .GoTo What:=wdGoToBookmark, Name:=InfosFichiers(i).Offset(0, 4)
                    'Se place au niveau du marque-page correspondant
                    .MoveDown unit:=wdParagraph, Count:=1, Extend:=wdExtend
                    'Déplace vers le bas d'un paragraphe et renvoie la distance de déplacement sous la forme d’un nombre d’unités
                    .PasteSpecial Link:=True, DataType:=4, Placement:=wdInLine
                    'On le colle dans le doc atuel (word), avec lien avec le tableau sous Excel, sous format image
                End With
     
     
                With DocEnCours
                    If .InlineShapes.Count > 0 Then
                    'Si le nombre d'éléments dans la collection spécifiée est non nul
                        Set MaForme = .InlineShapes(1).ConvertToShape
                        With MaForme
                            '.ConvertToInLineShape
                            NomAvant = .Name
                            .Name = InfosFichiers(i).Offset(0, 4)
                            NomApres = .Name
                            Debug.Print "Nom avant : " & NomAvant & ", nom après : " & NomApres
                            Select Case .Name
                            '.Name est la valeur à vérifier
                                Case "Tableau_1", "Tableau_2", "Tableau_3", "Tableau_4"
                                'Si la condition "Tableau_1" ou "Tableau_2" ou "Tableau_3" ou "Tableau_4" est remplie
                                    MettreEnFormeUneFormeShape MaForme, InfosFichiers(i).Offset(0, 5), InfosFichiers(i).Offset(0, 6)
                            End Select
                        End With
                    End If
                End With
     
     
     
                FermetureFichiers FichierEnCours.Name, False
     
                Set FichierEnCours = Nothing
     
            End If
     
            Next i
     
            With DocEnCours
     
                ' For I = 1 To .Shapes.Count
                '     Debug.Print .Shapes(I).Name
                ' Next I
     
                .Close savechanges:=wdSaveChanges  'si on veut fermer le document word en sauvegardant les données
     
            End With
     
            GoTo Fin
     
     
    Fin:
     
        WordApp.Quit
        'ferme la session Word
     
        Set InfosFichiers = Nothing
        Set TableParametres2 = Nothing
        Set MaSelection = Nothing
        Set DocEnCours = Nothing
        Set WordApp = Nothing
     
    End Sub
    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
    Sub MettreEnFormeUneFormeShape(ByVal ShapeEnCours2 As Word.Shape, ByVal DimensionSouhaitee2 As String, ByVal PositionSouhaitee2 As String)
     
    Dim Dimension As Single
    Dim Position As Single
     
            With ShapeEnCours2
                If DimensionSouhaitee2 <> "" Then
                'S'il y a une dimension demandée
                    Dimension = CSng(DimensionSouhaitee2)
                    .ScaleWidth Dimension, msoFalse, msoScaleFromTopLeft
                    .ScaleHeight Dimension, msoFalse, msoScaleFromBottomRight
                End If
                Debug.Print DimensionSouhaitee2, " ", Dimension
                Debug.Print VarType(DimensionSouhaitee2), " ", VarType(Dimension)
     
                If PositionSouhaitee2 <> "" Then
                'S'il y a une position demandée
                    Position = CSng(PositionSouhaitee2)
                    .IncrementLeft Position
                End If
                Debug.Print PositionSouhaitee2, " ", Position
                Debug.Print VarType(PositionSouhaitee2), " ", VarType(Position)
     
                'On fait en sorte que le texte se positionne autour de l'image, et non pas dessous (par défaut)
                With .WrapFormat
                    .AllowOverlap = True
                    .Side = wdWrapBoth
                    .DistanceTop = CentimetersToPoints(0)
                    .DistanceBottom = CentimetersToPoints(0)
                    .DistanceLeft = CentimetersToPoints(0.32)
                    .DistanceRight = CentimetersToPoints(0.32)
                    .Type = wdWrapSquare
                End With
            End With
     
    End Sub
    Je me pose 2 questions par rapport à ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select Case .Name
                            '.Name est la valeur à vérifier
                                Case "Tableau_1", "Tableau_2", "Tableau_3", "Tableau_4"
                                'Si la condition "Tableau_1" ou "Tableau_2" ou "Tableau_3" ou "Tableau_4" est remplie
    Y a-t-il un moyen de rendre ce code valable pour tous les signets, sans avoir besoin de les réécrire tous à la main ? J'ai essayé un "for", mais ça ne fonctionne pas dans un Select Case.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub MettreEnFormeUneFormeShape(ByVal ShapeEnCours2 As Word.Shape, ByVal DimensionSouhaitee2 As String, ByVal PositionSouhaitee2 As String)
    Le résultat de cette macro n'est pas vraiment celui que j'escomptais, puisque les images se décalent du signet (parfois changent de page). Savez-vous comment faire en sorte que ce ne soit plus le cas, que le document reste "ordonné", mais que les images s'intercalent juste entre le texte ?
    En outre, le texte se met autour de l'image, (comme je le lui demande), mais ce que je voudrais, c'est qu'il se mette à la ligne en bas de l'image (à la suite), avec un espace entre l'image et le texte. J'ai eu beau tenter des enregistrements de macros sous Word et faire des recherches, je ne suis pas parvenue à trouver comment faire. Savez-vous comment ce serait possible ?

    Merci d'avance !

  3. #43
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 29
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Pour tester la mise en forme de vos images, il vous faut vous y prendre provisoirement autrement pour gagner du temps. A partir d'un fichier Word créé avec la macro, vous le sauvegardez en .docm pour pouvoir travailler en VBA directement sur les formes qui ont été créées pour les modifier sans avoir à tout retester.

    De plus, en travaillant directement dans Word, vous pourrez bénéficier de l'intellisense en déclarant vos variables objets. Une fois une variable instanciée, regardez ce qui se passe en mettant un point juste derrière le nom de votre variable. Vous avez accès aux propriétés et aux méthodes possibles pour votre variable, c'est un énorme gain de temps (surtout quand on débute). Ensuite, si vous avez besoin d'explications sur les propriétés et les méthodes servez-vous de l'aide VBA Word pour comprendre le fonctionnement et les paramètres possibles applicables aux collections (Wd....) et il y a souvent des exemples que vous pouvez utiliser.

    En ce qui concerne vos tableaux multiples et diagrammes, il faudrait partir d'un exemple complexe, pour voir ce qui permettrait de distinguer vos zones.

    Une fois votre code au point, il suffira de le transposer dans Excel, en remplaçant le cas échéant les objets Selection par MaSelection déjà instancié dans le code Excel.


    Je n'avais pas vu votre message, désolée ! Je vais essayer de voir si j'arrive à gérer les images sur Word, dans ce cas. (malgré tout, les 2 problèmes évoqués ci-dessus me posaient déjà problème avant que je code depuis Excel grâce à vous).

    Je vais essayer de m'y atteler à nouveau, maintenant que je comprends un pue mieux comment le code marche !

    Et merci pour vos conseils, que je ne manquerai pas d'appliquer !

  4. #44
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Wilkoo Voir le message
    Une solution de contournement pour positionner les images consiste à créer un tableau d'une cellule qui s'auto-dimensionne dans laquelle vous positionnez votre signet comme dans le document modèle joint :
    Pensez à modifier le nom du modèle Word dans l'onglet Excel.

    Le code devient :
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    Public AireACopier As Range
     
    Sub MettreAJourLesSignets()
     
    Dim WordApp As Word.Application
    Dim DocEnCours As Word.Document
    Dim MaSelection As Word.Selection
    Dim MaForme As Word.Shape
     
    Dim TableParametres2 As ListObject
    Dim AireFichiers As Range
    Dim CheminCompletWord As String, NomAvant As String, NomApres As String
    Dim FichierEnCours As Workbook
     
    Dim I As Long
     
     
     
        On Error GoTo Fin
     
     
        With Sheets("Liste des tableaux")
             CheminCompletWord = .Range("WordRepertoire") & "\" & .Range("WordFichier")
             Set TableParametres2 = .ListObjects("TableDesParametres")
             Set AireFichiers = TableParametres2.ListColumns("Nom du fichier").DataBodyRange
        End With
     
        Set WordApp = CreateObject("word.application") 'ouvre session word
     
        With WordApp
             .Visible = True
             .ChangeFileOpenDirectory Sheets("Liste des tableaux").Range("WordRepertoire")
             Set DocEnCours = .Documents.Add(CheminCompletWord)
             Set MaSelection = WordApp.Selection
        End With
     
        For I = 1 To AireFichiers.Count
     
                 If AireFichiers(I).Offset(0, 2) <> "" Then
     
                    OuvertureFichiers AireFichiers(I), AireFichiers(I).Offset(0, 1)
                    Set FichierEnCours = ActiveWorkbook
                    If AireFichiers(I).Offset(0, 3) = "" Then
                       RechercheAireAcopier FichierEnCours, AireFichiers(I).Offset(0, 2)
                    Else
                       RechercheAireAcopier FichierEnCours, AireFichiers(I).Offset(0, 2), AireFichiers(I).Offset(0, 3)
                    End If
     
                    AireACopier.Copy
                    With MaSelection
                         .Goto What:=wdGoToBookmark, Name:=AireFichiers(I).Offset(0, 4)
                         '.MoveDown unit:=wdParagraph, Count:=1, Extend:=wdExtend
                         'On le colle dans le doc atuel (word), avec lien avec le tableau sous Excel, sous format image
                         .PasteSpecial Link:=True, DataType:=4, Placement:=wdInLine
                    End With
     
                  '  With DocEnCours
                  '    If .InlineShapes.Count > 0 Then
                  '       Set MaForme = .InlineShapes(1).ConvertToShape
                  '       With MaForme
                  '          '  .ConvertToInlineShape
                  '            NomAvant = .Name
                  '            .Name = AireFichiers(I).Offset(0, 4)
                  '            NomApres = .Name
                  '            Debug.Print "Nom avant : " & NomAvant & ", nom après : " & NomApres
                  '            Select Case .Name
                  '                   Case "Tableau_1", "Tableau_2", "Tableau_3", "Tableau_4"
                  '                        MettreEnFormeUneFormeShape MaForme
                  '            End Select
                  '       End With
                  '
                  '   End If
               '     End With
     
                    FermetureFichiers FichierEnCours.Name, False
     
                   Set FichierEnCours = Nothing
     
               End If
     
        Next I
     
        With DocEnCours
     
            ' For I = 1 To .Shapes.Count
            '     Debug.Print .Shapes(I).Name
            ' Next I
     
             .Close savechanges:=wdSaveChanges  'si on veut fermer le document word en sauvegardant les données
     
        End With
     
        GoTo Fin
     
    Fin:
     
        WordApp.Quit 'ferme la session Word
     
        Set AireFichiers = Nothing
        Set TableParametres2 = Nothing
        Set MaSelection = Nothing
        Set DocEnCours = Nothing
        Set WordApp = Nothing
     
    End Sub

  5. #45
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 29
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Une solution de contournement pour positionner les images consiste à créer un tableau d'une cellule qui s'auto-dimensionne dans laquelle vous positionnez votre signet comme dans le document modèle joint
    Bonjour,

    Je viens de tenter d'effectuer de la manière dite ci-dessus.
    Avec les tableaux théoriques 1, 2, 3 et 4, cela fonctionne.
    Cependant, avec mes documents, cela marche encore moins que la façon de procéder initiale : quand l'image est trop grande pour la taille de la page, le programme plante et Excel se ferme, plutôt que d'adapter l'image à la cellule.

    Je vais donc continuer de tenter de modifier mes images à posteriori... merci quand même !

  6. #46
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 29
    Points : 7
    Points
    7
    Par défaut
    Dans le document word test sans aucune image, le code fonctionne sans soucis et les images se redimensionnent bien.

    Mais dans le document final pré-rempli où je dois insérer les images à la fin, je rencontre le problème suivant, même après modification du code concernant l'image :
    - j'obtiens des erreurs 'ConvertToShape' de 'InLineShape' a échoué
    - la forme qui est modifiée n'est pas la forme dont je viens de changer le nom, mais une des autres formes préexistant dans le modèle Word (avant toute insertion).

    J'ai essayé le code 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
    With DocEnCours
                    If .InlineShapes.Count > 0 Then
                    'Si le nombre d'éléments dans la collection spécifiée est non nul
                        Set MaForme = .InlineShapes(1).ConvertToShape
                        '.ConvertToInlineShape
                        With MaForme
                            NomAvant = .Name
                            .Name = InfosFichiers(i).Offset(0, 4)
                            NomApres = .Name
                            Debug.Print "Nom avant : " & NomAvant & ", nom après : " & NomApres
                            Select Case .Name
                            '.Name est la valeur à vérifier
                                Case "Forme_1", "Forme_2", "Forme_3", "Forme_4"
                                'Si une des conditions est remplie
                                    MettreEnFormeUneFormeShape DocEnCours.Shapes(NomApres), InfosFichiers(i).Offset(0, 5), InfosFichiers(i).Offset(0, 6)
                            End Select
                        End With
                    End If
                End With
    Puis celui-ci :
    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
    With DocEnCours
                    If .InlineShapes.Count > 0 Then
                    'Si le nombre d'éléments dans la collection spécifiée est non nul
                        Set MaForme = .InlineShapes(1).ConvertToShape
                        '.ConvertToInlineShape
                        With MaForme
                            NomAvant = .Name
                            .Name = InfosFichiers(i).Offset(0, 4)
                            NomApres = .Name
                            Debug.Print "Nom avant : " & NomAvant & ", nom après : " & NomApres
                            Select Case .Name
                            '.Name est la valeur à vérifier
                                Case "Forme_1", "Forme_2", "Forme_3", "Forme_4"
                                'Si une des conditions est remplie
                                    MettreEnFormeUneFormeShape MaForme, InfosFichiers(i).Offset(0, 5), InfosFichiers(i).Offset(0, 6)
                            End Select
                        End With
                    End If
                End With
    Mais j'arrive au même résultat : d'autres formes sont modifiées.

    Lorsque je demande le nombre de InLineShapes, il ne bouge pas pendant toute la manipulation (il vaut 4 à chaque doc inséré)
    C'est le nombre de Shapes qui augmente d'un à chaque image inséré.

    Qu'en pensez-vous ? Comment corriger cela ? Je bloque vraiment sur ce problème, mais je continue d'essayer.

    Merci d'avance !

  7. #47
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Wilkoo Voir le message
    A tester :
    Un problème subsiste sur le signet Sp2, l'image n'est pas transformée, je n'ai pas eu le temps de voir pourquoi.

    Sinon, les dimensions de l'image étant proportionnelles à l'image d'origine par défaut, il faut seulement ramener la largeur des formes à l'espace disponible sur la page (16 cm). La largeur étant mesurée en points et qu'un pouce (2,5 cm) correspond à 72 points, la largeur par défaut doit être de 460,8 points. Quant à la position gauche par rapport à la page : 69,5 points
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    Public AireACopier As Range
     
     
    Sub MettreAJourLesSignets()
     
    Dim WordApp As Word.Application
    Dim DocEnCours As Word.Document
    Dim MaSelection As Word.Selection
    Dim MaForme As Word.Shape
     
    Dim TableParametres2 As ListObject
    Dim InfosFichiers As Range
    Dim CheminCompletWord As String
    Dim FichierEnCours As Workbook
     
    Dim NomAvant As String
    Dim NomApres As String
     
    Dim I As Long, NbInLineShapes As Long
     
     
        'On Error GoTo Fin
     
     
        With Sheets("Liste des tableaux")
             CheminCompletWord = .Range("WordRepertoire") & "\" & .Range("WordFichier")
             Set TableParametres2 = .ListObjects("TableDesParametres")
             Set InfosFichiers = TableParametres2.ListColumns("Nom du fichier").DataBodyRange
        End With
     
        Set WordApp = CreateObject("word.application") 'ouvre session word
     
        With WordApp
             .Visible = True
             .ChangeFileOpenDirectory Sheets("Liste des tableaux").Range("WordRepertoire")
             Set DocEnCours = .Documents.Add(CheminCompletWord)
             Set MaSelection = WordApp.Selection
             NbInLineShapes = DocEnCours.InlineShapes.Count
        End With
     
     
        For I = 1 To InfosFichiers.Count
     
            If InfosFichiers(I).Offset(0, 2) <> "" Then
     
                OuvertureFichiers InfosFichiers(I), InfosFichiers(I).Offset(0, 1)
                Set FichierEnCours = ActiveWorkbook
                If InfosFichiers(I).Offset(0, 3) = "" Then
                    RechercheAireAcopier FichierEnCours, InfosFichiers(I).Offset(0, 2)
                Else
                    RechercheAireAcopier FichierEnCours, InfosFichiers(I).Offset(0, 2), InfosFichiers(I).Offset(0, 3)
                End If
     
                AireACopier.Copy
     
                With MaSelection
                    .GoTo What:=wdGoToBookmark, Name:=InfosFichiers(I).Offset(0, 4)
                    .PasteSpecial Link:=True, DataType:=4, Placement:=wdInLine
                End With
     
                With DocEnCours
                    If .InlineShapes.Count > 0 Then
                        Set MaForme = .InlineShapes(NbInLineShapes + 1).ConvertToShape
                      '  Debug.Print "Type MaForme : " & VarType(MaForme)
                        With MaForme
                            NomAvant = .Name
                            .Name = InfosFichiers(I).Offset(0, 4)
                            NomApres = .Name
                            Debug.Print "Nom avant : " & NomAvant & ", nom après : " & NomApres
                            Select Case .Name
                                   Case "Calendrier", "Hab_1", "Hab_2", "Com", "Diagram_Pre", "Rai", "Co", "D", "Qu", "Rac", "Sp1", "Sp2"
                                        .Width = 460.8
                                        .Left = 69.5
                            End Select
                        End With
                        Set MaForme = Nothing
                        NbInLineShapes = .InlineShapes.Count
                    End If
                End With
     
                FermetureFichiers FichierEnCours.Name, False
     
                Set FichierEnCours = Nothing
     
            End If
     
            Next I
     
            With DocEnCours
                .Close savechanges:=wdSaveChanges  'si on veut fermer le document word en sauvegardant les données
            End With
     
            GoTo Fin
     
    Fin:
     
        WordApp.Quit
        'ferme la session Word
     
        Set InfosFichiers = Nothing
        Set TableParametres2 = Nothing
        Set MaSelection = Nothing
        Set DocEnCours = Nothing
        Set WordApp = Nothing
     
    End Sub
    Pour trouver la position gauche d'une sélection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub TestPositionGauche()
     
        Debug.Print Selection.Range.Information(wdHorizontalPositionRelativeToPage)
     
    End Sub

  8. #48
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 29
    Points : 7
    Points
    7
    Par défaut Mise en standby du sujet
    Citation Envoyé par Eric KERGRESSE Voir le message
    A tester :
    Un problème subsiste sur le signet Sp2, l'image n'est pas transformée, je n'ai pas eu le temps de voir pourquoi.

    Bonjour,
    J'ai essayé le code proposé mais ça n'a pas fonctionné, j'ai donc décidé de provisoirement mettre ça en standby pour avancer sur d'autres tâches.
    J'ai amélioré le code et ajouté des fonctionnalités, mais la redimension des images me pose toujours problème.

    Cela dit, votre aide m'a été vraiment utile et précieuse et j'ai beaucoup progressé déjà, et mieux compris comment coder en vba Excel. Je vous en remercie encore.

    Je reviendrai sur cette discussion lorsque je me pencherai à nouveau sur le problème, ce qui n'est pas encore d'actualité.

    Merci à vous pour votre aide !

    Cordialement.

  9. #49
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Wilkoo Voir le message
    Bonjour,

    OK.
    Regardez peut-être l'ordre des fichiers pour qu'ils soient traités dans l'ordre des signets sur le document.

  10. #50
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 29
    Points : 7
    Points
    7
    Par défaut Problème résolu
    Bonjour,

    Je suis finalement revenue sur mon problème de redimensionnement d'images après avoir passé beaucoup de temps sur d'autres automatisations.

    J'ai pas mal bidouillé le reste du code, donc je pense que ce n'était pas tout, mais j'ai finalement trouvé une des causes du problème :

    Dans mon document modèle Word, il existait déjà plusieurs InLineShapes. Une fois celles-ci changées manuellement de format (devant le texte par exemple), le nouveau code que j'avais écrit fonctionnait.

    Pour insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     With MaSelection
                        .GoTo What:=wdGoToBookmark, Name:=InfosFichiers(I).Offset(0, 9)     'On se rend au signet correspondant du doc Word modèle
                        .PasteSpecial Link:=True, DataType:=4, Placement:=wdInLine      'On colle le tableau avec lien au doc source, sous format image, avec un format tel que le texte sera décalé
                    End With
    Pour reformatage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    With DocEnCours
                    If .InlineShapes.Count > 0 Then
                        NbInLineShapes = .InlineShapes.Count
                        'Debug.Print .InlineShapes.Count
                        With .InlineShapes(NbInLineShapes)
                            If InfosFichiers(I).Offset(0, 10) <> "" Then
                                .ScaleHeight = InfosFichiers(I).Offset(0, 10)
                                .ScaleWidth = InfosFichiers(I).Offset(0, 10)
                            End If
                        End With
                    End If
                End With
    Voilà en espérant que ça puisse en aider d'autres dans le même cas !

    Merci encore à Eric Kergresse, grâce à qui j'ai pu résoudre ce problème, mais aussi d'autres que j'ai rencontrés plus tard

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Importer un graphique excel sous delphi 6
    Par PimpW dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 29/07/2008, 23h39
  2. import de donnée excel sous word
    Par CoOki_ dans le forum Word
    Réponses: 5
    Dernier message: 17/08/2007, 18h16
  3. Importer un fichier Excel sous MySQL
    Par Yagami_Raito dans le forum Requêtes
    Réponses: 5
    Dernier message: 06/05/2007, 23h21
  4. [VBA] Importer une feuille Excel sous Access
    Par Keldon dans le forum VBA Access
    Réponses: 10
    Dernier message: 26/04/2007, 09h22
  5. Importé un fichier excel sous SQL Server 2005
    Par summer91 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 01/05/2006, 10h52

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