begin process at 2012 02 11 23:20:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBA

 > PILOTER WORD PAR OLE AVEC ACCESS OU VB

PILOTER WORD PAR OLE AVEC ACCESS OU VB


 Information sur la source

Note :
7,97 / 10 - par 70 personnes
7,97 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :VBA Classé sous :ole, word, office, piloter Niveau :Expert Date de création :01/09/2000 Date de mise à jour :06/08/2001 00:00:00 Vu :77 971

Auteur : Jacques PRESTREAU

Ecrire un message privé
Commentaire sur cette source (49)
Ajouter un commentaire et/ou une note

 Description

Ces routines offrent une palette assez complète des choses qu'on peut demander à Word.

Vous copiez l'intégralité de ce code et vous le collez dans un de vos modules persos réutilisables à volonté.
Si vous ne savez pas faire, vous le mettez directement dans votre application...

Vous avez un exemple concret de dialogue avec Word avec la procédure Word_test() qui se trouve à la fin de ces routines.

J'améliore ce code en permanence. N'hésitez pas à me faire vos remarques.

jprestreau@groupemalakoff.com

Source

  • '© Jacques PRESTREAU, 1999, 2000, 2001
  • 'Pour utiliser ces procédures et ces fonctions de dialogue avec Word,
  • ' il faut au préalable :
  • ' 1. Entrer dans un quelconque code Visual Basic de votre application
  • ' (celui d'un formulaire ou dans n'importe lequel de vos modules)
  • ' Si vous utilisez Access
  • ' 2. Exécuter le menu Outils/Références...
  • ' Si vous utilisez VB
  • ' 2. Exécuter le menu Projet/Références...
  • ' Que vous utilisiez Acces ou VB
  • ' 3. Dans la fenêtre qui apparaît, vérifiez que vous avez une référence sur
  • ' Microsoft Word X.y Object Library
  • ' Cochez la case si elle ne l'est pas
  • ' 4. Fermer les fenêtres avec Ok
  • ' Si vous utilisez VB
  • ' 5. Remplacez par "Dim" les mot-clés "Public" des constantes de couleur
  • ' 6. C'est tout
  • 'Une fois que c'est fait, les routines ci-dessous font partie intégrante
  • ' de votre langage Visual Basic
  • 'Vous avez un exemple de dialogue avec Word avec la procédure Word_test()
  • ' qui se trouve à la fin de ce fichier
  • ' Exécutez-le avec la touche F8 pour la démo
  • 'J'améliore ce code en permanence. N'hésitez pas à me faire vos remarques.
  • ' jprestreau@groupemalakoff.com
  • Option Explicit
  • Public Const Clr_auto As Byte = 0
  • Public Const Clr_Noir As Byte = 1
  • Public Const Clr_Bleu As Byte = 2
  • Public Const Clr_Turquoise As Byte = 3
  • Public Const Clr_VertClair As Byte = 4
  • Public Const Clr_Rose As Byte = 5
  • Public Const Clr_Rouge As Byte = 6
  • Public Const Clr_Jaune As Byte = 7
  • Public Const Clr_Blanc As Byte = 8
  • Public Const Clr_BleuFoncé As Byte = 9
  • Public Const Clr_Cyan As Byte = 10
  • Public Const Clr_Vert As Byte = 11
  • Public Const Clr_Violet As Byte = 12
  • Public Const Clr_RougeFoncé As Byte = 13
  • Public Const Clr_JauneFoncé As Byte = 14
  • Public Const Clr_GrisFoncé As Byte = 15
  • Public Const Clr_GrisClair As Byte = 16
  • Public Word_Application As Word.Application
  • Public Sub Word_A_La_Ligne(Optional Nbre_de_lignes As Variant)
  • Dim I As Byte
  • If IsMissing(Nbre_de_lignes) Then Nbre_de_lignes = 1
  • For I = 1 To Nbre_de_lignes
  • Word_Application.Selection.TypeParagraph
  • Next I
  • End Sub
  • Sub Word_Activer_Entete()
  • With Word_Application
  • If .ActiveWindow.View.SplitSpecial <> wdPaneNone Then
  • .ActiveWindow.Panes(2).Close
  • End If
  • If .ActiveWindow.ActivePane.View.Type = wdNormalView _
  • Or .ActiveWindow.ActivePane.View.Type = wdOutlineView _
  • Or .ActiveWindow.ActivePane.View.Type = wdMasterView Then
  • .ActiveWindow.ActivePane.View.Type = wdPageView
  • End If
  • .ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
  • End With
  • End Sub
  • Sub Word_Activer_Corps_du_document()
  • With Word_Application
  • If .ActiveWindow.View.SplitSpecial <> wdPaneNone Then
  • .ActiveWindow.Panes(2).Close
  • End If
  • If .ActiveWindow.ActivePane.View.Type = wdNormalView _
  • Or .ActiveWindow.ActivePane.View.Type = wdOutlineView _
  • Or .ActiveWindow.ActivePane.View.Type = wdMasterView Then
  • .ActiveWindow.ActivePane.View.Type = wdPageView
  • End If
  • .ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
  • End With
  • End Sub
  • Sub Word_Activer_Pied_de_page()
  • With Word_Application
  • If .ActiveWindow.View.SplitSpecial <> wdPaneNone Then
  • .ActiveWindow.Panes(2).Close
  • End If
  • If .ActiveWindow.ActivePane.View.Type = wdNormalView _
  • Or .ActiveWindow.ActivePane.View.Type = wdOutlineView _
  • Or .ActiveWindow.ActivePane.View.Type = wdMasterView Then
  • .ActiveWindow.ActivePane.View.Type = wdPageView
  • End If
  • .ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
  • End With
  • End Sub
  • Sub Word_Aller_a_la_fin_de_la_ligne_courante()
  • Word_Application.Selection.EndKey Unit:=wdLine
  • End Sub
  • Sub Word_Aller_a_la_ligne_numéro(Optional Numéro_ligne As Variant)
  • Word_Application.Selection.GoTo What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=Numéro_ligne
  • End Sub
  • Sub Word_Aller_au_début_de_la_ligne_courante()
  • Word_Application.Selection.HomeKey Unit:=wdLine
  • End Sub
  • Public Sub Word_Atteindre_Signet(Optional Nom_signet As Variant)
  • If Not IsNull(Nom_signet) Then
  • Word_Application.Selection.GoTo What:=wdGoToBookmark, Name:=Nom_signet
  • End If
  • End Sub
  • Public Sub Word_Au_signet_Ecrire_texte(Nom_signet As String, Optional Texte As Variant)
  • Word_Atteindre_Signet (Nom_signet)
  • If Not IsNull(Texte) Then
  • Word_Ecrire_Texte (Texte)
  • End If
  • End Sub
  • Public Sub Word_Backspace()
  • Word_Application.Selection.TypeBackspace
  • End Sub
  • Public Sub Word_Bascule_Gras()
  • Word_Application.Selection.Font.Bold = wdToggle
  • End Sub
  • Public Sub Word_Bascule_Italique()
  • Word_Application.Selection.Font.Italic = wdToggle
  • End Sub
  • Function Word_Chercher_texte(Texte As Variant, Prompt_utilisateur As Boolean, Vers_le_bas As Boolean) As Boolean
  • With Word_Application
  • .Selection.Find.ClearFormatting
  • With .Selection.Find
  • .Text = Texte
  • .Replacement.Text = ""
  • .Forward = Vers_le_bas
  • .Wrap = wdFindContinue
  • .Format = False
  • .MatchCase = False
  • .MatchWholeWord = False
  • .MatchWildcards = False
  • .MatchSoundsLike = False
  • .MatchAllWordForms = False
  • If Not Prompt_utilisateur Then
  • Word_Chercher_texte = .Execute
  • End If
  • End With
  • End With
  • End Function
  • Function Word_Colonne_courante()
  • Word_Colonne_courante = Word_Application.Selection.Information(wdFirstCharacterColumnNumber)
  • End Function
  • Public Sub Word_Couleur_Texte(Couleur As Long)
  • 'Couleur peut prendre la valeur d'une des constantes Clr_xxx
  • Word_Application.Selection.Font.ColorIndex = Couleur
  • End Sub
  • Public Sub Word_Couper()
  • Word_Application.Selection.Cut
  • End Sub
  • Public Sub Word_Coller()
  • Word_Application.Selection.Paste
  • End Sub
  • Public Sub Word_Copier()
  • Word_Application.Selection.Copy
  • End Sub
  • Public Sub Word_Création_Lien_OLE()
  • On Error Resume Next ' Retarde la récupération d'erreur.
  • ' La fonction Getobject appelée sans le premier argument
  • ' renvoie une référence à une occurrence de l'application Word.
  • ' Si l'application n'est pas en exécution,
  • ' une erreur se produit et on utilise l'erreur.
  • ' Noter la virgule utilisée en tant que premier espace réservé d'argument.
  • Set Word_Application = GetObject(, "Word.Application")
  • If Err.Number <> 0 Then
  • Set Word_Application = CreateObject("Word.Application")
  • End If
  • Err.Clear ' Efface l'objet Err au cas où une erreur s'est produite.
  • End Sub
  • Public Sub Word_Début_document()
  • Word_Application.Selection.HomeKey Unit:=wdStory, Extend:=wdMove
  • End Sub
  • Public Sub Word_Delete()
  • Word_Application.Selection.Delete
  • End Sub
  • Public Sub Word_Déselectionner(Optional Curseur_a_la_fin As Boolean)
  • If Curseur_a_la_fin Then
  • Word_Application.Selection.Collapse wdCollapseEnd
  • Else
  • Word_Application.Selection.Collapse wdCollapseStart
  • End If
  • End Sub
  • Function Word_Dialogue_Imprimer() As Boolean
  • With Word_Application
  • .Visible = True
  • With Dialogs(wdDialogFilePrint)
  • If .Show = -1 Then
  • .Execute
  • End If
  • End With
  • End With
  • End Function
  • Function Word_Dialogue_Nouveau_Document() As Boolean
  • Word_Création_Lien_OLE
  • With Word_Application
  • .Visible = True
  • With Dialogs(wdDialogFileNew)
  • If .Show = -1 Then
  • .Execute
  • Word_Dialogue_Nouveau_Document = True
  • Else
  • Word_Dialogue_Nouveau_Document = False
  • End If
  • End With
  • End With
  • End Function
  • Function Word_Dialogue_Ouvrir_Document() As Boolean
  • Word_Création_Lien_OLE
  • With Word_Application
  • .Visible = True
  • With Dialogs(wdDialogFileOpen)
  • If .Show = -1 Then
  • .Execute
  • Word_Dialogue_Ouvrir_Document = True
  • Else
  • Word_Dialogue_Ouvrir_Document = False
  • End If
  • End With
  • End With
  • End Function
  • Public Sub Word_Ecrire_Paragraphe(Optional Texte As Variant, Optional Gras As Variant, Optional Italique As Variant, Optional Couleur As Variant, Optional Fonte As String, Optional Taille As Byte)
  • Word_Ecrire_Texte Texte, Gras, Italique, Couleur, Fonte, Taille
  • Word_A_La_Ligne
  • End Sub
  • Public Sub Word_Ecrire_Texte(Optional Texte As Variant, Optional Gras As Variant, Optional Italique As Variant, Optional Couleur As Variant, Optional Fonte As String, Optional Taille As Byte)
  • Dim old_Gras As Boolean
  • Dim old_Italique As Boolean
  • Dim old_Couleur As Long
  • Dim old_Fonte As String
  • Dim old_Taille As Byte
  • old_Gras = Word_Application.Selection.Font.Bold
  • If Not (IsMissing(Gras)) Then Word_Application.Selection.Font.Bold = Gras
  • old_Italique = Word_Application.Selection.Font.Italic
  • If Not (IsMissing(Italique)) Then Word_Application.Selection.Font.Italic = Italique
  • old_Couleur = Word_Application.Selection.Font.ColorIndex
  • If Not (IsMissing(Couleur)) Then Word_Application.Selection.Font.ColorIndex = Couleur
  • old_Fonte = Word_Application.Selection.Font.Name
  • If Fonte <> "" Then
  • Word_Application.Selection.Font.Name = Fonte
  • End If
  • old_Taille = Word_Application.Selection.Font.Size
  • If Taille > 0 Then
  • Word_Application.Selection.Font.Size = Taille
  • End If
  • If Not IsNull(Texte) Then
  • Word_Application.Selection.TypeText Text:=Texte
  • End If
  • Word_Application.Selection.Font.Bold = old_Gras
  • Word_Application.Selection.Font.Italic = old_Italique
  • Word_Application.Selection.Font.ColorIndex = old_Couleur
  • Word_Application.Selection.Font.Name = old_Fonte
  • Word_Application.Selection.Font.Size = old_Taille
  • End Sub
  • Public Sub Word_Enregistrer_document(Optional Nom_Document As Variant)
  • If IsNull(Nom_Document) Then
  • Word_Application.ActiveDocument.Save
  • Else
  • Word_Application.ActiveDocument.SaveAs Nom_Document
  • End If
  • End Sub
  • Public Sub Word_Enregistrer_document_sous(Optional Nom_Document As Variant)
  • If IsMissing(Nom_Document) Then
  • Dialogs(wdDialogFileSaveAs).Show
  • Else
  • Word_Application.ActiveDocument.SaveAs Nom_Document
  • End If
  • End Sub
  • Sub Word_Exécuter_Macro(Nom_Macro As String)
  • With Word_Application
  • .Run Nom_Macro
  • End With
  • End Sub
  • Public Sub Word_Fermer_Document(Optional Nom_Document As Variant)
  • Dim Doc
  • If IsMissing(Nom_Document) Then
  • Word_Application.ActiveDocument.Close
  • Else
  • For Each Doc In Word_Application.Documents
  • If Doc.Name = Nom_Document Then Doc.Close
  • Next Doc
  • End If
  • End Sub
  • Public Sub Word_Fermer_Document_sans_sauver(Optional Nom_Document As Variant)
  • Dim Doc
  • If IsMissing(Nom_Document) Then
  • Word_Application.ActiveDocument.Close savechanges:=wdDoNotSaveChanges
  • Else
  • For Each Doc In Word_Application.Windows
  • If Doc.Caption = Nom_Document Then Doc.Close savechanges:=wdDoNotSaveChanges
  • Next Doc
  • End If
  • End Sub
  • Public Sub Word_Fin_document()
  • Word_Application.Selection.EndKey Unit:=wdStory, Extend:=wdMove
  • End Sub
  • Public Sub Word_fusionner_vers_nouveau_document(Supprimer_lignes_blanches As Boolean)
  • With Word_Application.ActiveDocument.MailMerge
  • .Destination = wdSendToNewDocument
  • .SuppressBlankLines = Supprimer_lignes_blanches
  • .Execute
  • End With
  • End Sub
  • Public Sub Word_Gras(Booléen As Boolean)
  • Word_Application.Selection.Font.Bold = Booléen
  • End Sub
  • Public Sub Word_Imprimer(Optional Nom_Document As String)
  • Word_Création_Lien_OLE
  • If Nom_Document = "" Then
  • Word_Application.PrintOut _
  • FileName:="", _
  • Range:=wdPrintAllDocument, _
  • Item:=wdPrintDocumentContent, _
  • Copies:=1, _
  • PageS:="", _
  • PageType:=wdPrintAllPages, _
  • Collate:=True, _
  • Background:=False, _
  • PrintToFile:=False
  • Else
  • Word_Nouveau_document , , , , False, "Minimize", True
  • Word_Application.PrintOut _
  • FileName:=Nom_Document, _
  • Range:=wdPrintAllDocument, _
  • Item:=wdPrintDocumentContent, _
  • Copies:=1, _
  • PageS:="", _
  • PageType:=wdPrintAllPages, _
  • Collate:=True, _
  • Background:=False, _
  • PrintToFile:=False
  • Word_Application.Windows("Document d'impression").Activate
  • Word_Fermer_Document_sans_sauver
  • End If
  • End Sub
  • Public Sub Word_Imprimer_pages_impaires(Optional Nom_Document As String)
  • Word_Création_Lien_OLE
  • If Nom_Document = "" Then
  • Word_Application.PrintOut _
  • FileName:="", _
  • Range:=wdPrintAllDocument, _
  • Item:=wdPrintDocumentContent, _
  • Copies:=1, _
  • PageS:="", _
  • PageType:=wdPrintOddPagesOnly, _
  • Collate:=True, _
  • Background:=False, _
  • PrintToFile:=False
  • Else
  • Word_Nouveau_document , , , , False, "Minimize", True
  • Word_Application.PrintOut _
  • FileName:=Nom_Document, _
  • Range:=wdPrintAllDocument, _
  • Item:=wdPrintDocumentContent, _
  • Copies:=1, _
  • PageS:="", _
  • PageType:=wdPrintOddPagesOnly, _
  • Collate:=True, _
  • Background:=False, _
  • PrintToFile:=False
  • Word_Application.Windows("Document d'impression").Activate
  • Word_Fermer_Document_sans_sauver
  • End If
  • End Sub
  • Public Sub Word_Imprimer_pages_paires(Optional Nom_Document As String)
  • Word_Création_Lien_OLE
  • If Nom_Document = "" Then
  • Word_Application.PrintOut _
  • FileName:="", _
  • Range:=wdPrintAllDocument, _
  • Item:=wdPrintDocumentContent, _
  • Copies:=1, _
  • PageS:="", _
  • PageType:=wdPrintEvenPagesOnly, _
  • Collate:=True, _
  • Background:=False, _
  • PrintToFile:=False
  • Else
  • Word_Nouveau_document , , , , False, "Minimize", True
  • Word_Application.PrintOut _
  • FileName:=Nom_Document, _
  • Range:=wdPrintAllDocument, _
  • Item:=wdPrintDocumentContent, _
  • Copies:=1, _
  • PageS:="", _
  • PageType:=wdPrintEvenPagesOnly, _
  • Collate:=True, _
  • Background:=False, _
  • PrintToFile:=False
  • Word_Application.Windows("Document d'impression").Activate
  • Word_Fermer_Document_sans_sauver
  • End If
  • End Sub
  • Public Sub Word_Imprimer_recto_verso(Optional Nom_Document As String)
  • Word_Imprimer_pages_impaires
  • If MsgBox("Impression des rectos en cours..." & vbCrLf & vbCrLf & "Lorsque la dernière page sera imprimée, retournez la liasse puis cliquez sur Ok pour imprimer les versos." & vbCrLf & vbCrLf & "Sinon cliquez sur Annuler", vbInformation + vbOKCancel + vbDefaultButton1, "Impression recto-verso") = vbOK Then
  • Word_Imprimer_pages_paires
  • End If
  • End Sub
  • Public Sub Word_Insère_fichier(NomFichier As String)
  • Word_Application.Selection.InsertFile _
  • FileName:=NomFichier, _
  • Range:="", _
  • ConfirmConversions:=True, _
  • Link:=False, _
  • Attachment:=False
  • End Sub
  • Public Sub Word_Insère_Image(Nom_fichier As String, Lier_au_fichier As Boolean)
  • Word_Application.Selection.InlineShapes.AddPicture FileName:=Nom_fichier, LinkToFile:=Lier_au_fichier, SaveWithDocument:=True
  • End Sub
  • Public Sub Word_Insère_Numéros_de_pages()
  • 'Merci à Arnaud Louillet pour cette correction
  • 'NormalTemplate.AutoTextEntries("Page X sur Y").Insert Where:=Selection.Range
  • Word_Application.NormalTemplate.AutoTextEntries("Page X sur Y").Insert Where:=Word_Application.Selection.Range
  • End Sub
  • Public Sub Word_Insère_Symbole(Fonte As String, Numéro_Caractère As Long, Option_Unicode As Boolean)
  • Word_Application.Selection.InsertSymbol Font:=Fonte, CharacterNumber:=Numéro_Caractère, Unicode:=Option_Unicode
  • End Sub
  • Public Sub Word_Interligne(Taille As Byte)
  • Select Case Taille
  • Case 10
  • Word_Application.Selection.ParagraphFormat.Space1
  • Case 15
  • Word_Application.Selection.ParagraphFormat.Space15
  • End Select
  • End Sub
  • Public Sub Word_Italique(Booléen As Boolean)
  • Word_Application.Selection.Font.Italic = Booléen
  • End Sub
  • Public Sub Word_Justification(Optional Type_justification As String)
  • Select Case Type_justification
  • Case "Centré"
  • Word_Application.Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
  • Case "Droite"
  • Word_Application.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
  • Case "Justifié"
  • Word_Application.Selection.ParagraphFormat.Alignment = wdAlignParagraphJustify
  • End Select
  • End Sub
  • Function Word_Ligne_courante() As Variant
  • Word_Ligne_courante = Word_Application.Selection.Information(wdFirstCharacterLineNumber)
  • End Function
  • Public Sub Word_Ligne_en_fond_de_couleur(Couleur As Variant)
  • Word_Application.Selection.ParagraphFormat.Shading.BackgroundPatternColorIndex = Couleur
  • End Sub
  • Public Sub Word_Marge_Gauche(Marge As Single)
  • Word_Application.Selection.ParagraphFormat.LeftIndent = CentimetersToPoints(Marge)
  • End Sub
  • Public Sub Word_Marge_Premiere_Ligne(Marge As Single)
  • Word_Application.Selection.ParagraphFormat.FirstLineIndent = CentimetersToPoints(Marge)
  • End Sub
  • Function Word_Nom_du_document_actif() As String
  • Word_Nom_du_document_actif = Word_Application.ActiveWindow.Caption
  • End Function
  • Public Function Word_Nombre_documents_ouverts() As Byte
  • Word_Création_Lien_OLE
  • Word_Nombre_documents_ouverts = Word_Application.Documents.Count
  • End Function
  • Public Sub Word_Nouveau_document(Optional Fonte As String, Optional Taille_Caractères As Byte, Optional Justification As String, Optional Modèle As String, Optional Visible As Boolean, Optional WindowsState As String, Optional PourImpression As Boolean)
  • Word_Création_Lien_OLE
  • With Word_Application
  • If Modèle = "" Then
  • .Documents.Add
  • Else
  • .Documents.Add Modèle
  • End If
  • If PourImpression Then
  • .ActiveWindow.Caption = "Document d'impression"
  • End If
  • Word_Taille_fenetre WindowsState
  • .Visible = Visible
  • End With
  • Word_Justification Justification
  • Word_Police_de_caracteres Fonte
  • Word_Taille_Caractères Taille_Caractères
  • End Sub
  • Public Sub Word_Ouvrir_document(Nom_Document As Variant, Visible As Boolean)
  • Word_Création_Lien_OLE
  • With Word_Application
  • .Visible = Visible
  • .Documents.Open _
  • FileName:=Nom_Document, _
  • ConfirmConversions:=True, _
  • ReadOnly:=False, _
  • AddToRecentFiles:=False, _
  • PasswordDocument:="", _
  • PasswordTemplate:="", _
  • Revert:=False, _
  • WritePasswordDocument:="", _
  • WritePasswordTemplate:="", _
  • Format:=wdOpenFormatAuto
  • End With
  • End Sub
  • Public Sub Word_Police_de_caracteres(Optional Fonte As String)
  • If Fonte <> "" Then
  • Word_Application.Selection.Font.Name = Fonte
  • End If
  • End Sub
  • Public Sub Word_Renommer_fenetre_active(Nom_fenetre As String)
  • Word_Application.ActiveWindow.Caption = Nom_fenetre
  • End Sub
  • Public Sub Word_Quitter()
  • ' Si cette copie de Microsoft Word n'était pas déjà en exécution
  • ' lorsque vous l'avez utilisée,
  • ' elle est fermée à l'aide de la méthode Quit de la propriété Application
  • ' puis le lien est rompu
  • ' sinon l'application et le lien sont conservés.
  • ' Notez que si vous tentez de quitter Microsoft Word,
  • ' la barre de titre Microsoft Word clignote et
  • ' Microsoft Word affiche un message vous demandant si
  • ' vous souhaitez enregistrer les fichiers chargés.
  • If Word_Nombre_documents_ouverts = 0 Then
  • Word_Application.Quit
  • End If
  • End Sub
  • Sub Word_Remplacer_texte(Texte_à_remplacer As Variant, Texte_de_remplacement As Variant, Tout As Boolean)
  • With Word_Application
  • .Selection.Find.ClearFormatting
  • .Selection.Find.Replacement.ClearFormatting
  • With .Selection.Find
  • .Text = Texte_à_remplacer
  • .Replacement.Text = Texte_de_remplacement
  • .Forward = True
  • .Wrap = wdFindContinue
  • .Format = False
  • .MatchCase = False
  • .MatchWholeWord = False
  • .MatchWildcards = False
  • .MatchSoundsLike = False
  • .MatchAllWordForms = False
  • End With
  • .Selection.Find.Execute
  • With .Selection
  • If .Find.Forward = True Then
  • .Collapse Direction:=wdCollapseStart
  • Else
  • .Collapse Direction:=wdCollapseEnd
  • End If
  • If Tout Then
  • .Find.Execute replace:=wdReplaceAll
  • Else
  • .Find.Execute replace:=wdReplaceOne
  • End If
  • End With
  • End With
  • End Sub
  • Public Sub Word_Saut_de_page()
  • Word_Application.Selection.InsertBreak Type:=wdPageBreak
  • End Sub
  • Public Sub Word_Sélectionner_lignes(Optional Nbre_de_lignes As Variant)
  • If IsMissing(Nbre_de_lignes) Then Nbre_de_lignes = 1
  • Word_Application.Selection.MoveDown Unit:=wdLine, Count:=Nbre_de_lignes, Extend:=wdExtend
  • End Sub
  • Public Sub Word_Sélectionner_paragraphe(Numéro_paragraphe As Long)
  • Word_Application.ActiveDocument.Paragraphs(Numéro_paragraphe).Range.Select
  • End Sub
  • Public Sub Word_Suppression_Lien_OLE()
  • Set Word_Application = Nothing
  • End Sub
  • Public Sub Word_Tabulation_Ajout(Alignement As String, En_Position As Variant)
  • Select Case Alignement
  • Case "Centré"
  • Word_Application.Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(En_Position), Alignment:=wdAlignTabCenter, Leader:=wdTabLeaderSpaces
  • Case "Décimal"
  • Word_Application.Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(En_Position), Alignment:=wdAlignTabDecimal, Leader:=wdTabLeaderSpaces
  • Case "Droit"
  • Word_Application.Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(En_Position), Alignment:=wdAlignTabRight, Leader:=wdTabLeaderSpaces
  • Case "Gauche"
  • Word_Application.Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(En_Position), Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpaces
  • End Select
  • End Sub
  • Public Sub Word_Tabulation_Suppression(En_Position As Variant)
  • Word_Application.Selection.ParagraphFormat.TabStops(CentimetersToPoints(En_Position)).Clear
  • End Sub
  • Public Sub Word_Taille_Caractères(Optional Taille As Byte)
  • If Taille > 0 Then
  • Word_Application.Selection.Font.Size = Taille
  • End If
  • End Sub
  • Public Sub Word_Taille_fenetre(Optional WindowsState As String)
  • With Word_Application
  • Select Case WindowsState
  • Case "Maximize"
  • .ActiveWindow.WindowState = wdWindowStateMaximize
  • Case "Minimize"
  • .ActiveWindow.WindowState = wdWindowStateMinimize
  • Case "Normal"
  • .ActiveWindow.WindowState = wdWindowStateNormal
  • End Select
  • End With
  • End Sub
  • Function Word_Texte_trouvé(Texte As Variant, Prompt_utilisateur As Boolean, Vers_le_bas As Boolean) As Boolean
  • Word_Texte_trouvé = Word_Chercher_texte(Texte, Prompt_utilisateur, Vers_le_bas)
  • End Function
  • Public Sub Word_Vers_la_droite(Optional Nbre_de_caractères As Variant)
  • If IsMissing(Nbre_de_caractères) Then Nbre_de_caractères = 1
  • Word_Application.Selection.MoveRight Unit:=wdCharacter, Count:=Nbre_de_caractères
  • End Sub
  • Public Sub Word_Vers_la_gauche(Optional Nbre_de_caractères As Variant)
  • If IsMissing(Nbre_de_caractères) Then Nbre_de_caractères = 1
  • Word_Application.Selection.MoveLeft Unit:=wdCharacter, Count:=Nbre_de_caractères
  • End Sub
  • Public Sub Word_Vers_le_bas(Optional Nbre_de_lignes As Variant)
  • If IsMissing(Nbre_de_lignes) Then Nbre_de_lignes = 1
  • Word_Application.Selection.MoveDown Unit:=wdLine, Count:=Nbre_de_lignes
  • End Sub
  • Public Sub Word_Vers_le_haut(Optional Nbre_de_lignes As Variant)
  • If IsMissing(Nbre_de_lignes) Then Nbre_de_lignes = 1
  • Word_Application.Selection.MoveUp Unit:=wdLine, Count:=Nbre_de_lignes
  • End Sub
  • Sub Word_test()
  • Word_Nouveau_document "Arial", 12, "Justifié", , True
  • Word_Insère_Symbole "Wingdings", -3979, True
  • Word_Ecrire_Texte "Hello !"
  • Word_A_La_Ligne 2
  • Word_Ecrire_Paragraphe "Tout cela"
  • Word_Ecrire_Paragraphe "s'exécutera"
  • Word_Ecrire_Texte "automatiquement ", True, True, 2, "Times new roman", 20
  • Word_Ecrire_Paragraphe "dans Word"
  • Word_Ecrire_Paragraphe "directement", True, True, 5, "Courrier", 16
  • Word_Début_document
  • Word_Chercher_texte "Tout cela", False, True
  • Word_Déselectionner True
  • Word_Ecrire_Texte " "
  • Word_Delete
  • Word_Remplacer_texte "ra", "", False
  • Word_Déselectionner True
  • Word_Ecrire_Texte " "
  • Word_Delete
  • Word_Chercher_texte "dans Word", False, True
  • Word_Déselectionner True
  • Word_Ecrire_Texte " "
  • Word_Delete
  • Word_Chercher_texte "directement", False, True
  • Word_Déselectionner True
  • Word_Ecrire_Texte " !"
  • Word_Début_document
  • Word_Remplacer_texte "dans Word", "depuis Access", False
  • Word_Fin_document
  • Word_A_La_Ligne 2
  • Word_Tabulation_Ajout "Droit", 12
  • Word_Ecrire_Texte vbTab & "Jacques"
  • Word_Début_document
  • Word_Chercher_texte "directement", False, True
  • Word_Couper
  • Word_Début_document
  • Word_Chercher_texte "depuis", False, True
  • Word_Déselectionner
  • Word_Coller
  • Word_Début_document
  • Word_Activer_Pied_de_page
  • Word_Ecrire_Texte Format(Date, "dddd dd mm yyyy")
  • Word_Insère_Numéros_de_pages
  • Word_Activer_Entete
  • Word_Justification "Centré"
  • Word_Ecrire_Texte "Démo"
  • Word_Activer_Corps_du_document
  • End Sub
'© Jacques PRESTREAU, 1999, 2000, 2001

'Pour utiliser ces procédures et ces fonctions de dialogue avec Word,
'  il faut au préalable :

'  1. Entrer dans un quelconque code Visual Basic de votre application
'     (celui d'un formulaire ou dans n'importe lequel de vos modules)

'  Si vous utilisez Access
'  2. Exécuter le menu Outils/Références...

'  Si vous utilisez VB
'  2. Exécuter le menu Projet/Références...

'  Que vous utilisiez Acces ou VB
'  3. Dans la fenêtre qui apparaît, vérifiez que vous avez une référence sur
'     Microsoft Word X.y Object Library
'     Cochez la case si elle ne l'est pas
'  4. Fermer les fenêtres avec Ok

'  Si vous utilisez VB
'  5. Remplacez par "Dim" les mot-clés "Public" des constantes de couleur
'  6. C'est tout

'Une fois que c'est fait, les routines ci-dessous font partie intégrante
'  de votre langage Visual Basic

'Vous avez un exemple de dialogue avec Word avec la procédure Word_test()
'  qui se trouve à la fin de ce fichier
'  Exécutez-le avec la touche F8 pour la démo

'J'améliore ce code en permanence. N'hésitez pas à me faire vos remarques.

'  jprestreau@groupemalakoff.com

Option Explicit

Public Const Clr_auto       As Byte = 0
Public Const Clr_Noir       As Byte = 1
Public Const Clr_Bleu       As Byte = 2
Public Const Clr_Turquoise  As Byte = 3
Public Const Clr_VertClair  As Byte = 4
Public Const Clr_Rose       As Byte = 5
Public Const Clr_Rouge      As Byte = 6
Public Const Clr_Jaune      As Byte = 7
Public Const Clr_Blanc      As Byte = 8
Public Const Clr_BleuFoncé  As Byte = 9
Public Const Clr_Cyan       As Byte = 10
Public Const Clr_Vert       As Byte = 11
Public Const Clr_Violet     As Byte = 12
Public Const Clr_RougeFoncé As Byte = 13
Public Const Clr_JauneFoncé As Byte = 14
Public Const Clr_GrisFoncé  As Byte = 15
Public Const Clr_GrisClair  As Byte = 16

Public Word_Application As Word.Application

Public Sub Word_A_La_Ligne(Optional Nbre_de_lignes As Variant)

Dim I As Byte

If IsMissing(Nbre_de_lignes) Then Nbre_de_lignes = 1

For I = 1 To Nbre_de_lignes
   Word_Application.Selection.TypeParagraph
Next I

End Sub

Sub Word_Activer_Entete()
    
With Word_Application
   If .ActiveWindow.View.SplitSpecial <> wdPaneNone Then
      .ActiveWindow.Panes(2).Close
   End If
   If .ActiveWindow.ActivePane.View.Type = wdNormalView _
   Or .ActiveWindow.ActivePane.View.Type = wdOutlineView _
   Or .ActiveWindow.ActivePane.View.Type = wdMasterView Then
      .ActiveWindow.ActivePane.View.Type = wdPageView
   End If
   .ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
End With

End Sub

Sub Word_Activer_Corps_du_document()

With Word_Application
   If .ActiveWindow.View.SplitSpecial <> wdPaneNone Then
      .ActiveWindow.Panes(2).Close
   End If
   If .ActiveWindow.ActivePane.View.Type = wdNormalView _
   Or .ActiveWindow.ActivePane.View.Type = wdOutlineView _
   Or .ActiveWindow.ActivePane.View.Type = wdMasterView Then
      .ActiveWindow.ActivePane.View.Type = wdPageView
   End If
   .ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End With

End Sub

Sub Word_Activer_Pied_de_page()

With Word_Application
   If .ActiveWindow.View.SplitSpecial <> wdPaneNone Then
      .ActiveWindow.Panes(2).Close
   End If
   If .ActiveWindow.ActivePane.View.Type = wdNormalView _
   Or .ActiveWindow.ActivePane.View.Type = wdOutlineView _
   Or .ActiveWindow.ActivePane.View.Type = wdMasterView Then
      .ActiveWindow.ActivePane.View.Type = wdPageView
   End If
   .ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
End With

End Sub

Sub Word_Aller_a_la_fin_de_la_ligne_courante()

Word_Application.Selection.EndKey Unit:=wdLine

End Sub

Sub Word_Aller_a_la_ligne_numéro(Optional Numéro_ligne As Variant)

Word_Application.Selection.GoTo What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=Numéro_ligne

End Sub

Sub Word_Aller_au_début_de_la_ligne_courante()

Word_Application.Selection.HomeKey Unit:=wdLine

End Sub

Public Sub Word_Atteindre_Signet(Optional Nom_signet As Variant)

If Not IsNull(Nom_signet) Then
   Word_Application.Selection.GoTo What:=wdGoToBookmark, Name:=Nom_signet
End If

End Sub

Public Sub Word_Au_signet_Ecrire_texte(Nom_signet As String, Optional Texte As Variant)

Word_Atteindre_Signet (Nom_signet)

If Not IsNull(Texte) Then
   Word_Ecrire_Texte (Texte)
End If

End Sub

Public Sub Word_Backspace()

Word_Application.Selection.TypeBackspace

End Sub

Public Sub Word_Bascule_Gras()

Word_Application.Selection.Font.Bold = wdToggle

End Sub

Public Sub Word_Bascule_Italique()

Word_Application.Selection.Font.Italic = wdToggle

End Sub

Function Word_Chercher_texte(Texte As Variant, Prompt_utilisateur As Boolean, Vers_le_bas As Boolean) As Boolean

With Word_Application
   .Selection.Find.ClearFormatting
   With .Selection.Find
       .Text = Texte
       .Replacement.Text = ""
       .Forward = Vers_le_bas
       .Wrap = wdFindContinue
       .Format = False
       .MatchCase = False
       .MatchWholeWord = False
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
       If Not Prompt_utilisateur Then
           Word_Chercher_texte = .Execute
       End If
   End With
End With

End Function

Function Word_Colonne_courante()

Word_Colonne_courante = Word_Application.Selection.Information(wdFirstCharacterColumnNumber)

End Function

Public Sub Word_Couleur_Texte(Couleur As Long)

'Couleur peut prendre la valeur d'une des constantes Clr_xxx

Word_Application.Selection.Font.ColorIndex = Couleur

End Sub

Public Sub Word_Couper()

Word_Application.Selection.Cut

End Sub

Public Sub Word_Coller()

Word_Application.Selection.Paste

End Sub

Public Sub Word_Copier()

Word_Application.Selection.Copy

End Sub

Public Sub Word_Création_Lien_OLE()

On Error Resume Next ' Retarde la récupération d'erreur.

' La fonction Getobject appelée sans le premier argument
'  renvoie une référence à une occurrence de l'application Word.
'  Si l'application n'est pas en exécution,
'     une erreur se produit et on utilise l'erreur.
'  Noter la virgule utilisée en tant que premier espace réservé d'argument.

Set Word_Application = GetObject(, "Word.Application")

If Err.Number <> 0 Then
   Set Word_Application = CreateObject("Word.Application")
End If

Err.Clear   ' Efface l'objet Err au cas où une erreur s'est produite.

End Sub

Public Sub Word_Début_document()

Word_Application.Selection.HomeKey Unit:=wdStory, Extend:=wdMove

End Sub

Public Sub Word_Delete()

Word_Application.Selection.Delete

End Sub

Public Sub Word_Déselectionner(Optional Curseur_a_la_fin As Boolean)

If Curseur_a_la_fin Then
   Word_Application.Selection.Collapse wdCollapseEnd
Else
   Word_Application.Selection.Collapse wdCollapseStart
End If

End Sub

Function Word_Dialogue_Imprimer() As Boolean

With Word_Application
   .Visible = True
   With Dialogs(wdDialogFilePrint)
      If .Show = -1 Then
         .Execute
      End If
   End With
End With

End Function

Function Word_Dialogue_Nouveau_Document() As Boolean

Word_Création_Lien_OLE

With Word_Application
   .Visible = True
   With Dialogs(wdDialogFileNew)
      If .Show = -1 Then
         .Execute
         Word_Dialogue_Nouveau_Document = True
      Else
         Word_Dialogue_Nouveau_Document = False
      End If
   End With
End With

End Function

Function Word_Dialogue_Ouvrir_Document() As Boolean

Word_Création_Lien_OLE

With Word_Application
   .Visible = True
   With Dialogs(wdDialogFileOpen)
      If .Show = -1 Then
         .Execute
         Word_Dialogue_Ouvrir_Document = True
      Else
         Word_Dialogue_Ouvrir_Document = False
      End If
   End With
End With

End Function

Public Sub Word_Ecrire_Paragraphe(Optional Texte As Variant, Optional Gras As Variant, Optional Italique As Variant, Optional Couleur As Variant, Optional Fonte As String, Optional Taille As Byte)

Word_Ecrire_Texte Texte, Gras, Italique, Couleur, Fonte, Taille
Word_A_La_Ligne

End Sub

Public Sub Word_Ecrire_Texte(Optional Texte As Variant, Optional Gras As Variant, Optional Italique As Variant, Optional Couleur As Variant, Optional Fonte As String, Optional Taille As Byte)

Dim old_Gras As Boolean
Dim old_Italique As Boolean
Dim old_Couleur As Long
Dim old_Fonte As String
Dim old_Taille As Byte

old_Gras = Word_Application.Selection.Font.Bold
If Not (IsMissing(Gras)) Then Word_Application.Selection.Font.Bold = Gras

old_Italique = Word_Application.Selection.Font.Italic
If Not (IsMissing(Italique)) Then Word_Application.Selection.Font.Italic = Italique

old_Couleur = Word_Application.Selection.Font.ColorIndex
If Not (IsMissing(Couleur)) Then Word_Application.Selection.Font.ColorIndex = Couleur

old_Fonte = Word_Application.Selection.Font.Name
If Fonte <> "" Then
   Word_Application.Selection.Font.Name = Fonte
End If

old_Taille = Word_Application.Selection.Font.Size
If Taille > 0 Then
   Word_Application.Selection.Font.Size = Taille
End If

If Not IsNull(Texte) Then
   Word_Application.Selection.TypeText Text:=Texte
End If

Word_Application.Selection.Font.Bold = old_Gras
Word_Application.Selection.Font.Italic = old_Italique
Word_Application.Selection.Font.ColorIndex = old_Couleur
Word_Application.Selection.Font.Name = old_Fonte
Word_Application.Selection.Font.Size = old_Taille

End Sub

Public Sub Word_Enregistrer_document(Optional Nom_Document As Variant)

If IsNull(Nom_Document) Then
   Word_Application.ActiveDocument.Save
Else
   Word_Application.ActiveDocument.SaveAs Nom_Document
End If

End Sub

Public Sub Word_Enregistrer_document_sous(Optional Nom_Document As Variant)

If IsMissing(Nom_Document) Then
   Dialogs(wdDialogFileSaveAs).Show
Else
   Word_Application.ActiveDocument.SaveAs Nom_Document
End If

End Sub

Sub Word_Exécuter_Macro(Nom_Macro As String)

With Word_Application
   .Run Nom_Macro
End With

End Sub

Public Sub Word_Fermer_Document(Optional Nom_Document As Variant)

Dim Doc

If IsMissing(Nom_Document) Then
   Word_Application.ActiveDocument.Close
Else
   For Each Doc In Word_Application.Documents
      If Doc.Name = Nom_Document Then Doc.Close
   Next Doc
End If

End Sub

Public Sub Word_Fermer_Document_sans_sauver(Optional Nom_Document As Variant)

Dim Doc

If IsMissing(Nom_Document) Then
   Word_Application.ActiveDocument.Close savechanges:=wdDoNotSaveChanges
Else
   For Each Doc In Word_Application.Windows
      If Doc.Caption = Nom_Document Then Doc.Close savechanges:=wdDoNotSaveChanges
   Next Doc
End If


End Sub

Public Sub Word_Fin_document()

Word_Application.Selection.EndKey Unit:=wdStory, Extend:=wdMove

End Sub

Public Sub Word_fusionner_vers_nouveau_document(Supprimer_lignes_blanches As Boolean)
 
With Word_Application.ActiveDocument.MailMerge
   .Destination = wdSendToNewDocument
   .SuppressBlankLines = Supprimer_lignes_blanches
   .Execute
End With
 
End Sub


Public Sub Word_Gras(Booléen As Boolean)

Word_Application.Selection.Font.Bold = Booléen

End Sub

Public Sub Word_Imprimer(Optional Nom_Document As String)

Word_Création_Lien_OLE

If Nom_Document = "" Then
   Word_Application.PrintOut _
                        FileName:="", _
                        Range:=wdPrintAllDocument, _
                        Item:=wdPrintDocumentContent, _
                        Copies:=1, _
                        PageS:="", _
                        PageType:=wdPrintAllPages, _
                        Collate:=True, _
                        Background:=False, _
                        PrintToFile:=False
Else
   Word_Nouveau_document , , , , False, "Minimize", True
   Word_Application.PrintOut _
                        FileName:=Nom_Document, _
                        Range:=wdPrintAllDocument, _
                        Item:=wdPrintDocumentContent, _
                        Copies:=1, _
                        PageS:="", _
                        PageType:=wdPrintAllPages, _
                        Collate:=True, _
                        Background:=False, _
                        PrintToFile:=False
   Word_Application.Windows("Document d'impression").Activate
   Word_Fermer_Document_sans_sauver
End If

End Sub

Public Sub Word_Imprimer_pages_impaires(Optional Nom_Document As String)

Word_Création_Lien_OLE

If Nom_Document = "" Then
   Word_Application.PrintOut _
                        FileName:="", _
                        Range:=wdPrintAllDocument, _
                        Item:=wdPrintDocumentContent, _
                        Copies:=1, _
                        PageS:="", _
                        PageType:=wdPrintOddPagesOnly, _
                        Collate:=True, _
                        Background:=False, _
                        PrintToFile:=False
Else
   Word_Nouveau_document , , , , False, "Minimize", True
   Word_Application.PrintOut _
                        FileName:=Nom_Document, _
                        Range:=wdPrintAllDocument, _
                        Item:=wdPrintDocumentContent, _
                        Copies:=1, _
                        PageS:="", _
                        PageType:=wdPrintOddPagesOnly, _
                        Collate:=True, _
                        Background:=False, _
                        PrintToFile:=False
   Word_Application.Windows("Document d'impression").Activate
   Word_Fermer_Document_sans_sauver
End If

End Sub

Public Sub Word_Imprimer_pages_paires(Optional Nom_Document As String)

Word_Création_Lien_OLE

If Nom_Document = "" Then
   Word_Application.PrintOut _
                        FileName:="", _
                        Range:=wdPrintAllDocument, _
                        Item:=wdPrintDocumentContent, _
                        Copies:=1, _
                        PageS:="", _
                        PageType:=wdPrintEvenPagesOnly, _
                        Collate:=True, _
                        Background:=False, _
                        PrintToFile:=False
Else
   Word_Nouveau_document , , , , False, "Minimize", True
   Word_Application.PrintOut _
                        FileName:=Nom_Document, _
                        Range:=wdPrintAllDocument, _
                        Item:=wdPrintDocumentContent, _
                        Copies:=1, _
                        PageS:="", _
                        PageType:=wdPrintEvenPagesOnly, _
                        Collate:=True, _
                        Background:=False, _
                        PrintToFile:=False
   Word_Application.Windows("Document d'impression").Activate
   Word_Fermer_Document_sans_sauver
End If

End Sub

Public Sub Word_Imprimer_recto_verso(Optional Nom_Document As String)

Word_Imprimer_pages_impaires

If MsgBox("Impression des rectos en cours..." & vbCrLf & vbCrLf & "Lorsque la dernière page sera imprimée, retournez la liasse puis cliquez sur Ok pour imprimer les versos." & vbCrLf & vbCrLf & "Sinon cliquez sur Annuler", vbInformation + vbOKCancel + vbDefaultButton1, "Impression recto-verso") = vbOK Then
   Word_Imprimer_pages_paires
End If

End Sub

Public Sub Word_Insère_fichier(NomFichier As String)

Word_Application.Selection.InsertFile _
                        FileName:=NomFichier, _
                        Range:="", _
                        ConfirmConversions:=True, _
                        Link:=False, _
                        Attachment:=False

End Sub

Public Sub Word_Insère_Image(Nom_fichier As String, Lier_au_fichier As Boolean)
    
Word_Application.Selection.InlineShapes.AddPicture FileName:=Nom_fichier, LinkToFile:=Lier_au_fichier, SaveWithDocument:=True

End Sub

Public Sub Word_Insère_Numéros_de_pages()

'Merci à Arnaud Louillet pour cette correction
'NormalTemplate.AutoTextEntries("Page X sur Y").Insert Where:=Selection.Range
Word_Application.NormalTemplate.AutoTextEntries("Page X sur Y").Insert Where:=Word_Application.Selection.Range

End Sub

Public Sub Word_Insère_Symbole(Fonte As String, Numéro_Caractère As Long, Option_Unicode As Boolean)

Word_Application.Selection.InsertSymbol Font:=Fonte, CharacterNumber:=Numéro_Caractère, Unicode:=Option_Unicode

End Sub

Public Sub Word_Interligne(Taille As Byte)

Select Case Taille
   Case 10
      Word_Application.Selection.ParagraphFormat.Space1
   Case 15
      Word_Application.Selection.ParagraphFormat.Space15
End Select

End Sub

Public Sub Word_Italique(Booléen As Boolean)

Word_Application.Selection.Font.Italic = Booléen

End Sub

Public Sub Word_Justification(Optional Type_justification As String)

Select Case Type_justification
   Case "Centré"
      Word_Application.Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
   Case "Droite"
      Word_Application.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
   Case "Justifié"
      Word_Application.Selection.ParagraphFormat.Alignment = wdAlignParagraphJustify
End Select

End Sub

Function Word_Ligne_courante() As Variant

Word_Ligne_courante = Word_Application.Selection.Information(wdFirstCharacterLineNumber)

End Function

Public Sub Word_Ligne_en_fond_de_couleur(Couleur As Variant)

Word_Application.Selection.ParagraphFormat.Shading.BackgroundPatternColorIndex = Couleur

End Sub

Public Sub Word_Marge_Gauche(Marge As Single)

Word_Application.Selection.ParagraphFormat.LeftIndent = CentimetersToPoints(Marge)

End Sub

Public Sub Word_Marge_Premiere_Ligne(Marge As Single)

Word_Application.Selection.ParagraphFormat.FirstLineIndent = CentimetersToPoints(Marge)

End Sub

Function Word_Nom_du_document_actif() As String

Word_Nom_du_document_actif = Word_Application.ActiveWindow.Caption

End Function

Public Function Word_Nombre_documents_ouverts() As Byte

Word_Création_Lien_OLE
Word_Nombre_documents_ouverts = Word_Application.Documents.Count

End Function

Public Sub Word_Nouveau_document(Optional Fonte As String, Optional Taille_Caractères As Byte, Optional Justification As String, Optional Modèle As String, Optional Visible As Boolean, Optional WindowsState As String, Optional PourImpression As Boolean)

Word_Création_Lien_OLE

With Word_Application
   If Modèle = "" Then
      .Documents.Add
   Else
      .Documents.Add Modèle
   End If
   
   If PourImpression Then
      .ActiveWindow.Caption = "Document d'impression"
   End If
   
   Word_Taille_fenetre WindowsState
   
   .Visible = Visible

End With
   
Word_Justification Justification
Word_Police_de_caracteres Fonte
Word_Taille_Caractères Taille_Caractères

End Sub

Public Sub Word_Ouvrir_document(Nom_Document As Variant, Visible As Boolean)

Word_Création_Lien_OLE

With Word_Application
   .Visible = Visible
   .Documents.Open _
                  FileName:=Nom_Document, _
                  ConfirmConversions:=True, _
                  ReadOnly:=False, _
                  AddToRecentFiles:=False, _
                  PasswordDocument:="", _
                  PasswordTemplate:="", _
                  Revert:=False, _
                  WritePasswordDocument:="", _
                  WritePasswordTemplate:="", _
                  Format:=wdOpenFormatAuto
End With

End Sub

Public Sub Word_Police_de_caracteres(Optional Fonte As String)

If Fonte <> "" Then
   Word_Application.Selection.Font.Name = Fonte
End If

End Sub

Public Sub Word_Renommer_fenetre_active(Nom_fenetre As String)

Word_Application.ActiveWindow.Caption = Nom_fenetre

End Sub

Public Sub Word_Quitter()

' Si cette copie de Microsoft Word n'était pas déjà en exécution
'  lorsque vous l'avez utilisée,
'  elle est fermée à l'aide de la méthode Quit de la propriété Application
'  puis le lien est rompu
'  sinon l'application et le lien sont conservés.
' Notez que si vous tentez de quitter Microsoft Word,
'  la barre de titre Microsoft Word clignote et
'  Microsoft Word affiche un message vous demandant si
'  vous souhaitez enregistrer les fichiers chargés.

If Word_Nombre_documents_ouverts = 0 Then
   Word_Application.Quit
End If

End Sub

Sub Word_Remplacer_texte(Texte_à_remplacer As Variant, Texte_de_remplacement As Variant, Tout As Boolean)

With Word_Application
    .Selection.Find.ClearFormatting
    .Selection.Find.Replacement.ClearFormatting
    With .Selection.Find
        .Text = Texte_à_remplacer
        .Replacement.Text = Texte_de_remplacement
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    .Selection.Find.Execute
    With .Selection
        If .Find.Forward = True Then
            .Collapse Direction:=wdCollapseStart
        Else
            .Collapse Direction:=wdCollapseEnd
        End If
        If Tout Then
            .Find.Execute replace:=wdReplaceAll
        Else
            .Find.Execute replace:=wdReplaceOne
        End If
    End With
End With

End Sub

Public Sub Word_Saut_de_page()

Word_Application.Selection.InsertBreak Type:=wdPageBreak

End Sub

Public Sub Word_Sélectionner_lignes(Optional Nbre_de_lignes As Variant)

If IsMissing(Nbre_de_lignes) Then Nbre_de_lignes = 1

Word_Application.Selection.MoveDown Unit:=wdLine, Count:=Nbre_de_lignes, Extend:=wdExtend

End Sub

Public Sub Word_Sélectionner_paragraphe(Numéro_paragraphe As Long)

Word_Application.ActiveDocument.Paragraphs(Numéro_paragraphe).Range.Select

End Sub

Public Sub Word_Suppression_Lien_OLE()

Set Word_Application = Nothing

End Sub

Public Sub Word_Tabulation_Ajout(Alignement As String, En_Position As Variant)

Select Case Alignement
   Case "Centré"
      Word_Application.Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(En_Position), Alignment:=wdAlignTabCenter, Leader:=wdTabLeaderSpaces
   Case "Décimal"
      Word_Application.Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(En_Position), Alignment:=wdAlignTabDecimal, Leader:=wdTabLeaderSpaces
   Case "Droit"
      Word_Application.Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(En_Position), Alignment:=wdAlignTabRight, Leader:=wdTabLeaderSpaces
   Case "Gauche"
      Word_Application.Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(En_Position), Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpaces
End Select

End Sub

Public Sub Word_Tabulation_Suppression(En_Position As Variant)

Word_Application.Selection.ParagraphFormat.TabStops(CentimetersToPoints(En_Position)).Clear

End Sub

Public Sub Word_Taille_Caractères(Optional Taille As Byte)

If Taille > 0 Then
   Word_Application.Selection.Font.Size = Taille
End If

End Sub

Public Sub Word_Taille_fenetre(Optional WindowsState As String)

With Word_Application
   Select Case WindowsState
      Case "Maximize"
         .ActiveWindow.WindowState = wdWindowStateMaximize
      Case "Minimize"
         .ActiveWindow.WindowState = wdWindowStateMinimize
      Case "Normal"
         .ActiveWindow.WindowState = wdWindowStateNormal
   End Select
End With

End Sub

Function Word_Texte_trouvé(Texte As Variant, Prompt_utilisateur As Boolean, Vers_le_bas As Boolean) As Boolean

Word_Texte_trouvé = Word_Chercher_texte(Texte, Prompt_utilisateur, Vers_le_bas)

End Function

Public Sub Word_Vers_la_droite(Optional Nbre_de_caractères As Variant)

If IsMissing(Nbre_de_caractères) Then Nbre_de_caractères = 1

Word_Application.Selection.MoveRight Unit:=wdCharacter, Count:=Nbre_de_caractères

End Sub

Public Sub Word_Vers_la_gauche(Optional Nbre_de_caractères As Variant)

If IsMissing(Nbre_de_caractères) Then Nbre_de_caractères = 1

Word_Application.Selection.MoveLeft Unit:=wdCharacter, Count:=Nbre_de_caractères

End Sub

Public Sub Word_Vers_le_bas(Optional Nbre_de_lignes As Variant)

If IsMissing(Nbre_de_lignes) Then Nbre_de_lignes = 1

Word_Application.Selection.MoveDown Unit:=wdLine, Count:=Nbre_de_lignes

End Sub

Public Sub Word_Vers_le_haut(Optional Nbre_de_lignes As Variant)

If IsMissing(Nbre_de_lignes) Then Nbre_de_lignes = 1

Word_Application.Selection.MoveUp Unit:=wdLine, Count:=Nbre_de_lignes

End Sub

Sub Word_test()

Word_Nouveau_document "Arial", 12, "Justifié", , True
Word_Insère_Symbole "Wingdings", -3979, True
Word_Ecrire_Texte "Hello !"
Word_A_La_Ligne 2
Word_Ecrire_Paragraphe "Tout cela"
Word_Ecrire_Paragraphe "s'exécutera"
Word_Ecrire_Texte "automatiquement ", True, True, 2, "Times new roman", 20
Word_Ecrire_Paragraphe "dans Word"
Word_Ecrire_Paragraphe "directement", True, True, 5, "Courrier", 16
Word_Début_document
Word_Chercher_texte "Tout cela", False, True
Word_Déselectionner True
Word_Ecrire_Texte " "
Word_Delete
Word_Remplacer_texte "ra", "", False
Word_Déselectionner True
Word_Ecrire_Texte " "
Word_Delete
Word_Chercher_texte "dans Word", False, True
Word_Déselectionner True
Word_Ecrire_Texte " "
Word_Delete
Word_Chercher_texte "directement", False, True
Word_Déselectionner True
Word_Ecrire_Texte " !"
Word_Début_document
Word_Remplacer_texte "dans Word", "depuis Access", False
Word_Fin_document
Word_A_La_Ligne 2
Word_Tabulation_Ajout "Droit", 12
Word_Ecrire_Texte vbTab & "Jacques"
Word_Début_document
Word_Chercher_texte "directement", False, True
Word_Couper
Word_Début_document
Word_Chercher_texte "depuis", False, True
Word_Déselectionner
Word_Coller
Word_Début_document
Word_Activer_Pied_de_page
Word_Ecrire_Texte Format(Date, "dddd dd mm yyyy")
Word_Insère_Numéros_de_pages
Word_Activer_Entete
Word_Justification "Centré"
Word_Ecrire_Texte "Démo"
Word_Activer_Corps_du_document

End Sub

 Conclusion

Faites un test en mode pas à pas (F8) avec la procédure Word_test.

Vous m'en direz des nouvelles !


 Sources du même auteur

CALCUL DE RIB
BOÎTES DE DIALOGUE STANDARDISÉES
PILOTER EXCEL PAR OLE AVEC ACCESS OU VB
CALCUL SIREN ET SIRET
CALCUL CLÉ INSEE (N° SÉCURITÉ SOCIALE)

 Sources de la même categorie

Source avec Zip GESTION PERSONNEL par oudlarbi
Source avec Zip Source avec une capture CALENDRIER EN VBA POUR EXCEL 2010 par nounou94
Source avec Zip Source avec une capture MANIPULER LES FENETRES ENFANT D'EXCEL par bigfish_le vrai
Source avec Zip Source avec une capture COLLECTION ID par Le Pivert
Source avec Zip Source avec une capture VBA MASQUE DE SAISIE NUMÉRIQUE par acive

 Sources en rapport avec celle ci

AJOUTER DES TABLEAUX DANS WORD par djebbipgm
Source avec Zip Source avec une capture WORD CONVERT VERSION 2 par Morricon
Source avec Zip WORD : OUVERTURE (AVEC OU SANS PASSWORD) ET PROPRIÉTÉES D'UN... par DJMoustique
Source avec Zip DLL POUR PILOTER WORD par drissou
Source avec Zip Source avec une capture Source .NET (Dotnet) [.NET2] [VSTO3] WORD 2007 - CLIENT POP3 - CUSTOMTASKPANE par VBSorcier

Commentaires et avis

Commentaire de bobbond le 02/03/2003 16:53:57

Trèe très bien felecitation

Commentaire de ramzy le 05/05/2003 13:18:06

Félicitations pour ton code.
Par contre tu pourrais peut etre m'aider. Je cherche comment générer des étiquettes (pour enveloppes) à partir de vb. Il faudrait 3 étiquettes sur la largeur et 8 sur la hauteur. Pour le moment j'ai un fichier word que je fusionne avec une base access.
Merci

Commentaire de Rank le 13/05/2003 16:57:38

Très interessant, merci!
Il ne manque que l'utilisation des tableaux!
;)

Commentaire de yalard le 30/06/2003 14:40:36

juste un problème que je n'ai pas encore résolu ...
c'est sur ta procédure : Sub Word_Insère_Numéros_de_pages()
le résultat est bizarre, ca me donne juste : page 1 sur
et puis rien du tout ...
Kelkun peut m'aider
ps : j'ai reprie le meme code
un grand merci pr le reste

Commentaire de MegaMickx le 01/07/2003 10:07:21

Il n'y a pas un seul commentaire!!!!!
Je débute en VB et pour moi c'est impossible a comprendre!!!!

Commentaire de yalard le 02/07/2003 16:44:22

si tu comprends pas un truc, poses une question plutot que de raller MEGAmickx

Commentaire de zobyone le 12/09/2003 20:40:48

Salut a tous.J'ai un probleme d'ouverture d'un fichier existant "RunTime 5174" fichier inexistant. J'ai essayé plein de trucs mais je trouve pas. Si quelqu'un a la soluce. Sinon C un super module

Commentaire de SirCapello le 31/10/2003 17:18:41

Très bonnes sources, très utile !

Une remarque : pour ceux qui se plaignent de ne pas comprendre, faute de commentaires, la réponse est simplement dans le nom des procédures...
C'est très explicite, essayez juste de faire abstraction de la nature des arguments qui est parfois complexe...

Je cherche un moyen de verrouiller WORD à partir de VB. L'utilisateur ne doit pas pouvoir modifier le contenu du document après la fusion de VB vers WORD.
Peut-être sais-tu comment faire ?

Commentaire de jon26 le 03/11/2003 13:19:55

Excellent. Tu me sauves la vie avec ton code. Tu me fais gagner un temps précieux, merci beaucoup. Pour ceux que ça intéresse, j'ai rajouter deux fonctions qui utilisent les tables. J'ai un fichier modèle dans lequel il y à une table que je remodèle à ma guise.
La routine "Word_Inserer_Ligne_Avant_Totaux" insère une ligne avant les 3 lignes finales du seul tableau de ma page. La petite routine enlève les bordures du haut de la ligne insérée.

Sub Enlever_Bordure_Haut_Ligne(RowObject As Row)
  RowObject.Borders(wdBorderTop).LineStyle = wdLineStyleNone
End Sub

Sub Word_Inserer_Ligne_Avant_Totaux()
   Dim b As Tables, a As Table, RowObject As Row, RowObject2 As Row, x As String
   Set b = Word_Application.ActiveDocument.Tables
   Set a = b(1)
'avant avant dernière ligne du tableau  
Set RowObject = a.Rows.Last.Previous.Previous
'on insère une ligne avant la ligne RowObject
   a.Rows.Add RowObject
'on crée l'objet que c'est la ligne avant RowObject
   Set RowObject2 = RowObject.Previous
   Enlever_Bordure_Haut_Ligne RowObject2
End Sub

Commentaire de chrisou31 le 13/02/2004 21:26:04

super source
vraiment il n'y a rien à dire, c'est presque complet (ça c'est vraiment pour chipoter)
10/10

Commentaire de yodinho le 31/03/2004 10:04:18

Oh la la jcapte rien... :-( en fait je voudrais rechercher un mot sur word à partir de VB alors si qq1 peut m'aider SOS!!!!

Commentaire de Mangusta le 15/04/2004 09:57:42

Très pratique, juste une petite chose, faire référence à l'objet Word_Application pour définir les tabulation :

Word_Application.Selection.ParagraphFormat.TabStops.Add Position:=Word_Application.CentimetersToPoints(En_Position), Alignment:=wdAlignTabCenter, Leader:=wdTabLeaderSpaces

Sinon erreur 462

Commentaire de srogers le 30/04/2004 22:38:37

Bonjour,
En voyant cette source, je me suis dit peut etre quelqu'un pourrait résoudre un probleme que j'ai depuis longtemps malgré mes recherches auprès de personnes compétentes.
Voila : J'utilisais des formulaires sous access 97 me permettant de visualiser des documents word en cliquant sur un bouton du formulaire. Ce document Word comportait des mots clés qui étaient remplacés par les informations du formulaire sur l'enregistrement en cours.
je n'utilisais aucun rapport sous access et passais toujours par cette fonctionnalité qui me permettait de modifier aisément sous word, d'éviter les espaces importants selon la longueur des champs et allégeait la base de données et bien d'autre encore)
J'avais donc des documents maitres avec word avec des mots clés entre crochets ex. {NomEmploye} ... et ces mots clés étaient remplacés par les champs de ma base de données (de l'enregistrement en cours, ex. NomEmploye) lorsque j'appuyai sur le bouton du formulaire
Cela fonctionnait très bien (comme un publipostage sous Word)
Mais depuis l'apparition d'Office 2000, certaines fonctions (entre autre apptivate ... ne sont plus reconnues.
Je suis novice en VBA mais si quelqu'un a une réponse à mon problème, de préférence avec un exemple (car étant novice), je lui en serai vraiment très reconnaissant.
Merci à tous

Commentaire de djoul1001 le 19/05/2004 16:21:00

Bonjour,
Ce code est vraiment bien, et m'aide beaucoup.
J'utilise vb.net et débute avec vb.

Je ne parviens pas, après avoir réussi à lancer word depuis mon appli, à ouvrir un nouveau document Word (j'en suis à : Dim MonDocumentWord2 As Microsoft.Office.Interop.Word.Document)

Quelqu'un peut-il m'aider ?

De plus, est il possible de lancer une session word dans un panel vb ?
merci beaucoup d'avance

Commentaire de Snurf le 15/06/2004 11:43:53

Très beau boulot !!! il existe plus simple? noooon c'est du condensé du prêt à utiliser, rien à dire !!
Bravo et merci

Commentaire de sehn le 15/06/2004 15:40:39

bon condensé

Voila une autre fonction pour ton code : insertion d'un document word dans le document en cours

Public Sub Word_Insertion_Document(ls_fichier As String)
'si le document existe
If UCase(Dir(ls_fichier, vbNormal)) = UCase(Right(ls_fichier, Len(ls_fichier) - InStrRev(ls_fichier, "\", -1))) Then

    Word_Application.Selection.InsertFile FileName:=ls_fichier, Range:="", ConfirmConversions:=False, Link:=False, Attachment:=False
End If

SeHN

Commentaire de AbsolutBeauty le 06/07/2004 12:24:50

Bonjour tout le monde,
Une question pour les champions de word sous VB:
J'insere une image dans mon document, mais comment placer cette image devant le texte?  A la main faut faire click droit sur l'image/Propriétés/Habillage et choisir "devant le texte".
Ne connaissant pas le code j'ai voulu créer une nouvelle macro sous word et faire ca a la main, pour recuperer le code généré, mais impossible, je peux pas jouer avec le style d'habillage pendant l'enregistrement de la macro.
Merci a celui/celle qui aura la réponse, merci aussi a ceux qui auront cherché sans resultats :)
Abs

Commentaire de bea_dupuis le 10/08/2004 14:48:44

Bonjour,
C'est génial. Merci, merci merci et encore merci....
Pratique et marche très facilement.
Manquerait juste le traitement des tableaux....
Encore merci. Si, si, j'insiste.
Bonne continuation,
Béa.

Commentaire de papillon76 le 12/08/2004 14:25:45

Un immense merci d'avoir mis ce code à disposition... C'est très sympa.
Exactement ce dont j'avais besoin.
MERCI MERCI MERCI MERCI MERCI
PS: mon chef rentre de vacances la semaine prochaine... et il va voir que j'ai fait du "bon" boulot ;-) grâce à toi !! mais chut...

Commentaire de patoucanard le 24/08/2004 10:43:19

Bonjour,
Si Word est déjà ouvert, cela crée une erreur dans Access 97 et le rest ne se fait plus, comment peut-on faire pour savoir si Word est déjà ouvert
Merci de me répondre, besoin professionnel
@+

Commentaire de zeunz le 20/01/2005 01:22:45

tres bien.
je vais pouvoir me baser sur ton "tutoriel"
merci bcp.

Commentaire de angy0503 le 24/01/2005 14:06:49

très intéressant dommage que tu n'aies pas mis les créations des tableaux .

Connaitrais-tu le moyen pour créer un tableau? J'ai trouvé un début de code mais ça marche une fois sur deux.

Commentaire de Evy1 le 07/02/2005 16:36:22

Chers tous,

Bonjour !

Quelqu'un peut dire comment faire pour activer la commande "Break Page" lorsque je travaille avec l'objet Word.Application en Background (avec Visible=False).

Merci !

Evy1

Commentaire de Patrick92 le 31/03/2005 17:05:20

Trés Bien,
  J'ai un petit problême :
  Quand j'ouvre en VB6 un document  de publipostage
  Word l'ouvre comme un document normal (propriété STATE=0) . Comment faire pour l'ouvrir en tant que document principal de publipostage

Merci

Patrick92

Commentaire de VirginieGE le 20/05/2005 11:36:47

Salut, j'ai essayé :

With Word_Application
   Selection.Find.ClearFormatting
   With Selection.Find
       .text = Texte
       .Replacement.text = ""
       .Forward = Vers_le_bas
       .Wrap = wdFindContinue
       .Format = False
       .MatchCase = False
       .MatchWholeWord = False
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
       If Not Prompt_utilisateur Then
           Word_Chercher_texte = .Execute
       End If
   End With
End With

Je bosse sur un projet en VB6 et reçois tjrs le même message : la méthode Replacement de l'objet Find a échoué... est-ce que qqn pourrait m'aider ?!?
Merci mille fois d'avance, commence à désespérer...

Commentaire de VirginieGE le 20/05/2005 11:39:28

Salut, j'ai essayé :

With Word_Application
   Selection.Find.ClearFormatting
   With Selection.Find
       .text = Texte
       .Replacement.text = ""
       .Forward = Vers_le_bas
       .Wrap = wdFindContinue
       .Format = False
       .MatchCase = False
       .MatchWholeWord = False
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
       If Not Prompt_utilisateur Then
           Word_Chercher_texte = .Execute
       End If
   End With
End With

Je bosse sur un projet en VB6 et reçois tjrs le même message : la méthode Replacement de l'objet Find a échoué... est-ce que qqn pourrait m'aider ?!?
Merci mille fois d'avance, commence à désespérer...

Commentaire de boisbaudry le 20/07/2005 10:03:00

Merci pour ce code.
Les commentaires c'est bien mais le code c'est mieux, et il n'a pas évolué depuis 2001 ! Pourtant les demandes semblent fortes et la doc à ce sujet difficile à trouver. Que se passe-t-il ? Jacques Prestreau est fatigué, en vacances ?

S'il fallait poser quelques questions :
- comment positionner les images (photos) que j'envoie dans Word ?
- comment donner une même dimension (en cm) à toutes ces images ?
- depuis Access, je ne puis lancer l'application qu'une seule fois (pb d'instance ?)

Merci encore pour celui, celle ou ceux qui pourront nous éclairer.

Commentaire de Wbbrcaal le 26/07/2005 16:32:25

Salut à tous,

mon problème ? c'est que jaimerais depuis Vb piloter word pour y inserer automatiquement des signets .
sans que je doive intervenir pour localiser l'endroit ou mettre ce signet
es-t-il possible de faire cela ?

Je sais c'est pas clair mais le but est d'insérer des signets en evitant ce laborieu travail de pointage

Mrerci pour vos réponse

Aldo

Commentaire de sssccc le 19/08/2005 11:46:40

Salut tout le monde
Ce code m'a été d' une grande utilité, sauf que la j ai un probleme
Alors:j'ai utilisé ce code dans mon pc au travail, mon programme marche a merveille
Sauf que quand j'ai voulu l'utiliser dans un autre pc, ca marche pas, le probléme c ke l'autre pc ne reconnait pas certains objet membres de Word comme par exemple :Wdgotobookmark
Je ne sais pas comment le faire marcher, en fait je trouve les objets dans "Examinateur de projet" mais quand j'execute y a un message d'erreur disant qu'il ne reconnait pas l'objet
pleaze j'ai besoin de réponse le plus to possible car je quitte le boulo aujourd'hui pour vacance et tout doit marcher aujord'hui

Commentaire de Dnx le 31/08/2005 15:55:46

Tout d'abord bravo pour ce tutocode :)

j'ai un petit souci :

comment dire a VB de tuer WORD dès qu'il a rencontré un problème d'ouverture de fichier.

En effet, j'ai quelques documents (aléatoire) sur 85.000 qui sont "corrompus/endommagés" et lorsque je fais word.application.open "nom_du_doc_endommagé"
il bloque complètement l'application!
j'ai d'abord pensé à mettre un timer pour lui dire si après 10 secondes VB n'a pas repris la main, il tue le processus de WORD mais ca ne marche pas car lorsque vb demande a word d'ouvrir le document endommagé, il reste complètement bloqué!

d'avance, merci.

Commentaire de Wbbrcaal le 31/08/2005 23:12:46

Bonsoir à tous,

juste pour vous dire que j'ai résolu mon problèmes de signets automatique.

je voyai trop grand au départ

Le tuto est formidable

Wbbr

Commentaire de cyfred le 15/09/2005 09:05:14

Merci beaucoup. Très complet, et bien utile !
Seul bémole, les commentaires.

En tt cas , merci à toi


Cyfred

Commentaire de chbani4 le 07/10/2005 14:20:15

Tout simplement parfait... Merci Je t'aurai bien payé un verre tellement ça m'a aidé...je suis en train de piloter Word à partir d'Excel pour editer des rapports... prise de tete :-(

Commentaire de kokise le 07/11/2005 13:15:26

Géant ton code trop cool je dirai même super. Bravo et Merci

Commentaire de theangelus le 07/01/2006 20:43:55

Hey Ben, justement j'en avai besoin. Ton code est absolument génial.
Encore Bravo à toi, tu le mérite.
Bonne continuation à toi, et à tous les autres développeur.
++

Commentaire de Little_Dev le 25/08/2006 11:22:13

Je n'ai q'une chose a dire "E.X.C.E.L.L.E.N.T"

Merci beaucoup pour ton code ;-)

@+

Commentaire de Wbbrcaal le 26/08/2006 10:47:40

Jacques,
merci pour ce tuto EXELLENT.

Je cherche un moyen d'effectuer une recherche une fonction permettant d'extraire des données du genre ( nom 20:10 )
1 extraire le nom
2 extraire le num. avant les deux points
3 extraire le num. aprés les deux points

les mettre dans des variables et établir un lien hypertext sur le nom complet nom 20:10 qui renvoie à une page.

merci de tout l'aide que l'on peut m'apporté

Wbbr

Commentaire de rorgmanche le 01/11/2006 20:15:35

Salut,
Super doc
Petite question subsidaire: est il possible de récupérer les évènements fermeture de Word, enregistrement du document courant, etc... dans VB ??

A+

Rorgmanche

Commentaire de merkhaled le 21/11/2006 12:17:15

bonjour,
est-il possible d'intégrer ton code dans une page php ?
merci

Commentaire de bepus le 14/02/2007 14:29:55

Slt!
balaise le code. J'apprécie

Commentaire de somehelpplease le 18/02/2007 23:17:36

Bonjour,
d'abord,merci beaucoup pour ce code!
en fait, j'aimerais bien savoir si qqn a eu le même problème que moi quand j'execute la fonction de test, word se lance et le résultat est là mais quand je ferme word l'application plante! et là je ne sais pas comment résoudre ce prob!

et merci d'avance pour votre aide!

Me

Commentaire de pedro_el_bruno le 21/02/2007 19:59:38

Salut,

J'étais en train de mettre au point ce genre de code pour un cas spécifique :
1. replacement de "<canevas>" dans un document template par fichier "canevas.doc"
2. replacement de "<tagx>" par valeurx

Le point 1. n'est pas repris dans tes fonctions ... juste une idée pour faire évoluer ton modèle ;-)

Voici mon code :

        objWord.Selection.HomeKey(Unit:=wdStory)
        '''''Selection.Find.ClearFormatting()
        With objWord
            '''''.Selection.Find.ClearFormatting()
            With .Selection.Find
                .ClearFormatting()
                .Text = FindWord
                .Replacement.Text = ""
                .Forward = True
                .Wrap = wdFindAsk
                .Format = False
                .MatchCase = False
                .MatchWholeWord = False
                .MatchWildcards = False
                .MatchSoundsLike = False
                .MatchAllWordForms = False
            End With
            .Selection.Find.Execute()
        End With

Voici mon problème: En DOTNET 1.0, solution de type "CONSOLE APPLICATION", quel que soit l'endroit où je place le statement "ClearFormatting()", VisualStudio me jette hors du debugging.
unhandeled exception de type System.NullReferenceException (object reference is not set to an instance of an object)

En macro excel, quand je pilote word, pas de problème, mais je n'ai pas de parenthèses après "ClearFormatting".  C'est Visual studio qui me les rajoute.
Toutes mes autres instructions word (open, saveAs, printout, ...) fonctionnent.

Une idée ?

(bravo pour la recherche et le travail de doocumentation)

Commentaire de didine003 le 04/04/2007 15:08:50

salut a vous tous c'est tres interissant ce code si quelqu'un peu m'envoye un petit exemple ZIP pour bien comprendre le truc car je vient de faire un programme d'agence de location de voiture et je trouve ca tres interissant je voudrai bien travaille sur word que crystal report et merci d'avance de toute membre de vbfrance et
bonne courage a tous mon email et didinefeu@hotmail.com

Commentaire de asimengo le 20/11/2007 07:19:39

Super, je vais juste commencer à le décortiquer ce code. Au vu des commentaires il doit être super interessant.

Mon projet est le suivant, créer un générateur d'état de type lettre depuis VB6, pour éditer les requetes à un seul enregistrement. Il s'agit un objet qu'on pourra intégrer à n'importe quel appli qui permette d'imprimer un doc word prédéfini en remplacant les signets par des valeurs de la BD.
Je travaille sur un logiciel pour la gestion des prestations affectées à un dossier, les opérations étant paramétrable, avec également un paramètre du genre "Chemin fichier Etat", j'ai une table qui fait les correspondances Nom Signet avec Nom d'un champ de la BD, après tout devient léger et facile. Pour les requêtes à plusieurs enregistrements on fait un état crystal report.
Voila, je pense que cette analyse pourra également aider bien d'autres.

Commentaire de phoenix14 le 30/11/2007 16:57:07 8/10

Super !
Presque tout ce qu'il me fallait :))
Par contre, si jamais quelqu'un savait comment modifier une "zone de texte", je suis preneur, j'ai tenté plein de truc sans résultat...:'(

Commentaire de asimengo le 02/12/2007 19:10:51

Je viens de faire une étude plus approfondie sur le sujet, pour mon idée d'utiliser word pour créer des états c impec avec impresion, visualisation, sauvegarde état depuis VB, au fait il suffit de faire les bonne declarations dim oDoc as Word.Document et chaque fois il sera facile de trouver les propriétés et méthodes qu'il faut avec la suggestion de VB.

il en ressort que ce code est peut-etre bien mais a quelque limite, il intereagit avec la version de word ouverte. Il faut plutot faire une classe et ouvrir sa propre session word, genre
Dim oWord As Word.Application
set oWord = new Word.Application
set oDoc=oWord.open(...)
le reste c rien que la POO, un peu d'aide sur la hiérarchie des objets et t'as pas forcement besoin à l'avance pour les propriétés et les méthodes les libellés parlent d'eux mêmes.

Commentaire de asimengo le 10/12/2007 05:46:53

voila j'ai uploader ma source sur le pilotage de word http://www.vbfrance.com/code.aspx?ID=44998

Commentaire de johan3240 le 06/07/2009 10:24:57

Bonjour,

Je voudrais le code source pour pouvoir créer, à partir de VBA Excel (d'une feuille ou d 'une macro peu importe), un tableau vierge, dans un document word, sans devoir parcourir un range ou des cellules d'un tableau excel.
Je veux qu'il soit vierge et pouvoir y mettre des variables d'une bdd access par la suite.

Donc pour faire simple, je veux pouvoir créer un tableau en lui définissant un nombre de colonnes et u nnombre de cellules sans devoir parcourir le tableur Excel!!!!!

Merci,

Commentaire de fredpro59 le 23/09/2009 09:56:42 9/10

Bonjour,

Très bien ce code ! Je l'ai enrichi avec la possibilité de créer une instance de document Word, donc ouvrir un modèle (.dot) sans risque d'écraser le fichier d'origine.

Public Sub Word_Instance_document(Nom_Document As Variant, Visible As Boolean)
Word_Création_Lien_OLE
With Word_Application
     .Visible = Visible
     .WindowState = wdWindowStateMaximize
     .Documents.Add Template:=Nom_Document
End With
End Sub

Bonne utilisation

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Piloter Word et Excel depuis ASP [ par Doc ] Bonjour, je cherche a piloter Word et Excel depuis une page ASP (creer des documents).N'y a-t-il pas une recette miracle ?Merci Service NT + Word OLE + Impression [ par Loïc ] J'ai créé un petit service en vb avec l'ActiveX fourni par microsoft dans la MSDN qui me permet de me connecter via OLE à WORD. Jusque là pas de probl Enregistrer le contenu d'un OLE [ par Yannick ] Salut,j'ouvre une document Word que je peux modifier dans un container OLE : comment puis-je sauvegarder ces modifications dans un fichier Word ?Quand !!Problème!! Lancement Office XP [ par SONY ] Ce petit programme marchait très bien avec Word97 et 2000, mais avec XP, il ouvre bien le fichier mais SANS MENU NI SANS BARRE D'OUTIL !!!Je pense que Impression d'une page en Word [ par anspauldou ] Salut J'ai de serieux probleme avec Word de Office 97. Chaque fois que je lance une impression j'ai le compagnon office qui apparait. Et cela ce produ Où sont déclarées les application OLE ? [ par robin ] Bonjour tout le monde !J'ai le bout de code suivant :Sub Main()Dim toto As ObjectOn Error Resume NextSet toto = GetObject(, "Word.Application")If Err. ole word appli [ par seblo ] Bonjour,J'ai quelques problèmes avec une application ole .Je travaille sur des documents word avec des formulaires de saisie.Une fois la saise faite , OLE Exécuter une macro Word à partir de VB [ par Luong ] Quelqu'un sait-il exécuter une macro Word (AutoOpen par exemple) depuis VB par OLE? ole automation C'EST LENT !!!!! [ par raff ] Je cherche à améliorer la vitesse d'exécution d'une automation de Word à partir de vb sur un formulaire. Je fais le early binding, comme le propose m Comment savoir kelle version d'office est installée sur un poste, par le code vb ? [ par Sephirot ] Mon probléme est que je veux piloter word par OLE Automation, or mes utilisateurs utilisent soit office 95 (word.basic) ou word 97++ (word.application


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,164 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales