Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/12/2010, 17h59   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 29
Points : 3
Points : 3
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
Type de fichier : doc BABLABA BLA BLA.doc (29,0 Ko, 6 affichages)
ruliann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 18h16   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 317
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 317
Points : 29 214
Points : 29 214
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 ?
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 19h21   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 29
Points : 3
Points : 3
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! )
ruliann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 19h24   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 317
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 317
Points : 29 214
Points : 29 214
Salut,

On peut simplement ajouter un champ avec le contenu de la cellule sans utiliser de lien hypertexte.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 19h45   #5
Invité de passage
 
Inscription : décembre 2010
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 29
Points : 3
Points : 3
qu'est ce que tu entends pas "insérer un champ"?

"un champ" genre champ de publipostage?
ruliann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 22h02   #6
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 983
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 25
Localisation : France, Haute Loire (Auvergne)

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

Informations forums :
Inscription : février 2010
Messages : 983
Points : 1 590
Points : 1 590
Envoyer un message via MSN à carden752
bonjour,

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

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 08h56   #7
Invité de passage
 
Inscription : décembre 2010
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 29
Points : 3
Points : 3
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
ruliann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 09h52   #8
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 317
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 317
Points : 29 214
Points : 29 214
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 :
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
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 12h52   #9
Invité de passage
 
Inscription : décembre 2010
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 29
Points : 3
Points : 3
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 :
1
2
.Height = CentimetersToPoints(2)
.Width = CentimetersToPoints(1)
par
Code :
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 :
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...
ruliann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 19h10   #10
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 317
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 317
Points : 29 214
Points : 29 214
Salut,

Essaie un point (.) pour le séparateur décimal.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 09h45   #11
Invité de passage
 
Inscription : décembre 2010
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 29
Points : 3
Points : 3
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?
ruliann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 13h35   #12
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 317
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 317
Points : 29 214
Points : 29 214
Salut,

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

Code :
1
2
3
4
5
Dim oTbl As Table
 
Set oTbl = ActiveDocument.Tables(1)
Debug.Print oTbl.Cell(1, 1).Width
Set oTbl = Nothing
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 15h05   #13
Invité de passage
 
Inscription : décembre 2010
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 29
Points : 3
Points : 3
ce qui donnerait ça ?

Code :
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
ruliann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 15h46   #14
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 317
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 317
Points : 29 214
Points : 29 214
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.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 16h12   #15
Invité de passage
 
Inscription : décembre 2010
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 29
Points : 3
Points : 3
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é!
ruliann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 19h55   #16
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 317
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 317
Points : 29 214
Points : 29 214
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 :
1
2
3
4
5
6
7
 
Sub PositionCellule()
 
Debug.Print Selection.Information(wdEndOfRangeColumnNumber)
Debug.Print Selection.Information(wdEndOfRangeRowNumber)
 
End Sub
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 09h42   #17
Invité de passage
 
Inscription : décembre 2010
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 29
Points : 3
Points : 3
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 :
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 :
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 :
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 :
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 :
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?
ruliann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 11h01   #18
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 317
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 317
Points : 29 214
Points : 29 214
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 :
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
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 16h21   #19
Invité de passage
 
Inscription : décembre 2010
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 29
Points : 3
Points : 3
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
ruliann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 20h35   #20
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 317
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 317
Points : 29 214
Points : 29 214
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
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h56.


 
 
 
 
Partenaires

Hébergement Web