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 :

Insérer "presque automatiquement" une image dans une cellule de tableau


Sujet :

VBA Word

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 50
    Points : 21
    Points
    21
    Par défaut Insérer "presque automatiquement" une image dans une cellule de tableau
    Bonjour,

    Mon document word fait une centaine de pages. Sur chacune des pages j'ai besoin d'y insérer des photos pour illustrer mon texte.

    De ce fait, j'ai créé sur chaque page, 2 cellules de tableau afin d'insérer une image dans chacune des cellules (cf fichier ci joint).

    Mais la manip traditionnelle " insértion > image > à partir du fichier > répertoire_x > répertoire_y > répertoire_z " me saoullllle !

    au total j'ai plus de 300 photos à insérer! qu'il faut que j'aille chercher dans de nombreux sous-répertoires à chaque fois et c'est très barbant.

    Alors je me demandais: est-il possible, si je copie/colle le chemin d'accès de chaque image dans les cellules (en lien hypertexte?), de constituer une macro qui agirait ainsi: "faire apparaitre toutes les fichiers images dont le chemins d'accès est contenu dans une cellule de tableau"

    c'est de l'utopie ou pas?

    merci!
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    As-tu essayé le glisser déposer des images ?

    tu mets les deux fenêtres l'une à coté de l'autre et tu glisses les images de l'exploreur vers le document et tu la déposes où tu veux ?

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 50
    Points : 21
    Points
    21
    Par défaut
    oué..j'ai essayé, mais bizzarement, qd je fais un "glissé déposé", la taille de la photo ne s'adapte pas à la taille de la cellule du tableau, donc faut que je la redimensionne manuellement pour qu'elle ne fasse pas sauter la mise en page.

    En revanche, qd je place le curseur dans la cellule, et que je fais la manip traditionnelle "insertion> image...etc...", eh bien la taille de la photo s'ajuste bien à celle de la cellule (et pas l'inverse arf! )

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    On peut simplement ajouter un champ avec le contenu de la cellule sans utiliser de lien hypertexte.

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 50
    Points : 21
    Points
    21
    Par défaut
    qu'est ce que tu entends pas "insérer un champ"?

    "un champ" genre champ de publipostage?

  6. #6
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    bonjour,

    Pourquoi ne pas faire sinon un glisser depose et une macro de redimensionnement à la fin qui ajuste les images?

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 50
    Points : 21
    Points
    21
    Par défaut
    faire un glissé/déposé puis, redimensionner via une macro pqoi pas... faudrait que je teste

    Mais vu que je n'y connais rien en VBA, je n'ai plus qu'a attendre qu'une bonne ame me file un coup de main

  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Les images sont des InlineShapes.
    Une des possibilités serait de faire une boucle sur toutes les images du document, vérifier si elles sont dans une cellule.

    si c'est le cas, on procède au redimensionnement de l'image.


    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
    Sub redimimages()
    'Déclaration des variables
    Dim oISh As InlineShape 'variable objet représentant un objet image
    'Boucle sur toutes les images du document
    For Each oISh In ActiveDocument.InlineShapes
        'Sélection de l'image
        'Important pour déterminer si l'image se trouve dans une cellule de tableau
        oISh.Select
        'Test sur la position de l'image
        If Selection.Information(wdWithInTable) Then
            'Si l'image est dans une cellule on la redimentionne
            With oISh
                'affectation des dimensions de l'image
                'On convertit des centimètres en points
                .Height = CentimetersToPoints(2)
                .Width = CentimetersToPoints(1)
            End With
        End If
    Next oISh
     
     
    End Sub

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 50
    Points : 21
    Points
    21
    Par défaut
    salut heureux-Oli

    C'est top ta solution. Ton code fonctionne super et est totalement approprié à mon pblm. C'est un gain de temps.

    J'ai une question subsidiaire: dans ton code, j'ai remplacé les dimensions que tu avais mises:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Height = CentimetersToPoints(2)
    .Width = CentimetersToPoints(1)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Height = CentimetersToPoints(7)
    .Width = CentimetersToPoints(13)
    Mais pour que la photo occupe vraiement toute la place dans la cellule, il faudrait que je rentre ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Height = CentimetersToPoints(7,60)
    .Width = CentimetersToPoints(13,02)
    Mais le VBA ne veut pas de décimales apparemment... pourquoi ?

    qq chose de pratique serait de faire en sorte que grâce à la macro, les diemensions de l'image s'adaptent aux dimensions de la cellule dans laquelle l'image est contenue...

  10. #10
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Essaie un point (.) pour le séparateur décimal.

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 50
    Points : 21
    Points
    21
    Par défaut
    impec Heureux-oli, merci!

    et pour ma culture personnelle, j'ai cherché, via ton site et ton pdf, la commande qui pourrait me permettre de dimensionner les images par rapport au contenu de la cellule dans laquelle elles sont intégrées.

    Je n'ai trouvé que " l'inverse " de cette fonction! page 33! "AllowAutofit" -> qui redimensionne la cellule du tableau par rapport aux dimensions de l'image

    Est-ce à dire que redimensionner une image en fonction d'une cellule n'est pas possible?

  12. #12
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Il suffit de récupérer la taille de la cellule et de l'utiliser pour dimensionner l'image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim oTbl As Table
     
    Set oTbl = ActiveDocument.Tables(1)
    Debug.Print oTbl.Cell(1, 1).Width
    Set oTbl = Nothing

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 50
    Points : 21
    Points
    21
    Par défaut
    ce qui donnerait ç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
    Sub redimimages()
    'Déclaration des variables
    Dim oISh As InlineShape 'variable objet représentant un objet image
    'Boucle sur toutes les images du document
    For Each oISh In ActiveDocument.InlineShapes
        'Sélection de l'image
        'Important pour déterminer si l'image se trouve dans une cellule de tableau
        oISh.Select
        'Test sur la position de l'image
        If Selection.Information(wdWithInTable) Then
            'Si l'image est dans une cellule on la redimentionne
            With oISh
                'affectation des dimensions de l'image
                'récupérer la taille de la cellule et l'utiliser pour dimensionner l'image
                Dim oTbl As Table
                Set oTbl = ActiveDocument.Tables(1)
                Debug.Print oTbl.Cell(1, 1).Width
                Set oTbl = Nothing
            End With
        End If
    Next oISh
     
     
    End Sub

  14. #14
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Le code que je donne montre simplement comment récupérer les dimensions d'une cellule.

    Pour utiliser la dimension de la cellule, il faut récupérer l'index du tableau et de la cellule pour en obtenir la taille et utiliser ces données pour l'image.

  15. #15
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 50
    Points : 21
    Points
    21
    Par défaut
    salut Hereux-Oli

    c'est cool d'expliquer le raisonnement, ce qu'il faut chercher à coder.

    Donc là, si je te suis, il faudrait que j'arrive à trouver la commande qui me permette de récupérer l'index du tableau et de la cellule...

    ben j suis pas couché!

  16. #16
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    C'est dans la FAQ.

    http://word.developpez.com/faq/?page...le_index-table

    Pour connaître la position de la cellule dans une table, on peut utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub PositionCellule()
     
    Debug.Print Selection.Information(wdEndOfRangeColumnNumber)
    Debug.Print Selection.Information(wdEndOfRangeRowNumber)
     
    End Sub

  17. #17
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 50
    Points : 21
    Points
    21
    Par défaut
    salut Heureux-oli

    bon bah j'étais complètement à l'Ouest alors...! j'étais parti à fouiller l'aide de VBA afin de rechercher qqchose qui se rapporte à "index cellule" ou "index tableau". j'en étais arrivé à... n'importe quoi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Set MyRange = _
        ActiveDocument.Range(Start:=ActiveDocument.Content.End - 1, _
        End:=ActiveDocument.Content.End - 1)
    ActiveDocument.Indexes.Add Range:=MyRange, NumberOfColumns:=1, _
        HeadingSeparator:=False
    Cet exemple montre comment insérer une entrée d'index pour le texte sélectionné.
     
    If Selection.Type = wdSelectionNormal Then
        ActiveDocument.Indexes.MarkEntry Range:=Selection.Range, _
            Entry:=Selection.Range.Text
    End If

    Donc si je récapitule:

    1) tu récupères la taille de la cellule grâce à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim oTbl As Table
     
    Set oTbl = ActiveDocument.Tables(1)
    Debug.Print oTbl.Cell(1, 1).Width
    Set oTbl = Nothing

    2)Pour utiliser la dimension de la cellule, tu récupéres l'index du tableau et de la cellule pour en obtenir la taille et utiliser ces données pour l'image, grâce à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub PositionCellule()
     
    Debug.Print Selection.Information(wdEndOfRangeColumnNumber)
    Debug.Print Selection.Information(wdEndOfRangeRowNumber)
     
    End Sub

    3) arrête moi si je me trompe, mais je suppose que maintenant, le but du jeu est d'arriver à placer ces 2 morceaux de code dans le code initial qui était:

    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
    Sub redimimages()
    'Déclaration des variables
    Dim oISh As InlineShape 'variable objet représentant un objet image
    'Boucle sur toutes les images du document
    For Each oISh In ActiveDocument.InlineShapes
        'Sélection de l'image
        'Important pour déterminer si l'image se trouve dans une cellule de tableau
        oISh.Select
        'Test sur la position de l'image
        If Selection.Information(wdWithInTable) Then
            'Si l'image est dans une cellule on la redimentionne
            With oISh
                'affectation des dimensions de l'image
                'On convertit des centimètres en points
                .Height = CentimetersToPoints(2)
                .Width = CentimetersToPoints(1)
            End With
        End If
    Next oISh
     
     
    End Sub

    et là, je suppose encore une fois que je ne peux pas les insérer à n'importe quel endroit...c'est encore une fois qqchose qu'il faut que j'apprenne: ordonnancer la rédaction des fonction et des lignes..

    Est-ce que c'est bon si j'écris:

    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
    Sub redimimages()
    'Déclaration des variables
    Dim oISh As InlineShape 'variable objet représentant un objet image
    'Boucle sur toutes les images du document
    For Each oISh In ActiveDocument.InlineShapes
        'Sélection de l'image
        'Important pour déterminer si l'image se trouve dans une cellule de tableau
        oISh.Select
        'Test sur la position de l'image
        If Selection.Information(wdWithInTable) Then
            'Si l'image est dans une cellule on la redimensionne
            With oISh
            'On récupère l'index du tableau et de la cellule
                PositionCellule()
                Debug.Print Selection.Information(wdEndOfRangeColumnNumber)
                Debug.Print Selection.Information(wdEndOfRangeRowNumber)            
            'On utilise la taille de la cellule pour dimensionner l'image
                Dim oTbl As Table
                Set oTbl = ActiveDocument.Tables(1)
                Debug.Print oTbl.Cell(1, 1).Width
                Set oTbl = Nothing
            End With
       End If
    Next oISh
        
    End Sub

    C'est bon?

  18. #18
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Les Debug.Print que j'utilise servent à afficher dans la fenêtre exécution la valeur d'une variable ou le résultat d'une fonction.

    Ça permet de faire un "monitoring" et de savoir ou voir ce qui se passe.

    si tu utilises les lignes avec un debug.Print, elles ne servent à rien.
    Il faut donc récupérer ou utiliser la valeur renvoyée.

    Pour ça, deux voies, on passe par une variable ou on utilise directement le résultat de la méthode ou fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            With oISh
            'On récupère l'index du tableau et de la cellule
                Debug.Print Selection.Information(wdEndOfRangeColumnNumber)
                Debug.Print Selection.Information(wdEndOfRangeRowNumber)            
            'On utilise la taille de la cellule pour dimensionner l'image
                Dim oTbl As Table
                Set oTbl = ActiveDocument.Tables(1)
                .Width = oTbl.Cell(Selection.Information(wdEndOfRangeRowNumber), Selection.Information(wdEndOfRangeColumnNumber)
    ).Width
                .Heigh .......
                Set oTbl = Nothing
            End With

  19. #19
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 50
    Points : 21
    Points
    21
    Par défaut
    salut Heureux-Oli

    merci de ta persévérence, mais faut que je m'achete un manuel pour les nuls car je n'y comprends rien

    rdv en 2072 qd j'aurai reussi à redimensionner ces fichues images

  20. #20
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    On a quelques tutos en magasin et à faible coût.
    Ils sont gratuits, j'espère pas pour rien.

    http://word.developpez.com/cours/?page=debuter
    http://word.developpez.com/cours/?page=articles#GVBA

Discussions similaires

  1. [Débutant] Manipulation d'images : intégrer une image dans une image
    Par noscollections dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/10/2014, 11h51
  2. Insérer une image dans une image blanche
    Par Premium dans le forum Modules
    Réponses: 2
    Dernier message: 14/11/2008, 10h57
  3. Mettre une Image dans une Image
    Par shadowhocine dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 19/12/2006, 18h40
  4. Réponses: 3
    Dernier message: 30/10/2006, 11h21
  5. Insérer une légende dans une image avec une police plus petite
    Par Paulinho dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 29/04/2006, 14h19

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