OVH Cloud OVH Cloud

Erreur avec méthode ParagraphFormat dans Excel

10 réponses
Avatar
Alex St-Pierre
Bonjour!
Dans les lignes suivantes, mon programme plante et je n'ai aucune idée
pourquoi. Peut-être que la méthode 'paragraphFromat' doit exister a la fois
dans Word et Excel? Est-ce que quelqu'un a une idée?
Merci!
Alex
erreur lorsque je veux mettre le tableau solidaire.
La méthode 'KeepWithNext' de l'objet ParagraphFormat a échoué
tbl.Range.ParagraphFormat.KeepTogether = True 'bug
tbl.Range.ParagraphFormat.KeepWithNext = True 'bug
erreur..
La méthode 'alignment' de l'objet ParagraphFormat a échoué
docWord.Sections(2).Headers(1).Range.ParagraphFormat.Alignment =
wdAlignParagraphRight

--
Alex St-Pierre

10 réponses

Avatar
Anacoluthe
Bonjour !

'Alex St-Pierre' nous a écrit ...
tbl.Range.ParagraphFormat.KeepTogether = True 'bug
tbl.Range.ParagraphFormat.KeepWithNext = True 'bug


Si tbl est un objet Word aligné sur le texte c'est bon :-)
Si tbl est un objet Excel ça ne veut rien dire :-(

Anacoluthe
« Les erreurs sont les portes de la découverte. »
- James JOYCE

Avatar
Alex St-Pierre
tbl est un tableau word.
Set tbl = docWord.Tables(1).
Je sais pourquoi ca plante..

Quand j'applique un header style, ce matin, le texte n'était plus aligné a
droite. Donc, j'ai ajouté ceci comme sécurité:
docWord.Sections(2).Headers(1).Range.Select
docWord.Sections(2).Headers(1).Range.ParagraphFormat.Alignment =
wdAlignParagraphRight 'Cette ligne plante de temps en temps??
On Error Resume Next
docWord.ActiveWindow.ActivePane.Close
On Error GoTo 0
--
Alex St-Pierre


"Anacoluthe" wrote:

Bonjour !

'Alex St-Pierre' nous a écrit ...
tbl.Range.ParagraphFormat.KeepTogether = True 'bug
tbl.Range.ParagraphFormat.KeepWithNext = True 'bug


Si tbl est un objet Word aligné sur le texte c'est bon :-)
Si tbl est un objet Excel ça ne veut rien dire :-(

Anacoluthe
« Les erreurs sont les portes de la découverte. »
- James JOYCE




Avatar
Jean-Guy Marcil
Alex St-Pierre was telling us:
Alex St-Pierre nous racontait que :

tbl est un tableau word.
Set tbl = docWord.Tables(1).
Je sais pourquoi ca plante..

Quand j'applique un header style, ce matin, le texte n'était plus
aligné a droite. Donc, j'ai ajouté ceci comme sécurité:
docWord.Sections(2).Headers(1).Range.Select
docWord.Sections(2).Headers(1).Range.ParagraphFormat.Alignment > wdAlignParagraphRight 'Cette ligne plante de temps en temps??
On Error Resume Next
docWord.ActiveWindow.ActivePane.Close
On Error GoTo 0



Pourquoi sélectionner le Header quand ce n'est pas nécessaire?
Tout ton code peut être remplacé par:

docWord.Sections(2).Headers(1).Range.ParagraphFormat.Alignment =
wdAlignParagraphRight

--

Salut!
_______________________________________
Jean-Guy Marcil - Word MVP

Word MVP site: http://www.word.mvps.org

Avatar
Alex St-Pierre
Merci bcp!
Mon style est définit comme:
Set NewStyle = MyDocWord.Styles.Add("MS_Header")
NewStyle.BaseStyle = "MS_Footer"
NewStyle.ParagraphFormat.Alignment = wdAlignParagraphRight

Quand j'applique mon style sur mon paragraphe, 2 fois, ça m'est arrivé que
l'entête est resté aligné à gauche. C'est pour cela que je veux ajouter une
ligne après:
Set oRange = docWord.Sections(2).Headers(1).Range
Call InsertAfter("Page i") 'oRange.InsertAfter ..
Call ParagraphStyle("MS_Header") 'oRange.ParagraphStyle = ...
docWord.Sections(2).Headers(1).Range.ParagraphFormat.Alignment =
wdAlignParagraphRight 'Ajout au cas ou..
ça me semble inutile mais je veux juste m'assurer que l'entête s'aligne à
droite en tout temps.
Merci!
de même pour section 3 (est-ce que ça peut être en ajoutant le numéro de
page que l'alignement s'est perdu?):
Set oRange = docWord.Sections(3).Headers(1).Range
oRange.Fields.Add Range:=oRange, Type:=wdFieldPage
Call InsertBefore("Page ")
Call ParagraphStyle("MS_Header")
docWord.Sections(2).Headers(1).Range.ParagraphFormat.Alignment =
wdAlignParagraphRight
--
Alex St-Pierre


"Jean-Guy Marcil" wrote:

Alex St-Pierre was telling us:
Alex St-Pierre nous racontait que :

tbl est un tableau word.
Set tbl = docWord.Tables(1).
Je sais pourquoi ca plante..

Quand j'applique un header style, ce matin, le texte n'était plus
aligné a droite. Donc, j'ai ajouté ceci comme sécurité:
docWord.Sections(2).Headers(1).Range.Select
docWord.Sections(2).Headers(1).Range.ParagraphFormat.Alignment > > wdAlignParagraphRight 'Cette ligne plante de temps en temps??
On Error Resume Next
docWord.ActiveWindow.ActivePane.Close
On Error GoTo 0



Pourquoi sélectionner le Header quand ce n'est pas nécessaire?
Tout ton code peut être remplacé par:

docWord.Sections(2).Headers(1).Range.ParagraphFormat.Alignment =
wdAlignParagraphRight

--

Salut!
_______________________________________
Jean-Guy Marcil - Word MVP

Word MVP site: http://www.word.mvps.org






Avatar
Anacoluthe
Bonjour !

'Alex St-Pierre' nous a écrit ...
NewStyle.ParagraphFormat.Alignment = wdAlignParagraphRight
Quand j'applique mon style sur mon paragraphe, 2 fois, ça m'est arrivé que
l'entête est resté aligné à gauche.


Votre titre de ficelle de discussion parle de /Excel/
Je suppose que votre code tourne dans Excel et pilote Word en Automation
Si wdAlignParagraphRight n'est pas référencé
et que vous n'êtes pas en option Explicit (déconseillé en Automation)
VBA va prendre wdAlignParagraphRight pour une nouvelle variable
et va lui donner la valeur zéro
ce qui est justement la valeur de wdAlignParagraphLEFT !
donc votre paragraphe sera aligné à gauche et non à droite

Je dis ça comme ça... au hasard ... on en sait si peu de votre code

Anacoluthe
« Les erreurs sont les portes de la découverte. »
- James JOYCE

Avatar
Alex St-Pierre
Merci Anacoluthe!!!
Je crois que tu as trouvé le problème. Je roule toujours en Option Explicit
dans tous les modules mais NewStyle.ParagraphFormat.Alignment =
wdAlignParagraphRight n'est pas référencé. Est-ce que tu sais comment je peux
référencer wdAlignParagrahRight ?
Merci!
Alex
Dans le même module de style, je référence avec appWord, sinon, ça plante
avec le même message d'erreur 'ParagraphFormat' exemple:
NewStyle.ParagraphFormat.LeftIndent = appWord.InchesToPoints(0.25)
--
Alex St-Pierre


"Anacoluthe" wrote:

Bonjour !

'Alex St-Pierre' nous a écrit ...
NewStyle.ParagraphFormat.Alignment = wdAlignParagraphRight
Quand j'applique mon style sur mon paragraphe, 2 fois, ça m'est arrivé que
l'entête est resté aligné à gauche.


Votre titre de ficelle de discussion parle de /Excel/
Je suppose que votre code tourne dans Excel et pilote Word en Automation
Si wdAlignParagraphRight n'est pas référencé
et que vous n'êtes pas en option Explicit (déconseillé en Automation)
VBA va prendre wdAlignParagraphRight pour une nouvelle variable
et va lui donner la valeur zéro
ce qui est justement la valeur de wdAlignParagraphLEFT !
donc votre paragraphe sera aligné à gauche et non à droite

Je dis ça comme ça... au hasard ... on en sait si peu de votre code

Anacoluthe
« Les erreurs sont les portes de la découverte. »
- James JOYCE




Avatar
Alex St-Pierre
J'ai aussi un message d'erreur "élément hors limite" avec la ligne B) de
temps en temps et je ne comprends pas pourquoi, est-ce que c'est parce que le
tableau est trop long et que ça tombe sur une 2e page. Le pire, j'ai insérer
un saut de page sur le tableau et après, j'ai remis le curseur jaune a la
ligne A) et tout fonctionne!! Je me demande s'il y moyen d'améliorer la
référence à wdLineWidth025pt?
Merci!
Alex
tbl.Cell(i, j).Borders(wdBorderBottom).LineStyle = wdLineStyleSingle 'A)
If .Weight = xlThin Then
tbl.Cell(i, j).Borders(wdBorderBottom).LineWidth = wdLineWidth025pt 'B)
ElseIf .Weight = xlMedium Then
tbl.Cell(i, j).Borders(wdBorderBottom).LineWidth = wdLineWidth150pt
End If
--
Alex St-Pierre


"Anacoluthe" wrote:

Bonjour !

'Alex St-Pierre' nous a écrit ...
NewStyle.ParagraphFormat.Alignment = wdAlignParagraphRight
Quand j'applique mon style sur mon paragraphe, 2 fois, ça m'est arrivé que
l'entête est resté aligné à gauche.


Votre titre de ficelle de discussion parle de /Excel/
Je suppose que votre code tourne dans Excel et pilote Word en Automation
Si wdAlignParagraphRight n'est pas référencé
et que vous n'êtes pas en option Explicit (déconseillé en Automation)
VBA va prendre wdAlignParagraphRight pour une nouvelle variable
et va lui donner la valeur zéro
ce qui est justement la valeur de wdAlignParagraphLEFT !
donc votre paragraphe sera aligné à gauche et non à droite

Je dis ça comme ça... au hasard ... on en sait si peu de votre code

Anacoluthe
« Les erreurs sont les portes de la découverte. »
- James JOYCE




Avatar
Geo

Merci Anacoluthe!!!
Je crois que tu as trouvé le problème. Je roule toujours en Option Explicit
dans tous les modules mais NewStyle.ParagraphFormat.Alignment =
wdAlignParagraphRight n'est pas référencé. Est-ce que tu sais comment je peux
référencer wdAlignParagrahRight ?


Avez-vous essayez
Outils / références / microsoft Word xx Object Library ?

--
A+

Avatar
Geo

J'ai aussi un message d'erreur "élément hors limite" avec la ligne B) de
temps en temps et je ne comprends pas pourquoi, est-ce que c'est parce que le
tableau est trop long et que ça tombe sur une 2e page.



en théorie non, mais c'est une hypothèse intéressante à vérifier.
Quand votre programme fait cette erreur cliquez sur débogage, ce qui
interrompt l'exécution et regardez ce qu'il y a dans i et j.

Je me demande s'il y moyen d'améliorer la
référence à wdLineWidth025pt?


Vous pouvez toujours remplacer une constante énumérée par sa valeur, il
suffit de regarder dans l'explorateur d'objets:
Const wdLineWidth025pt = 2

Mais : ça rend le code moins lisible et MS dit que ça les constantes
peuvent changer de valeur. On l'a effectivement vu avec Visual Studio
2005, mais amha dans VBA il y a peu de chances et vous serez peut-être
déjà à la retraite ce jour-là.



--
A+

Avatar
Alex St-Pierre
Merci!
J'ai aussi un message d'erreur "élément hors limite" avec la ligne B) de
temps en temps et je ne comprends pas pourquoi, est-ce que c'est parce que
tableau est trop long et que ça tombe sur une 2e page.
en théorie non, mais c'est une hypothèse intéressante à vérifier.

Quand votre programme fait cette erreur cliquez sur débogage, ce qui
interrompt l'exécution et regardez ce qu'il y a dans i et j.
J'ai regardé et à chaque fois que ça plante, le tableau coupe à i = 32 et ça

plante à i = 35. C'est toujours au début du tableau de la 2e page. Le tableau
contient des cellules fusionnés. J'ai 4 tableaux du même style et c'est le
seul qui plante. C'est un problème vraiment intermitent mais qui survient
toujours avec le dernier tableau du document. Probablement qu'un saut de page
avant le tableau améliorera un peu mais je comprends pas le problème. Quand
il y a des fusions de cellules dans Word, certains fois, il y a des éléments
de 'ParagraphFormat' qui prennnent des valeurs du style 99999999. Dans ce
temps là, je ne peux modifier la valeur.

Je me demande s'il y moyen d'améliorer la
référence à wdLineWidth025pt?
Vous pouvez toujours remplacer une constante énumérée par sa valeur, il

suffit de regarder dans l'explorateur d'objets:
Const wdLineWidth025pt = 2
S'il y a des chances que le programme fonctionne mieux en utilisant les

constantes (aucun risque de bug), je vais utiliser cet approche et voir si ça
règle certains problèmes.

Si wdAlignParagraphRight n'est pas référencé
et que vous n'êtes pas en option Explicit (déconseillé en Automation)
VBA va prendre wdAlignParagraphRight pour une nouvelle variable
et va lui donner la valeur zéro
ce qui est justement la valeur de wdAlignParagraphLEFT !
Si je suis en Option Explicit, est-ce que ça vaut la peine de référencer les

variables avec Const wdAlignParagraphRight = ...

Merci!
Alex
--
Alex St-Pierre


"Geo" wrote:


J'ai aussi un message d'erreur "élément hors limite" avec la ligne B) de
temps en temps et je ne comprends pas pourquoi, est-ce que c'est parce que le
tableau est trop long et que ça tombe sur une 2e page.



en théorie non, mais c'est une hypothèse intéressante à vérifier.
Quand votre programme fait cette erreur cliquez sur débogage, ce qui
interrompt l'exécution et regardez ce qu'il y a dans i et j.

Je me demande s'il y moyen d'améliorer la
référence à wdLineWidth025pt?


Vous pouvez toujours remplacer une constante énumérée par sa valeur, il
suffit de regarder dans l'explorateur d'objets:
Const wdLineWidth025pt = 2

Mais : ça rend le code moins lisible et MS dit que ça les constantes
peuvent changer de valeur. On l'a effectivement vu avec Visual Studio
2005, mais amha dans VBA il y a peu de chances et vous serez peut-être
déjà à la retraite ce jour-là.



--
A+