Rechercher : dans
Par :

[ACCESS/VB] Mettre un cartouche

Dernière réponse le 21 jui 2008 à 13:59:27 ciracus, le 18 jui 2008 à 10:21:10 
 Signaler ce message aux modérateurs

Bonjour,

Je suis débutante dans le langage vb et je suis actuellement en stage. Dans ce cadre, je fais
une petite base de donnée Access et je dois à l'aide d'un bouton faire des extractions de
certaines données vers Excel. Le problème est que mon tuteur souhaite qu'en haut de la feuille
Excel créée, il soit mis un cartouche avec par exemple : le nom de la personne qui a créé le fichier,
la date de création... Comment puis je coder cela? J'ai vraiment besoin d'aide!!!!

Merci beaucoup d'avance!

PS: Je vous joints le début de mon code:

Private Sub Extraire_Click()
On Error GoTo Err_Extraire_Click

Dim sql As String
Dim req As DAO.Recordset

sql = "SELECT table.* FROM table Where table!number <> 0 "

If Not Me.chk_champ1 Then
sql = sql & "And table.champ1 like '*" & Me.cmb_champ1 & "*' "
End If
If Not Me.chk_champ2 Then
sql = sql & "And table.champ2 like '*" & Me.cmb_champ2 & "*' "
End If
If Not Me.chk_champ3 Then
sql = sql & "And table.champ3 like '*" & Me.cmb_champ3 & "*' "
End If

sql = sql & ";"

'on créé la requête "NomRequete"
CurrentDb.CreateQueryDef "NomRequete", sql

'on exporte la requete "NomRequete" vers le fichier Excel
DoCmd.OutputTo acOutputQuery, "NomRequete", acFormatXLS, , True

'on libère (=supprimer) la requete "NomRequete"
DoCmd.DeleteObject acQuery, "NomRequete"

Exit_Extraire_Click:
Exit Sub

Err_Extraire_Click:
MsgBox Err.Description
DoCmd.DeleteObject acQuery, "NomRequete"
Resume Exit_Extraire_Click

End Sub


Encore merci d'avance.

Configuration: Windows XP
Internet Explorer 6.0
Access 2003

1

MrSlave, le 18 jui 2008 à 10:24:39

Pourquoi tu n'ajoute pas simplement un champ de texte ?

Par exemple quand une personne créer un fichier, elle insère son nom que tu met dans ta bdd et tu n'as plus qu'à le récupérer.
Et la date tu l'insère en auto dans ta base. MrSlave, l'esclave de ces demoiselles !

Répondre à MrSlave

2

ciracus, le 18 jui 2008 à 10:32:55

En fait, j'ai déjà dans mon formulaire des champs avec le nom et la date en auto, mais ce que je ne sais pas faire, c'est récupérer ces données et les mettre dans les premières lignes de la feuille Excel que je créé...
Actuellement, la première ligne contient les en-tête de la requete, et je voudrais que tout soit décallé plus bas et mettre dans les premières lignes le cartouche avec les données récupérées.

Suis-je assez claire?

Merci beaucoup de m'aider!

Répondre à ciracus

3

MrSlave, le 18 jui 2008 à 10:36:14

Euh .... c'est un plaisir de t'aider.
Mais en Excel je n'y connais rien.

Pour vb et access, j'ai eu des cours avec Polux (^^), mais pas pour Excel, donc je vais avoir du mal à t'aider. :S

Je vais voir si je trouve 2/3 trucs. MrSlave, l'esclave de ces demoiselles !

Répondre à MrSlave

4

ciracus, le 18 jui 2008 à 10:47:33

Merci!

En réalité, je ne sais pas très bien s'il s'agit d'un problème Excel, dans la mesure où mon code doit etre dans access pour que la cartouche se remplisse et se place automatiquement en haut du fichier Excel.
Je pense qu'il doit falloir mettre quelque chose dans mon Sub "Extraire"comme :

Me.Nom.Copy
Range("A1").Select
"Nom: " & ActiveSheet.Paste
Application.CutCopyMode = False

Mais je ne sais vraiment pas comment m'y prendre...

Répondre à ciracus

5

MrSlave, le 18 jui 2008 à 11:05:08

Range("A1").Select
Elle sert à quoi cette ligne ? MrSlave, l'esclave de ces demoiselles !

Répondre à MrSlave

6

ciracus, le 18 jui 2008 à 11:25:59

Je crois que ça veut dire : "sélectionner la case A1"
Vu que dans ma case A1 actuellement j'ai "champ1", je pourrais faire:

'Sélectionner la case A1
'Couper le contenu
'coller en A3
'Mettre en A1 la valeur de la cmb de mon formulaire

Mais le problème est qu'il faut alors décaller le contenu de la case A3.....

Donc, le mieux serait d'insérer une ligne?
En mettant qq chose du genre :

' insérer une ligne entre la 0 et la 1 de la Feuille NomFeuille
NomObjetWorkBook.WorkSheet("NomFeuille").Rows("1:1").Select
Selection.Insert Shift:=xlDown


Problème : je ne connais pas le nom de la feuille que je créé...
Et je ne sais pas non plus comment mettre en A1 le contenu de ma combox "cmb_Nom" de mon formulaire...

:S

Répondre à ciracus

7

MrSlave, le 18 jui 2008 à 11:31:17

Pour l'insérer dans le combo, tu fais : Form.Combo.AddItem Item

Sinon pour décaler, tu peux faire comme ça (enfin je pense ^^) :
http://office.microsoft.com/fr-fr/excel/HP052092081036.aspx MrSlave, l'esclave de ces demoiselles !

Répondre à MrSlave

8

ciracus, le 18 jui 2008 à 12:13:04

Nous nous sommes pas bien compris : je ne souhaite pas insérer une valeur dans le combo, mais je souhaite récupérer la valeur mise dans la combox du formulaire Access pour la mettre dans la première case du fichier Excel que je créé!

Sinon, c'est compliqué de décaller car je dois d'abord récupérer le nombre de lignes à décaller.... Il me parait donc plus simple de faire une insertion d'une nouvelle ligne en haut! Mais à voir...

Je commence à avoir des doutes sur le fait qu'il soit possible de transformer un fichier Excel lors de sa création dans access...

Répondre à ciracus

9

MrSlave, le 18 jui 2008 à 14:12:37

A vrai dire, je n'en ai aucune idée.

Sinon pour récupérer la valeur du combo, tu fais un simple tavaleur = Form.Combo.text MrSlave, l'esclave de ces demoiselles !

Répondre à MrSlave

10

ciracus, le 18 jui 2008 à 14:13:46

Je pense avoir trouvé quelque chose d'interessant !!!! Mais je ne peux pas le tester car quand j'essaye le programme s'arrete tout de suite "Private Sub Extraire_Click()" est surligné en jaune, et il s'affiche : "erreur de compilation : Type défini par l'utilisateur non défini " Je n'ai aucune idée sur ce que ça veut dire... Pourriez vous encore m'aider s'il vous plaît????

Voici le début de ce que j'essaye:

Private Sub Extraire_Click()
On Error GoTo Err_Extraire_Click

Dim xlApp As Excel.Application
Dim xlSheet As Excel.Worksheet
Dim xlBook As Excel.Workbook
Dim I As Long, J As Long
Dim t0 As Long, t1 As Long

Dim rec As Recordset

MsgBox ("toto1") //Mais il ne va pas jusque là...

Dim sql As String


Merci d'avance!

Répondre à ciracus

11

MrSlave, le 18 jui 2008 à 14:23:05

Tiens, essaye ça :

http://access.developpez.com/faq/?page=Debug#ErrorType MrSlave, l'esclave de ces demoiselles !

Répondre à MrSlave

12

ciracus, le 18 jui 2008 à 14:45:31

Je sens que je me rapproche de la solution! J'ai trouvé la solution au petit bug précédent : une histoire de bibliothèque pas à jour. Mais j'en ai un nouveau!
Je voudrais remplacer fichier.saveAs "C://....."
Par une demande de où enregistrer le fichier et quel nom lui donner (ce qui se faisait automatiquement avant avec la fonction OutputTo...)

Une fois que j'aurai réussi à faire ça , je pourrai voir si j'ai réussi à faire ce que je voulais!!

Je chercher, je cherche...

Répondre à ciracus

13

MrSlave, le 18 jui 2008 à 14:47:33

Euh .... est ce que ça peut t'aider ça :

http://gilmir.developpez.com/tutoriels-vb6/tutoriel9/

? MrSlave, l'esclave de ces demoiselles !

Répondre à MrSlave

14

ciracus, le 18 jui 2008 à 15:00:05

Je n'ai pas trouvé la solution sur la page que vous m'aviez indiqué, donc je cherche encore, mais en mettant un chemin spécifique : fichier.saveAs "C:\....\MonFichier", j'ai vu que le code fonctionnait!! Donc il ne me reste qu'à trouver le code pour remplacer ce chemin automatique!

Répondre à ciracus

15

ciracus, le 18 jui 2008 à 15:47:00

Ah, j'ai trouvé le code, il s'agit de :
Do
fName = Application.GetSaveAsFilename
Loop Until fName <> False
xlBook.SaveAs Filename:=fName

Le problème est que "GetSaveAsFilename" n'est pas reconnu... (Est ce encore un problème de librairie et si oui, quelle librairie installer pour l'avoir?) Je n'ai encore rien réussi à trouver à ce sujet...

Répondre à ciracus

16

MrSlave, le 18 jui 2008 à 15:49:37

Tu as quoi comme erreur ? MrSlave, l'esclave de ces demoiselles !

Répondre à MrSlave

17

ciracus, le 18 jui 2008 à 15:58:40

J'ai "erreur de compilation : membre de méthode ou de données introuvable" et GetSaveAsFilename qui est surligné
et quand je tape Application. la saisie auto ne me propose pas GetSave....
Donc je suppose qu'il me faut ajouter cette application, mais je n'arrive pas à la trouver et je ne trouve pas non plus sur le net des conseils sur ce sujet....

Répondre à ciracus

18

MrSlave, le 18 jui 2008 à 16:02:23

Tu l'as trouvé où GetSave... ?

Ça ne serait pas plutôt une méthode à implémenter ? MrSlave, l'esclave de ces demoiselles !

Répondre à MrSlave

19

ciracus, le 18 jui 2008 à 16:06:20

Excusez moi, mais qu'est ce qu'une méthode à implémenter?
Mais cette méthode est connue dans l'aide de visual basic "Cette méthode affiche la boîte de dialogue standard Enregistrer sous et lit un nom de fichier tapé par l'utilisateur sans réellement enregistrer les fichiers."

Répondre à ciracus

20

MrSlave, le 18 jui 2008 à 16:11:04

Quand je parle de méthodes à implémenter, je parle de méthode que tu créer toi même. ;)

Sinon, bah je ne sais pas trop.
Ici il y a quelques précisions qui peuvent être utiles :
http://www.developpez.net/forums/archive/index.php/t-226369.­html MrSlave, l'esclave de ces demoiselles !

Répondre à MrSlave

21

ciracus, le 18 jui 2008 à 16:20:42

Oui, effectivement, c'est bien le bon code (confirmé sur le site que vous m'avez envoyé) et il n'y a pas de méthode à implémenter....
Mais c'est vraiment étrange et agacant que sur tous les forum et sites sur lesquels je suis allé, tout le monde a cette application du premier coup sans de problèmes de téléchargement de librairie et que moi je ne l'ai pas...

Répondre à ciracus

22

 ciracus, le 21 jui 2008 à 13:59:27

Et voici donc la solution, ça peut toujours servir...

Rappel: Il s'agit de créer un fichier excel avec les résultats d'une requete qui comporte en haut un cartouche avec le nom, la date...

Private Sub Extraire_Click()
On Error GoTo Err_Extraire_Click

Dim xlApp As Excel.Application
Dim xlSheet As Excel.Worksheet
Dim xlBook As Excel.Workbook
Dim I As Long, J As Long
Dim t0 As Long, t1 As Long
Dim rec As Recordset
Dim sql As String

MsgBox ("début de la création")


sql = "SELECT table.* FROM table Where table!number <> 0 "

If Not Me.chk_champ1 Then
sql = sql & "And table.champ1 like '*" & Me.cmb_champ1 & "*' "
End If
If Not Me.chk_champ2 Then
sql = sql & "And table.champ2 like '*" & Me.cmb_champ2 & "*' "
End If
If Not Me.chk_champ3 Then
sql = sql & "And table.champ3 like '*" & Me.cmb_champ3 & "*' "
End If

sql = sql & ";"


'on créé la requête rec
Set rec = CurrentDb.OpenRecordset(sql, dbOpenSnapshot)

'on exporte la requete rec vers un nouveau fichier Excel

'Initialisations
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add

'Ajouter une feuille de calcul
Set xlSheet = xlBook.Worksheets.Add
xlSheet.Name = "Tutoriel2"

' le titre
xlSheet.Cells(1, 4) = "EXTRACTION DEPUIS LA BASE"
For J = 1 To 7
With xlSheet.Cells(1, J)
.Interior.ColorIndex = 8 (on met du bleu clair)
.Interior.Pattern = xlSolid
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlEdgeBottom).ColorIndex = xlAutomatic
.HorizontalAlignment = xlCenter
End With
Next J

' écriture dans la cellule de ligne 2 et de colonne 1
xlSheet.Cells(2, 1) = "Nom :"
xlSheet.Cells(2, 2) = Me.txt_Nom.Value
' écriture dans la cellule de ligne 3 et de colonne 1
xlSheet.Cells(3, 1) = "Date :"
xlSheet.Cells(3, 2) = Date
' écriture dans la cellule de ligne 4 et de colonne 1
xlSheet.Cells(4, 1) = "Commentaire :"
xlSheet.Cells(4, 2) = Me.txt_commentaire.Value

' Nous appliquons des enrichissements de format aux cellules de titre
For I = 2 To 4
For J = 1 To 2
With xlSheet.Cells(I, J)
.Interior.ColorIndex = 6 (on met du jaune)
.Interior.Pattern = xlSolid
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlEdgeBottom).ColorIndex = xlAutomatic
.HorizontalAlignment = xlCenter
End With
Next J
Next I


' les entetes
' .Fields(Index).Name renvoie le nom du champ
For J = 0 To rec.Fields.Count - 1
xlSheet.Cells(5, J + 1) = rec.Fields(J).Name
' Nous appliquons des enrichissements de format aux cellules d'en tete
With xlSheet.Cells(5, J + 1)
.Interior.ColorIndex = 15 (on met du gris)
.Interior.Pattern = xlSolid
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlEdgeBottom).ColorIndex = xlAutomatic
.HorizontalAlignment = xlCenter
End With
Next J

' recopie des données à partir de la ligne 3
I = 6
Do While Not rec.EOF
For J = 0 To rec.Fields.Count - 1
' .Fields(Index).Type renvoie le type du champ
' si c'est un Texte (dbText) nous insérons "'" pour
' qu'il soit reconnu par Excel comme du Texte
If rec.Fields(J).Type = dbText Then
xlSheet.Cells(I, J + 1) = "'" & rec.Fields(J)
Else
xlSheet.Cells(I, J + 1) = rec.Fields(J)
End If
Next J
I = I + 1
rec.MoveNext
Loop


'enregistrement du fichier (on ouvre une boite windows "enregistrer sous" et il faut taper un nom du type .xls)
Do
fName = xlApp.GetSaveAsFilename
Loop Until fName <> False
xlBook.SaveAs Filename:=fName

MsgBox ("Le fichier a été créé avec succès!")

' code de fermeture
xlApp.Quit
rec.Close

'libération des objets
Set rec = Nothing
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing


Exit_Extraire_Click:
Exit Sub

Err_Extraire_Click:
MsgBox Err.Description
DoCmd.DeleteObject acQuery, "NomRequete"
Resume Exit_Extraire_Click

End Sub


Et voilà! Merci beaucoup à MrSlave et à lermite222 (pour la fonction GetSaveAsFilename)

Répondre à ciracus
Collection CommentÇaMarche.net