Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/01/2011, 10h28   #1
Invité de passage
 
Seba A
Inscription : janvier 2011
Messages : 4
Détails du profil
Informations personnelles :
Nom : Seba A

Informations forums :
Inscription : janvier 2011
Messages : 4
Points : 0
Points : 0
Par défaut Access vers Word problème signet (vba)

Bonjour, je suis nouveau ici. Je me présente, je m'appelle Seb.


J'ai fait un module qui me permet de copier les champs de ma bd inventaire dans un document word. Le problème est qu'il créer bien le fichier word, il me l'affiche mais cependant les donnée sont regroupées par type et j'ai beau essayer par d'autre moyen je n'y arrives pas.

Exemple de résultat actuel

Objet:
GSM
SIM Card
Memory Card


Appartient
Patrice g
Bruno
Patrice g


Marque :
NOKIA
ORANGE
MicroSD

etc....

J'aimerais regroupé par enregistrement et avoir le résultat suivant.
Ex: GSM
Patrice g
Nokia

SIM CARD
Bruno
ORANGE

etc...

Mon code est le suivant:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Sub MergeF()
'Déclaration des variables
 
Dim db As DAO.Database
Dim query As DAO.QueryDef
Dim rs As DAO.Recordset
Dim oAppli
Dim sql As String
sql = "SELECT * FROM inventaire "
 
Dim oDoc
'Affectation des objets d'accès aux données
Set db = Application.CurrentDb
Set rs = db.OpenRecordset(sql)
 
Set oAppli = CreateObject("Word.Application")
Set oDoc = oAppli.Documents.Open("C:\projet\pvmodele.dotm", False, True, False)
oAppli.Visible = True
'Boucle pour la récupération de données
While Not rs.EOF
oDoc.SaveAs ("C:\projet\test.doc")
'oDoc.Bookmarks("eobjet").Range.InsertBefore "Objet:" & vbCrLf
oDoc.Bookmarks("objet").Range.Text = rs.Fields("item") & vbCrLf
oDoc.Bookmarks("appartient").Range.Text = rs.Fields("Identité") & vbCrLf
oDoc.Bookmarks("marque").Range.Text = rs.Fields("Marque") & vbCrLf
oDoc.Bookmarks("modele").Range.Text = rs.Fields("modele") & vbCrLf
oDoc.Bookmarks("imei").Range.Text = rs.Fields("Numsérie") & vbCrLf
oDoc.Bookmarks("pin").Range.Text = rs.Fields("codepin") & vbCrLf
oDoc.Bookmarks("numappel").Range.Text = rs.Fields("numérotelepho") & vbCrLf
oDoc.Bookmarks("remarque").Range.Text = rs.Fields("Commentaire OUT") & vbCrLf
oDoc.Save
rs.MoveNext
Wend
MsgBox "Le fichier WORD est crée !"
'Libération des objets
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
End Sub
Seba13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 15h37   #2
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Je pense qu'en modifiant votre chaîne SQL qui sert de source au formulaire,en y intégrant un ordre, cela devrait pouvoir se faire.

exemple :

Code :
sql = "SELECT * FROM inventaire ORDER BY inventaire.[Objet]"
Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 10h25   #3
Invité régulier
 
Inscription : avril 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 6
Points : 7
Points : 7
Bonjour,

Pensez-vous possible de re-prendre le même code mais pour qu'il génère uniquement les données en cours de lecture ?

(Nous gérons nos client via bd access, j'aimerais pouvoir générer un bon de commande via access, j'ai un model world avec des signets)

Merci beaucoup d'avance
Bonne après-midi
Mamy360 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 11h37   #4
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Bonjour.

Avec ce code, tu crées un seul document. C'est bien ce que tu veux faire ou plutôt un document par enregistrement?

Si c'est un seul document, le modèle ressemble à quoi et tu veux obtenir quoi?

Cordialement,

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 12h41   #5
Invité régulier
 
Inscription : avril 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 6
Points : 7
Points : 7
Merci pour ta réponse pgz.

En faite on a un basse de donnée avec "Société, Adresse et Nom ainsi que d'autre informations propre au client".

Mon idée et ça :
Pouvoir via access créer un document Word avec les informations "Adresse etc.." de nos clients. Pour pouvoir leurs envoyer une commande par exemple.

Cela serait un seul document. J'ai un model Word dans le quelle j'ai fabriqué les signets requis.

J'aimerais seulement pouvoir importer les informations d'une seul société. Je pense qu'il manque seulement un petit bout de code pour dire = importer les informations de l'ID (enregistrement) en cours.

Je sais pas si vous avez compris ma demande j'essaie de m'exprimer le plus clairement possible

Merci beaucoup
Christophe
Mamy360 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 15h17   #6
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Bonjour.

Citation:
Envoyé par Mamy360 Voir le message
Merci pour ta réponse pgz.
En fait je m'adressais à Seba13.

En ce qui te concerne, je ne vois pas trop la difficulté. Si tu as un formulaire clients ouvert et que tu veux réaliser un document Word pour le client présenté par le formulaire, tu ouvres le modèle Word, copies les valeurs courantes des contrôles en utilisant les signets, puis tu enregistres ou imprimes suivant ton besoin.

Bon dimanche,

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 16h03   #7
Invité régulier
 
Inscription : avril 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 6
Points : 7
Points : 7
J'ai plu de 35 champs à copier.. Mais je vais essayer de trouver mon astuce tous seul.

Merci quand même.

Le post remonte à Janvier 2011
Mamy360 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 17h00   #8
Invité régulier
 
Inscription : avril 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 6
Points : 7
Points : 7
J'ai trouvé par moi-même. Voici le code pour les intéressés

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Dim oApp As Object
Set oApp = CreateObject("Word.Application")
With oApp
 
.Visible = True
 
.Documents.Add Template:="C:\Document.dot"
.ActiveDocument.Bookmarks("tbl1").Select
.Selection.Text = tbl1
.ActiveDocument.Bookmarks("tbl2").Select
.Selection.Text = tbl2
.ActiveDocument.Bookmarks("tbl3").Select
.Selection.Text = tbl3
.ActiveDocument.Bookmarks("tbl4").Select
.Selection.Text = tbl4
.ActiveDocument.Bookmarks("tbl5").Select
.Selection.Text = tbl5
.ActiveDocument.Bookmarks("tbl6").Select
.Selection.Text = tbl6
 
.WindowState = 1
 
End With
End Sub
Merci bonne fin de journée
Christophe
Mamy360 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 17h16   #9
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Hello.

J'avais pas vu que tu avais repêché une vieille discussion. Ce n'est pas toujours très bon...

Tu peux améliorer la rédaction en "early binding" et en évitant les sélections qui ralentissent l'exécution :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub mamy()
Dim oApp As Word.Application, oDoc As Word.document
 
Set oApp = New Word.Application
oApp.Visible = True
 
Set oDoc = oApp.Documents.Add("C:\Document.dot")
oDoc.Bookmarks("tbl1").Range.Text = tbl1
'...
 
Set oDoc = Nothing
Set oApp = Nothing
End Sub
Cordialement,

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 13h00   #10
Invité régulier
 
Inscription : avril 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 6
Points : 7
Points : 7
Hello,

Merci beaucoup pour ton aide PGZ.
Je suis désolé, mais je reviens avec normalement ma dernière question.

Quand j'exécute ma commande le script ce lance correctement, mais si une de mes cases est vide ça bloque le module et il me renvoie une erreur indiquant que la casse et Null!! Si le script finierait la feuille il y aurait pas de problème mais il s'arrete la ou la casse est vide

Comment puis-je résoudre mon problème ?
Par exemple je posede une case "E-Mail" cependant certain entreprise ne possede pas tous une email.

J'éspère avoir été assez clair, en vous remerciant je vous souhait un bon après-midi
Mamy360 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 14h24   #11
Invité régulier
 
Inscription : avril 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 6
Points : 7
Points : 7
Bon bin j'ai trouvé une solution

Pas très jolie mais ca fonctionne :

Code :
1
2
3
4
5
If IsNull([Champ1]) Then
oDoc.Bookmarks("text1").Range.Text = ""
Else
oDoc.Bookmarks("text1").Range.Text = Champ1
End If
Voilà

Bonne journée
Mamy360 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h58.


 
 
 
 
Partenaires

Hébergement Web