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
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!!!!!
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.
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...:'(
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.
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
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)
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!
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 ??
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.
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.
++
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 :-(
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é!
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
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
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.
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...
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...
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
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).
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
@+
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...
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.
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
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
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
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
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
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 ?
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
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
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
je voudrais seulement savoir comment faire pour copier une image jpeg ou bmp dans un fichier word exploitable.
Toi qui a l'air de metriser, j'espère que tu pourras m'aider.
Merci beaucoup pour le code qui m'a particulièrement aidé pour mon projet de stage. J'y ai rajouté des fonctions sur les tableaux, la tables de matières, des liens hypertexte etc.
Félicitations! mais j'aimerai piloter word à partir d'Excel: par exemple mettre en page un document avec des données provenant de contrôles sous Excel! Comment faire?
Juste un petit bug mais c'est plutot la faute de l'analyseur de syntaxe de vb6 :
Public Sub Word_Insère_Numéros_de_pages()
'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
cela donne l'erreur 462 : le serveur distant n'existe pas ou n'est pas dispo.
Pour provoquer le problème, j'appelle la fonction WORD_Test deux fois en fermant WORD entre les deux.
Sinon je trouve ce code extrèmement interessant quand on veut automatiser des rapports.
Est - ce qu'on peut utiliser ton programme avec asp 3.0 (cad du web) j'ai w2k, iis5, sql server.
Moi je cherche a mettre un pied de page a tout les documents telecharger depuis mon site, qui dira bla bla télécharger depuis le site ...
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
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,
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.