Salutations,
J'expérimente actuellement un comportement imprévisible de Word 2010.
A l'utilisation de certaines macro, j'ai un message "document trop volumineux pour être enregistré". Toutefois, j'enregistre, aucun problèmes.
Parfois, en mettant plusieurs renvois à la suite et en faisant une mise à jour de la pagination, j'ai un crash. Word qui cesse de fonctionner, ou qui patine dans le vide pendant des heures.
Une fois que ca a commencé à déconner la récupération word se met en route et ca n'aide vraiment pas. Les bookmarks sautent ou bougent.
Le plus étrange, c'est que mon fichier ne dépasse pas les 400Ko. J'ai vérifié la ram, elle n'est pas non plus encombrée. Même ce message d'erreur est foireux.
Pour être un peu plus précis, cette fonction bug de temps à autres. (l'idée c'est d'écrire une ligne "reportez vous page machin", machin étant le numéro de la page sur laquelle est présent un bookmark.) C'est une fonction dans une feuille, basiquement c'est un champ où on rentre du texte et un bouton valider. Impossible de dire si cette fonction se met à bugger quand le fichier est déjà corrompu ou si c'est cette défaillance qui corrompt le fichier.
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
27
28
29
30
31
32
33
34
35
36
37
38 Private Sub CommandButton1_Click() Dim r$ Dim isFigTab As Boolean Hide r$ = val(Renvoi.Value) isFigTab = False If r$ < 1 Or r$ > 99 Then MsgBox "Il faut saisir un N° de renvoi valide entre 1 et 99" Exit Sub End If If WordBasic.val(r$) < 10 Then r$ = "0" + WordBasic.[Right$](Str(WordBasic.val(r$)), 1) Else r$ = WordBasic.[Right$](Str(WordBasic.val(r$)), 2) End If Select Case Tag Case 0 ' Renvoi au RE If Not CurrentDoc.Bookmarks.Exists("R" + r$) Then MsgBox "Le N° de renvoi " & Renvoi.Value & " n'existe pas" Exit Sub End If Selection.Style = CurrentDoc.Styles("_PNM_Renvoi_RE") Selection.TypeText ("Renseigner le rapport d'expertise " + Chr(9) + Chr(9)) Selection.TypeText ("N° " + r$ + " ") Case 1 ' (...) End Select Selection.TypeText ("page ") ImpressionRenvoiRenvoiRE r$, isFigTab 'WordBasic.HLine -1 End Sub
Là, la fonction qui add les dits bookmarks.
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
27
28
29
30
31
32
33
34 Public Function CreerNouveauRepereRE(rep, Optional titreRenvoi) Dim Erreur Dim r$ Dim c Dim a Dim aField On Error GoTo 0 r$ = GetRenvoi(rep) If r$ = -1 Then GoTo ee WordBasic.FormatStyle Name:="G_titre-re;RT" WordBasic.ViewFieldCodes 1 WordBasic.InsertField Field:="Set R" + r$ + " " + Chr(34) + r$ + Chr(34) WordBasic.CharLeft WordBasic.UpdateFields WordBasic.WordRight WordBasic.InsertField Field:="R" + r$ WordBasic.CharLeft WordBasic.UpdateFields WordBasic.CharRight Erreur = 0 WordBasic.Insert Chr(9) WordBasic.Insert titreRenvoi CreerNouveauRepereRE = r$ GoTo Suite ee: Erreur = -1 Suite: WordBasic.ViewFieldCodes 0 Fin: WordBasic.HLine -1 End Function
Quand j'ai ajouté un trop grand nombre de renvois, ma fonction qui met à jour les numéros de pages se met à déconner également. Elle tourne non stop, word freeze et ne réagit plus.
Ce sont les lignes là qui déconnent:
Ma question est la suivante: Qu'est ce qui peut entrainer des plantages non déterminés ? La même action n'entrainera pas un plantage systématique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Application.ScreenUpdating = True System.Cursor = wdCursorNormal ActiveDocument.Repaginate ActiveDocument.Range.Select Selection.Fields.Update <==== ca bloque à partir d'ici visiblement
Recréer ce bug est vraiment difficile, en y allant pas-à-pas, il n'y a quasiment jamais de plantages. Ce dont je suis certain, c'est que le Selection.Fields.Update fait un update sur le select qui porte sur l'ensemble du document. C'est certainement à ce niveau là que les erreurs random apparaissent.
Ce n'est qu'en utilisant à plusieurs reprises ma macro pour mettre à jour la pagination que j'obtiens le message "Document trop volumineux pour être enregistré. Supprimez du texte avant d'enregistrer". Et il faut qu'il y ait suffisamment de renvoies crées par la fonction ci-dessus. Comme si l'accumulation de maj remplissait un cache et qu'au bout d'un moment, le fichier plante car le cache est plein et que ce dernier ne se vide pas entre deux opérations.
Je joins au post un exemple de fichier qui est sur le point de déconner. (menu assistant => formalisation => Renvoie au RE pour faire les renvois, et menu assistant => Maj. Pagination pour la macro qui met à jour les numéros de pages un peu partout)
Partager