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 :

sélections automatiques d'objets dans Word


Sujet :

VBA Word

  1. #1
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut sélections automatiques d'objets dans Word
    Bonjour,

    Après avoir parcouru les ressources et testé quelques solutions, je fais appel à vos lumières.
    Pour un projet de recherche en linguistique, je cherche à supprimer automatiquement par une macro tous les tableaux d'un document Word, pour les rempalcer par une châine de type <TABLE>.
    Idem pour les images (<PICTURE>) et les zones de textes créées grâce à la barre d'outils Dessin (<TEXTZONE>).
    Le but est de pouvoir faire ça grâce à un petit bout de code en VBA, qui sera ensuite inséré dans une macro que j'ai déjà permettant d'appliquer le même traitement sur tous les documents d'un répertoire (code dispo sur simple demande).
    J'ai trouvé sur ce forum le code suivant, que j'ai adapté :
    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
    ===début===
    Sub select_table()
    On Error Resume Next
    For i = 1 To ActiveDocument.Tables.Count
    ActiveDocument.Tables(i).Select
    Selection.Tables(1).Delete
        Selection.TypeText Text:="<TABLE>"
    If Err <> 0 Then
    MsgBox "No table found"
    Exit For
    End If
    With ActiveDocument.Bookmarks
    .Add Range:=Selection.Range, Name:="MyTable" & CStr(i)
    End With
    Next
    End Sub
    ===fin===
    Mais il ne traite qu'un tableau sur deux -tous les tableaux impairs.
    Quelqu'un a-t-il(elle) une idée?

    Merci à tous de vos lumières.
    ant.

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub delTable()
    Dim tbl As Table
     
    For Each tbl In ActiveDocument.Tables
        tbl.Select
        tbl.Delete
        Selection.TypeText "<table>"
        Selection.TypeParagraph
    Next tbl
     
    End Sub
    Voilà un code un peu plus court.
    Je pense que dans ton code, le problème vient de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.Tables(1).Delete
    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 !

  3. #3
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    >> Voilà un code un peu plus court.

    Super! Merci beaucoup, ça marche en effet beaucoup mieux.
    Et pour les graphiques, illustrations etc, y aurait-il une commande adéquate ? J'ai essayé (naïvement?) de remplacer Table par Graphic, mais visiblement c'est pas ça.

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Essaie dans l'aide de voir du coté de "Shapes"
    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 !

  5. #5
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Je viens de trouver, c'est ^g qui permet de repérer les graphiques, et dans le même ordre d'idée ^f pour les notes de bas de page.
    Je publierai le code ici dès que j'aurais quelque chose de propre.

    Merci encore!
    ant.

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    ça marche aussi !!
    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 !

  7. #7
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bon, voici où j'en suis. Un puriste dira certainement qu'on peut optimiser, mais je ne suis pas puriste ;-) et j'obtiens le résultat attendu.
    Les différents process sont indiquées en remarque dans le code.

    Merci de votre aide!

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    Sub save_UTF8()
      a$ = Dir$("C:\test_macro\*.doc")
    While a$ <> ""
         ChangeFileOpenDirectory "C:\test_macro\"
      Documents.Open filename:=a$, ConfirmConversions:=False, _
          ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
          PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
          WritePasswordTemplate:="", Format:=wdOpenFormatAuto, XMLTransform:=""
       'accept all changes
       Selection.WholeStory
       WordBasic.AcceptAllChangesInDoc
       'delete headers and footers
       ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
       Selection.WholeStory
       Selection.Delete Unit:=wdCharacter, Count:=1
       ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
       Selection.WholeStory
       Selection.Delete Unit:=wdCharacter, Count:=1
       ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
      'replace tables by string <TABLE>
       Dim tbl As Table
       For Each tbl In ActiveDocument.Tables
       tbl.Select
       tbl.Delete
       Selection.TypeText "<!Table!>"
       Selection.TypeParagraph
       Next tbl
       ActiveDocument.Repaginate
      'detele footnotes
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "^f"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
        'detele endnotes
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "^e"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
        'detele graphics
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "^g"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
      'delete table of contents
        On Error Resume Next
        WordBasic.GotoTableOfContents
        Selection.Delete Unit:=wdCharacter, Count:=1
      'convert text box to frame
      For Each s In ActiveDocument.Shapes
        With s.TextFrame
             If .HasText Then s.ConvertToFrame
        End With
      Next
      'write down the output
       ChangeFileOpenDirectory "C:\test_macro\export\"
       ActiveDocument.SaveAs filename:=a$, FileFormat:=wdFormatText _
          , LockComments:=False, Password:="", AddToRecentFiles:=False, _
          WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
           SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
          False, Encoding:=65001, InsertLineBreaks:=False, AllowSubstitutions:=True _
          , LineEnding:=wdCRLF
       ActiveWindow.Close
            a$ = Dir$
    Wend
    End Sub

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/06/2013, 11h34
  2. Instanciation automatique des objets dans les formulaires
    Par vincent7894 dans le forum Spring Web
    Réponses: 2
    Dernier message: 21/02/2012, 09h58
  3. Réponses: 0
    Dernier message: 16/11/2010, 13h32
  4. Défilement automatique de texte dans Word
    Par JULIET dans le forum Word
    Réponses: 1
    Dernier message: 11/06/2010, 09h48
  5. PB insertion automatique Heure GMT dans Word
    Par tonykristof dans le forum VBA Word
    Réponses: 1
    Dernier message: 15/03/2009, 10h20

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