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

10 réponses

1 2
Avatar
Anacoluthe
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
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

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


ActiveDocument.BookmarkS("Offre")

--
A+

Avatar
JMD
Bonjour.

"Utilisation incorrecte de la propriété".

Merci.


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


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


ActiveDocument.BookmarkS("Offre")

--
A+





Avatar
Corona
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
Hum, il me semble qu'un 'SIGNET' est un objet qui détermine une position
dans le document, objet qui est identifié dans la collection par son nom ou
son N° d'index. Mais il ne me semble pas que cela réponde à ma question, que
j'ai sans doute mal formulée.

Dans mon code VBA, une instruction select... me renvoie des valeurs. Je
souhaite "écrire" ces valeurs à un emplacement dans la page. Par exemple :

Code du Client : [Ici ma valeur rst!codeClient]

Mais dans quel objet renvoyer cette valeur ? Ne faut-il pas créer un champ
dans le document et ensuite affecter le résultat de la requête à ce champ ?
En VBA Excel, on ferait :

cells(Ligne, Colonne)=rst!Nomduchamp

Me suis-je mieux exprimé ?

Enore merci.



"JMD" a écrit dans le message de news:
ukm$
Bonjour.

"Utilisation incorrecte de la propriété".

Merci.


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


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


ActiveDocument.BookmarkS("Offre")

--
A+









Avatar
JMD
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
Corona
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
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
Corona
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























1 2