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 :

gérer les objets word via le langage VBA


Sujet :

VBA Word

  1. #1
    Membre du Club Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Points : 67
    Points
    67
    Par défaut gérer les objets word via le langage VBA
    Bonjour,
    je suis débutante en Visual Basic 6 , et si vous pouvez m'aider à m'expliquer comment peut-on manipuler par le langage VBA les objets Word et voici les 2 points que je veux les biens comprendre :

    *---> Créer et utiliser des signets pour accéder à des emplacements précis d'un document

    *---> Créer, sélectionner, modifier la structure et saisir des données dans des tableaux Word

    Vraiment j'ai besoin de les bien assimillé . Merci d'avance ...

  2. #2
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    bonjour,

    En faisant des recherches sur le forum, tu devrais trouver de quoi faire, je te donnes 2 pistes déjà.

    http://vb.developpez.com/sources/?page=word#wordprj

    http://vb.developpez.com/faqvba/?page=3.7#WcellEmpty

    Il y pas mal de choses sur les tableaux word ici....

    cordialement,

    Didier

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Je n'ai jamais fait du VB6, mais normalement, c'est pareil que pour le VBA.
    Pour atteindre un signet dans un document,c'est relativement simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveDocument.BookMarks("MonSignet").range.text
    Pour les tableaux, c'est pas plus complexe.
    On atteint un tables par son index, on ne peut donner de nom à un tableau en Word.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveDocument.Tables(1).Select
    Mais une solution pour se simplifier la vie est de déclarer un objet table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim oTbl as Table
    Set oTbl = ActiveDocument.Tables(1)
    Pour ensuite accéder au contenu de la table, on peut le faire avec les lignes ou les colonnes.
    Et pour les cellules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oTbl.Cell(1,1).range.Text
    On peut ajouter des lignes ou des colonnes à une table.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    Pour les signets il peut être pratique d'utiliser le for each sur la collection comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim bm as bookmark
    For each bm in activedocument.bookmarks
      msgbox bm.name
    next
    Tu peux facilement ajouter des signets aussi avec activedocument.bookmarks.add

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut Déplacement de la discussion sur le forum VB6 et antérieurs
    Bonjour sisiniya, bienvenue sur le forum.
    Citation Envoyé par sisiniya
    je suis débutante en Visual Basic 6
    Les solutions proposées sont des solutions VBA-Word. Tu ne peux utiliser "Activedocument" depuis VB6.
    Pour VB6, l'application et le document doivent être instanciés.

    Je place donc une copie de ta discussion sur le forum VB6 où tu auras plus de chances d'avoir une réponse "circonstanciée". Tu retrouveras ta question ici
    Bonne chance

  6. #6
    Membre du Club Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Points : 67
    Points
    67
    Par défaut VBA
    Bonjour,
    Merci pour votre acceuil " ouskel'n'or ", mais je veux le code en VBA et non pas en VB6 ( je l'ai signalé dans mon mesg en tt cas Merci ).

    il y a pas mal de code écrit par Monsieur "Heureux - oli" que je ne les a pas compris mais avant de les citer , j'aimerais bien reçevoir une réponse sur ma question suivante :

    quand je veux écrire un code en VBA word. quelle sont les étapes à suivre ??
    ce que je sais maintenant : ouvrir fichier word --> outil -->macro mais aprés macro je n'arrive pas différer entre ( macro , nouvel macro , visual basic editor )

    et Merci d'avance.

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Visual Basic Editor ou VBE est ue interface graphique qui va servir à écrire du code.

    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub AfficherMessage()
        MsgBox "Bonjour sisiniya !"
    End Sub
    En retournant dans Word, Outils -> Macro et dans la liste AfficherMessage.
    Tu peux aussi exécuter la macro au départ du VBE : il suffit d'être dans le code que l'on veut exécuter et appuyer sur F5.

    On avancera pas à pas si tel est ton souhait.

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Je complète juste ce que te dit Heureux-oli.
    L'éditeur vb (Visual Basic Editor) te permet de rédiger/modifier/ajouter/supprimer les macros.
    "Macro" te propose deux options :
    Macros -> Qui permet de sélectionner une macro existante et de l'exécuter
    Nouvelle macro -> Qui permet d'enregistrer une macro en exécutant une ou plusieurs actions manuelles dans ton document (format, copie, insertion, recherche... etc)
    Tu pourras alors retrouver ce code dans Visual Basic Editor et t'en inspirer pour écrire une macro regroupant plusieurs actions.

  9. #9
    Membre du Club Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Points : 67
    Points
    67
    Par défaut
    Bonjour ,
    A " Heureux-oli " et " ouskel'n'or " : Merci pr vos réponse , j'ai appris des new concepts .

    alors , je viens de chercher un document sur net pour apprendre le langage VBA . Si vous pourriez me donnez un petit code qui effectue une telle ou telle application word via VBA ça va m'aidez bcp pour comprendre les codes que
    " Heureux-oli " m'avez écrit , car je les ai essayé mais jé pas compri pa mal d mot code . en bien si vous pouvez me servir je serai heureuse sinon je serai comme même heureuse d'avoir reçu vos réponse des jours précédents .

    Merci et pardonnez moi si je pose bcp de question .

  10. #10
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Pour que nous puissions t'aider, nous aurions besoin de plus de précision sur ce que tu ne comprend pas.

    Si tu as essayé le bout de code que je t'ai donné, tu as eu une boîte de message avec une petit texte.


    On peut essayer autre chose. Toujours dans ce VBE, essaie ce morceau de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub AjouterDocument()
    ' Ajout d'une variable qui va contenir une référence à un document.
    Dim oDoc as Document
    ' Ajout d'un document qui sera affecté à oDoc
    ' pour ajouter un document, on fait appel à la 
    ' collection des documents, et on ajoute un élément.
    Set oDoc = Documents.Add
    ' Ajout d'une table dans le document
    ' la table va contenir 11 lignes et 11 colonnes
    oDoc.Tables.Add Range:=Selection.Range, NumRows:=11, NumColumns:=11
    End Sub
    Pour l'instant la table est vide, mais on peut y ajouter des choses, par exemple une table de multiplication.

    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
    Sub AjouterDocument()
    ' Ajout d'une variable qui va contenir une référence à un document.
    Dim oDoc as Document
    dim oTbl as Table
    Dim il as integer, ic as integer
    ' Ajout d'un document qui sera affecté à oDoc
    ' pour ajouter un document, on fait appel à la 
    ' collection des documents, et on ajoute un élément.
    Set oDoc = Documents.Add
    ' Ajout d'une table dans le document
    ' la table va contenir 11 lignes et 11 colonnes
    Set oTbl = oDoc.Tables.Add (Range:=Selection.Range, NumRows:=11, NumColumns:=11)
    ' on va remplir la table en multipliant des valeurs
    For il = 2 To 11
        For ic = 2 To 11
            oTbl.Cell(il, ic).Range.Text = (il - 1) * (ic - 1)
        Next ic
    Next il
    ' remet à 0 les valeurs pour les utiliser à nouveau
    ' pour mettre la table en forme
    ic = 0
    il = 0
    For ic = 2 To 11
        With oTbl.Cell(1, ic).Range
            .Text = (ic - 1)
            .Font.Bold = True
        End With
    Next ic
    For il = 2 To 11
        With oTbl.Cell(il, 1).Range
            .Text = "X " & (il - 1)
            .Font.Bold = True
        End With
    Next il
    With oTbl.Borders
        .InsideLineStyle = wdLineStyleDot
        .InsideLineWidth = wdLineWidth050pt
        .OutsideLineStyle = wdLineStyleSingle
        .OutsideLineWidth = wdLineWidth150pt
    End With
     
     
    End Sub

  11. #11
    Membre du Club Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Points : 67
    Points
    67
    Par défaut MY
    Bonjour,
    Merci pour les deux codes , je les ai exécuté ,(ça marche! ) et voici ce que j'ai pas compris :

    1)* Set oTbl = oDoc.Tables.Add (Range:=Selection.Range, NumRows:=11 ,NumColumns:=11)
    * oTbl.Cell(il, ic).Range.Text = (il - 1) * (ic - 1)

    ----> quel est le rôle de Range dans les dux lignes et le rôle de selection
    dans la
    1ére ligne ( car j'ai pas bien compris qu'est ce que ça veut dire
    Range / selection )

    2)* Que signifie la fonction with oTbl.Borders ...... End with

    3) *With oTbl.Borders
    .InsideLineStyle = wdLineStyleDot ' A quoi sert ces 4 lignes , je crois
    .InsideLineWidth = wdLineWidth050pt ' que se sont reservé pour la mise
    .OutsideLineStyle = wdLineStyleSingle ' en forme , mais je n'arrive pas
    .OutsideLineWidth = wdLineWidth150pt ' à préciser le sens de chacun
    End With

    ****** Merci une 2ém fois pour votre aide ... *********

  12. #12
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    L'objet Range permet de définir une plage de données qui peut se résumer à un simple point d'insertion. Le point d'insertion est matérialisé par le curseur dans l'interface graphique et pour utiliser l'endroit où se trouve le curseur, on fait appel à l'objet Selection.
    => Selection.Range correspond à l'endroit ou se trouve le curseur.

    Pour insérer des données dans un tableau en Word, il faut utiliser la plage de la cellule et on utilise également l'objet Range. Sans cet objet, on ne peut pas insérer des données.

    Pour les lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With oTbl.Borders
        .xxxxxx
    End With
    C'est une facilité,
    On aurais peu écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    oTbl.Borders.InsideLineStyle = wdLineStyleDot
    oTbl.Borders .InsideLineWidth = wdLineWidth050pt
    oTbl.Borders.OutsideLineStyle = wdLineStyleSingle
    oTbl.Borders .OutsideLineWidth = wdLineWidth150pt
    Mais ça devient beaucoup plus lourd.

  13. #13
    Membre du Club Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Points : 67
    Points
    67
    Par défaut
    Bonsoir ,
    tout est bien clair grâce à votre explications détaillé . je vous Remerci infiniment " Heureux-oli " pour votre Aide.

    1 ) Une plage ?? ça veut dire quoi !

    2 ) j'ai ajouter ce code à votre macro ( " ajouterdocument " ) que vous m'avez envoyé . il permet d'ajouter le mot " Name" à la 1ér colone de la 1ér ligne , le voilà :
    With oDoc.Tables.Item(1).Cell(1, 1).Range
    .Text = "Name"
    .ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight
    End With

    dans ce code :
    a)-->j'ai pas bien compris le rôle de Item(1) , car j'ai essayé avec Item(2) et il me donne " erreur" .

    b)--> de plus, j'ai comparé la premiér ligne de mon code et celle de la votre ( dans le tableau de multiplication ) :
    With oTbl.Cell(1, ic).Range
    .Text = (ic - 1)
    . Font.Bold = True
    End With
    et j'ai constaté que les deux codes font la même chose qui est " insertion d'1 texte dans une cellule bien définie " . alors, j'ai supprimé dans la 1ér ligne de mon code " tables.Item(1). " , mais quand j'ai exécuté le macro " ça ne marche pas " . je sais pas où est la différence entre ces deux codes malgrés ils ont le même fonctionnement !!

    *********Merci ... ***********

  14. #14
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Une plage est un morceau du document.
    La plage peut aller de la position du curseur à la totalité du document.

    est équivalent à En fait, si tu passes par une Item(2), tu reçois une erreur parce que il n'y a qu'une seule table dans le document.
    Si tu avais deux tables, il n'y aurait plus d'erreur.


    Dans mon code, la table que j'insère est la première du document et je ne fais pas appel à la tables(1), mais à oTbl qui est l'objet table que je viens d'insérer.

    Dans le code que j'ai posté,

    OTbl est équivalent à Tables(1).


    Que les deux codes fonctionnent, c'est normal. Tu verras que sur le site, toutes les personnes qui pourraient te donner du code pour une tache précise auront un code différent et une approche différente.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 03/02/2018, 15h51
  2. Réponses: 33
    Dernier message: 22/08/2011, 15h33
  3. gérer les objets word via le langage VBA
    Par sisiniya dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 15/03/2008, 00h40
  4. Gérer les objets en execution!!!
    Par momo31000 dans le forum Langage
    Réponses: 3
    Dernier message: 06/05/2006, 17h02

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