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 03/11/2011, 10h19   #1
Candidat au titre de Membre du Club
 
Steve
Inscription : avril 2009
Messages : 23
Détails du profil
Informations personnelles :
Nom : Steve
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : avril 2009
Messages : 23
Points : 11
Points : 11
Par défaut Problème avec ApplyListTemplate

Hello,

Je cherche à appliquer à un paragraphe un template de liste extrait d'un style. Pour cela, j'utilise le code suivant :

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
Public Function ImportWithStyle(srcPar As Paragraph, newDoc As Document, styleName As String) As Paragraph
    Dim newPar As Paragraph
    Dim r As Range
    Dim styleToApply As style
    Set styleToApply = newDoc.Styles(styleName) ' find the style to apply. The style must exists
 
    ' get the end of the document range
    Set r = newDoc.Content
    r.Collapse direction:=WdCollapseDirection.wdCollapseEnd
 
    ' inject the formatted text from the source paragraph
    r.FormattedText = srcPar.Range.FormattedText
 
    ' apply list template from the target style.
    If Not styleToApply.ListTemplate Is Nothing Then
		r.ListFormat.ApplyListTemplate styleToApply.ListTemplate
    End If
 
    ' apply yhe style
    r.style = styleToApply
    Set newPar = newDoc.Paragraphs(newDoc.Paragraphs.Count - 1) 
 
    ' returns the newly created paragraph
    Set ImportWithStyle = newPar
End Function
Mon problème est assez étrange et apparait dans le bloc

Code :
1
2
3
   If Not styleToApply.ListTemplate Is Nothing Then
		r.ListFormat.ApplyListTemplate styleToApply.ListTemplate
    End If
Avant le passage dans ce bloc, styleToApply.ListTemplate vaut quelque chose, mais dès qu'on appelle ApplyListTemplate, styleToApply.ListTemplate devint nothing.

Pourquoi appliquer un modèle de liste à un paragraphe altérerait le style ???

Soit j'ai pas compris comment ça s'utilise, soit il y'a un soucis. Un peu d'aide serait la bienvenue !
steveb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 08h40   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 333
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 333
Points : 29 239
Points : 29 239
Salut,

Hors contexte, j'ai peine à comprendre à quoi sert ton code.
__________________
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 04/11/2011, 10h33   #3
Candidat au titre de Membre du Club
 
Steve
Inscription : avril 2009
Messages : 23
Détails du profil
Informations personnelles :
Nom : Steve
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : avril 2009
Messages : 23
Points : 11
Points : 11
Je comprend que c'est difficile à saisir sans le contexte, mais c'est également difficile à expliquer


Mon problème est qu'appliquer un style avec définition de liste ne "transforme" pas mon "1. " en dur dans le texte en "1. " d'une numération de liste.


Toutefois, j'ai fini par trouver une solution, un peu crade mais bon ... elle foncitonne :

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Public Function ImportWithStyle( _
    srcPar As Paragraph, _
    newDoc As Document, _
    styleName As String, _
    Optional applyBullet As Boolean = False, _
    Optional applyOutline As Boolean = False, _
    Optional applyRoman As Boolean = False, _
    Optional applyAlpha As Boolean = False, _
    Optional applyNumbered As Boolean = False
    ) As Paragraph
    Dim newPar As Paragraph
    Dim r As Range
    Dim styleToApply As style
    Set styleToApply = newDoc.Styles(styleName) ' find the style to apply. The style must exists
 
    ' get the end of the document range
    Set r = newDoc.Content
    r.Collapse direction:=WdCollapseDirection.wdCollapseEnd
 
    ' inject the formatted text from the source paragraph
    r.FormattedText = srcPar.Range.FormattedText
 
 
    ' apply list template from the target style.
 
    If applyBullet Then
        r.ListFormat.ApplyBulletDefault
    ElseIf applyNumbered Or applyRoman Or applyAlpha Then  ' Roman is a kind of numbering
        r.ListFormat.ApplyNumberDefault
    ElseIf applyOutline Then
        r.ListFormat.ApplyOutlineNumberDefault
    End If
 
 
    ' apply yhe style
    r.style = styleToApply
    Set newPar = newDoc.Paragraphs(newDoc.Paragraphs.Count - 1)
 
 
    ' returns the newly created paragraph
    Set ImportWithStyle = newPar
End Function
Le seul inconvénient, c'est que je dois, dans ma méthode appelante, savoir quel type de liste est définie dans mon style (pas trouvé le moyen de le faire de manière automatique).
steveb 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 13h01.


 
 
 
 
Partenaires

Hébergement Web