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 25/10/2007, 03h06   #1
Futur Membre du Club
 
Inscription : mars 2005
Messages : 88
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mars 2005
Messages : 88
Points : 15
Points : 15
Par défaut label automatique de diagrammes

Bonjour à tous

Voilà, j'ai un document Word qui contient pas mal de diagrammes et de tableaux importés depuis Excel.
J'ai envie de les légender, donc j'ai fait la petite fonction suivante

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
Private Sub InsertAfterFigure(ByVal tempTag As String)
    Dim figureCount As Integer, i As Integer
 
    ' The 2nd part is to count objects such as Excel Worksheets
    figureCount = ActiveDocument.Shapes.Count + ActiveDocument.InlineShapes.Count
 
    'Go to the begining of the document
    Selection.HomeKey Unit:=wdStory
    'Search for the graphics and insert temporary tags
    For i = 1 To figureCount
        Selection.GoTo What:=wdGoToGraphic, Which:=wdGoToNext, Count:=1, Name:=""
        Selection.MoveRight Unit:=wdCharacter, Count:=2
        Selection.TypeText Text:=vbCrLf
        Selection.MoveLeft Unit:=wdCharacter, Count:=1
        Selection.TypeText Text:=tempTag
        Selection.ClearFormatting
    Next i
End Sub
Le problème, c'est que dans mon ActiveDocument.Shapes.Count, les TextBox sont comptées, mais qu'elles ne semblent pas prises en compte par wdGoToGraphic.

Du coup, j'aimerais savoir comment retrancher le nombre de TextBox à ActiveDocument.Shapes.Count, ou alors au pire, comment les prendre en compte dans mon GoTo T_T

Si quelqu'un a une idée merci !!!
Bibi218 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 06h50   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
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 354
Points : 29 270
Points : 29 270
Tu veux absolument faire ça en VBA ?
On peut le faire sans VBA et toutes les légendes s'y trouvent.
__________________
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 25/10/2007, 07h02   #3
Futur Membre du Club
 
Inscription : mars 2005
Messages : 88
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mars 2005
Messages : 88
Points : 15
Points : 15
Dans l'absolu, j'ai hérité d'un énorme script VBA pour faire la mise en forme de documents tout simplement énormes, je me suis juste contenté de rajouter quelques fonctions, dont celle-ci.
Après, s'il y a une autre façon de faire complètement automatique, je ne suis pas contre, mais c'est juste qu'avec VBA j'ai juste une macro à exécuter par document et pas 36 manips
Bibi218 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 08h21   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
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 354
Points : 29 270
Points : 29 270
Essaie comme çà pour voir.

Code :
1
2
3
4
5
6
7
 
For i = 1 To figureCount
    Selection.ShapeRange.Select
    ActiveDocument.Shapes(i).Select
    Selection.InsertCaption Label:="Figure", TitleAutoText:="InsertCaption" & i, _
        Title:="", Position:=wdCaptionPositionBelow, ExcludeLabel:=0
Next i
__________________
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 25/10/2007, 08h54   #5
Futur Membre du Club
 
Inscription : mars 2005
Messages : 88
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mars 2005
Messages : 88
Points : 15
Points : 15
Bon finalement j'ai fait un truc moche (pas taper !!!)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
    figureCount = ActiveDocument.Shapes.Count
    'Go to the begining of the document
    Selection.HomeKey Unit:=wdStory
    'Search for the tables and insert temporary tags
    For i = 1 To figureCount
    ' doesn't count text boxes
    If ActiveDocument.Shapes(i).Type = 17 Then
        figureCount = figureCount - 1
    End If
    Next i
    figureCount = figureCount + ActiveDocument.InlineShapes.Count

Je parcours tous mes shape, et si j'en trouve qui sont du type 17 (textbox), je les enleve du compte final...
Par contre, je trouve que ce 17 fait vraiment tache, on a pas des constantes du genre TextBoxType ou quelque chose ???
Bibi218 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 10h30   #6
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Je n'ai pas bien tout compris mais pourquoi ne pas faire un truc tout simple
Code :
1
2
3
For Each LeShape In ActiveDocument.InlineShapes 'ou shapes
        If LeShape.Type = 5 Then i = i + 1
Next
Juste pour le principe
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h22.


 
 
 
 
Partenaires

Hébergement Web