IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Document trop volumineux pour être enregistré [WD-2010]


Sujet :

VBA Word

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 40
    Points : 28
    Points
    28
    Par défaut Document trop volumineux pour être enregistré
    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:
    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
    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.
    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)
    Fichiers attachés Fichiers attachés

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 40
    Points : 28
    Points
    28
    Par défaut
    C'était bien la ligne Selection.Fields.Update qui faisait tout planter et je ne peux qu'en supputer les raisons.

    J'ai remplacé ca par une boucle qui update chaque champ du document, plutôt qu'un update global.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub MajPagination(Doc As Document)
    Dim field As Field
     
    '(...)
     
    For Each field In Doc.Fields
        field.Update
    Next
    Telles que je vois les choses, c'est moins violent pour le pc de chercher chaque champ et de le mettre à jour que de faire une maj globale. Je ne sais pas comment se débrouille word dans le second cas, mais il ne doit pas s'y prendre dans le même ordre.
    Vu le message d'erreur (doc trop volumineux), il devait y avoir un stack d'infos qui était plein et qui fragmentait les données ou en oubliait certaines, provoquant un crash des bookmarks.

    Maintenant les références ne se mettent plus à jour au lancement du fichier, ce qui n'est pas si grave vu que la macro de maj pagination ne fait plus tout crash et qu'on peut donc tout remettre d'un clic.

    Le sujet est clos du coup, mais si quelqu'un a une explication du phénomène, je prends.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. « Trop belle pour être développeuse »
    Par Hinault Romaric dans le forum Actualités
    Réponses: 60
    Dernier message: 10/08/2013, 22h51
  2. [AC-2003] Problème fonction Rechdom "Texte trop long pour être modifié"
    Par Ardiden31 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 21/05/2012, 14h28
  3. Entier trop gros pour être affiché
    Par nicolas.pecheux dans le forum Beamer
    Réponses: 0
    Dernier message: 28/07/2009, 07h32
  4. chaine trop longue pour être indexée
    Par ctobini dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 04/10/2007, 10h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo