Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Utiliser une variable de Recordset

14 réponses
Avatar
JMD
Bonjour.

Dans une procédure VBA, je récupère les valeurs dans une table SQL Server
via les méthodes OpenDataBase et OpenRecordSet.

Comment ensuite renvoyer ces valeurs dans le document Word, à des
emplacements précis ? Je suppose qu'il faut insérer des champs, mais
lesquels et comment les adresser via VBA ?

Merci à vous !

JMD

4 réponses

1 2
Avatar
JMD
Yes. Je vais donc.

Merci infiniment pour la syntaxe.

A bientôt.


"Corona" a écrit dans le message de news:

Bonjour JMD,
Si un utilisateur supprime un signet, un tableau ou tout autre objet de
référence il est clair que l'on ne peux plus rien faire.
A partir du moment où l'on utilise du code VBA il me semble
effectivement indispensable de le faire au départ d'un modèle.
Philippe

"JMD" a écrit dans le message de news:
%
Merci.
Cette procédure évite au code de planter, mais n'interdit pas à
l'utlisateur de détruire le signet, si j'ai bien lu le code.

Je vais donc créer une page comme un modèle (.dot) qui contiendra les
signets, et à partir duquel modèle on fera des .doc, enregistrés sous
rst!NumeroOffre.doc. Pour chaque nouveau document, on repartira du .dot,
qui de fait contiendra toujours les signets.

Cela te semble correct ?

A +

"Corona" a écrit dans le message de news:

Bonjour,
Voici une routine écrite par Guy Moncomble qui résoud ce problème.
C'est cette méthode que j'utilise.
Philippe

Public Sub MajSignet(NomSignet As String, TexteSignet As String)
' © Guy Moncomble 2001
Dim Début As Long
Application.ScreenUpdating = False
With ActiveDocument
If .Bookmarks.Exists(NomSignet) Then
Début = .Bookmarks(NomSignet).Range.Start
.Bookmarks(NomSignet).Range.Text = TexteSignet
.Bookmarks.Add Name:=NomSignet, Range:=.Range(Début, Début +
Len(TexteSignet))
End If
End With
Application.ScreenUpdating = True
End Sub


"JMD" a écrit dans le message de news:

Merci Philippe.

ActiveDocument.Bookmarks("Offre").Range.Text = "TOTO"
fonctionne parfaitement.

Par contre, une fois que le code a écrit "TOTO" dans la page, à
l'emplacement du signet en question, si on supprime TOTO on supprime
aussi le signet et le code est mort, l'objet n'existe plus. Bigre....

A +


"Corona" a écrit dans le message de news:

Bonjour JMD,
ActiveDocument.Bookmarks("Offre").Range.Text = laVariable
Philippe

"JMD" a écrit dans le message de news:
en$
Merci d'avoir pris le temps de répondre.

J'ai donc créé un signet dans la feuille, nommé Offre.
Ensuite, dans le code, j'ai fais :

Set ActiveDocument.Bookmark("Offre") = rstlct!Codeclient

Mais j'obteins "Propriété ou méthode non gérée par cet objet".

Donc, j'ai pas compris. Auriez-vous l'amabilité d'être plus précis ?

Merci encore,

JMD

"Anacoluthe" a écrit dans le message
de news:
Bonjour !

'JMD' nous a écrit ...
Dans une procédure VBA, je récupère les valeurs dans une table SQL
Server via les méthodes OpenDataBase et OpenRecordSet.
Comment ensuite renvoyer ces valeurs dans le document Word, à des
emplacements précis ? Je suppose qu'il faut insérer des champs,
mais lesquels et comment les adresser via VBA ?


Word + une base de données ça fait publipostage* !! Votre document
principal
contient des champs de fusion. La procédure de fusion* dans un
document
de fusion vous évite en général tout le travail de OpenRecordset et
tous
les Move et Fields pour accéder aux données : Word sait faire ça
tout seul
avec quelques instructions simples en vba, requête SQL comprise.

Si vous tenez malgré tout à accéder vous-même à votre base, aux
enregistrements
soumis à requête, et à tous les champs de ces enregistrements, la
procédure
générale pour insérer du texte à une place précise d'un document est
d'y
définir à cet endroit un signet* (objet Bookmark en vba Word).

Anacoluthe
« Avant d'employer un beau mot, faites-lui une place. »
- Joseph JOUBERT



























Avatar
JMD
Bonjour à nouveau.

Je rame un peu...

J'ai ce code dans ma page ASP :

<SCRIPT LANGUAGE=VBScript>
Dim objWord
Sub Btn1_onclick()

LeModele= "serveur-faxintranetmodelesFax-anglais.dot"
call Opendoc (LeModele)
End Sub

Sub OpenDoc(strLocation)

Set objWord = CreateObject("Word.Application")
objWord.Visible = true

objWord.Documents.Add strLocation
End Sub

</SCRIPT>

A l'exécution de ce code, Word démarre et crée un nouveau document basé sur
le modèle (.dot) Fax-anglais.
Jusque là, c'est bon.

Par contre, je dois ensuite exécuter du code VBA dans Word. Or, bien
entendu, si je mets ce code dans le .dot, il n'est pas accessible puisque un
nouveau document (.doc) a été créé et que c'est sur ce nouveau document
qu'on travaille, et pas sur le modèle. Je tourne en rond.

Merci d'avance !


"JMD" a écrit dans le message de news:

Yes. Je vais donc.

Merci infiniment pour la syntaxe.

A bientôt.


"Corona" a écrit dans le message de news:

Bonjour JMD,
Si un utilisateur supprime un signet, un tableau ou tout autre objet
de référence il est clair que l'on ne peux plus rien faire.
A partir du moment où l'on utilise du code VBA il me semble
effectivement indispensable de le faire au départ d'un modèle.
Philippe

"JMD" a écrit dans le message de news:
%
Merci.
Cette procédure évite au code de planter, mais n'interdit pas à
l'utlisateur de détruire le signet, si j'ai bien lu le code.

Je vais donc créer une page comme un modèle (.dot) qui contiendra les
signets, et à partir duquel modèle on fera des .doc, enregistrés sous
rst!NumeroOffre.doc. Pour chaque nouveau document, on repartira du .dot,
qui de fait contiendra toujours les signets.

Cela te semble correct ?

A +

"Corona" a écrit dans le message de news:

Bonjour,
Voici une routine écrite par Guy Moncomble qui résoud ce problème.
C'est cette méthode que j'utilise.
Philippe

Public Sub MajSignet(NomSignet As String, TexteSignet As String)
' © Guy Moncomble 2001
Dim Début As Long
Application.ScreenUpdating = False
With ActiveDocument
If .Bookmarks.Exists(NomSignet) Then
Début = .Bookmarks(NomSignet).Range.Start
.Bookmarks(NomSignet).Range.Text = TexteSignet
.Bookmarks.Add Name:=NomSignet, Range:=.Range(Début, Début +
Len(TexteSignet))
End If
End With
Application.ScreenUpdating = True
End Sub


"JMD" a écrit dans le message de news:

Merci Philippe.

ActiveDocument.Bookmarks("Offre").Range.Text = "TOTO"
fonctionne parfaitement.

Par contre, une fois que le code a écrit "TOTO" dans la page, à
l'emplacement du signet en question, si on supprime TOTO on supprime
aussi le signet et le code est mort, l'objet n'existe plus. Bigre....

A +


"Corona" a écrit dans le message de news:

Bonjour JMD,
ActiveDocument.Bookmarks("Offre").Range.Text = laVariable
Philippe

"JMD" a écrit dans le message de news:
en$
Merci d'avoir pris le temps de répondre.

J'ai donc créé un signet dans la feuille, nommé Offre.
Ensuite, dans le code, j'ai fais :

Set ActiveDocument.Bookmark("Offre") = rstlct!Codeclient

Mais j'obteins "Propriété ou méthode non gérée par cet objet".

Donc, j'ai pas compris. Auriez-vous l'amabilité d'être plus précis ?

Merci encore,

JMD

"Anacoluthe" a écrit dans le message
de news:
Bonjour !

'JMD' nous a écrit ...
Dans une procédure VBA, je récupère les valeurs dans une table SQL
Server via les méthodes OpenDataBase et OpenRecordSet.
Comment ensuite renvoyer ces valeurs dans le document Word, à des
emplacements précis ? Je suppose qu'il faut insérer des champs,
mais lesquels et comment les adresser via VBA ?


Word + une base de données ça fait publipostage* !! Votre document
principal
contient des champs de fusion. La procédure de fusion* dans un
document
de fusion vous évite en général tout le travail de OpenRecordset et
tous
les Move et Fields pour accéder aux données : Word sait faire ça
tout seul
avec quelques instructions simples en vba, requête SQL comprise.

Si vous tenez malgré tout à accéder vous-même à votre base, aux
enregistrements
soumis à requête, et à tous les champs de ces enregistrements, la
procédure
générale pour insérer du texte à une place précise d'un document
est d'y
définir à cet endroit un signet* (objet Bookmark en vba Word).

Anacoluthe
« Avant d'employer un beau mot, faites-lui une place. »
- Joseph JOUBERT































Avatar
Geo

Bonjour à nouveau.

Je rame un peu...


[... couic]

A l'exécution de ce code, Word démarre et crée un nouveau document basé sur le modèle
(.dot) Fax-anglais.
Jusque là, c'est bon.

Par contre, je dois ensuite exécuter du code VBA dans Word. Or, bien entendu, si je
mets ce code dans le .dot, il n'est pas accessible puisque un nouveau document (.doc) a
été créé et que c'est sur ce nouveau document qu'on travaille, et pas sur le modèle. Je
tourne en rond.


Si, normalement les macros des modèles sont disponibles.
mais peut-être que le vbScript ne les connaît pas.

--
A+

Avatar
JMD
Bonjour.

En effet, j'avais mal placé le code.

Merci.


"Geo" a écrit dans le message de news:


Bonjour à nouveau.

Je rame un peu...


[... couic]

A l'exécution de ce code, Word démarre et crée un nouveau document basé
sur le modèle (.dot) Fax-anglais.
Jusque là, c'est bon.

Par contre, je dois ensuite exécuter du code VBA dans Word. Or, bien
entendu, si je mets ce code dans le .dot, il n'est pas accessible puisque
un nouveau document (.doc) a été créé et que c'est sur ce nouveau
document qu'on travaille, et pas sur le modèle. Je tourne en rond.


Si, normalement les macros des modèles sont disponibles.
mais peut-être que le vbScript ne les connaît pas.

--
A+





1 2