Sélectionner une zone d'une table Access

Signaler
Messages postés
2
Date d'inscription
lundi 28 juin 2004
Statut
Membre
Dernière intervention
29 juin 2004
-
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
-
Bonjour,
Voici mon problème:
j'ai une table Access contenant plus de 500000 enregistrements ayant chacun une date associée.
Je veux enregistrer chaque enregistrement de cette table dans une feuille excel ayant comme nom la date de l'enregistrment.

6 réponses

Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
6
attache ton fichier excel comme si c'était une table normal
puis tu faite ta requête sql

currentdb.execute("insert into Excel select * from table where format([date],'yyyy-mm-dd') >= #" & jour1 & "# and format([date],'yyyy-mm-dd') <= #" & jour2 & "#")
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
Bonsoir, un tit ex pour créer un fichier excel avec des feuilles du nom que tu veux :

' dans projet/références......... Microsoft Excel x.x Object Library

Private Sub Command1_Click()
Dim AppExcel As Excel.Application
Dim ClasseurExcel As Excel.Workbook
Dim FeuilleExcel As Excel.Worksheet
Dim FichierXls As String

FichierXls = "c:\toto.xls"

' si le claseur existe on le supprime
If Dir(FichierXls) <> "" Then Kill FichierXls

' Chargement de l'application Excel
On Error Resume Next

Set AppExcel = GetObject(, "Excel.Application") ' si obj excel déjà chargé

If Err.Number <> 0 Then
Set AppExcel = CreateObject("Excel.Application") ' sinon création
End If

Err.Clear

On Error GoTo 0

' création classeur excel + sauvegarde
AppExcel.Workbooks.Add
' là, on crée les feuilles du classeur : à la place de "toto1" tu peux faire une requete qui liste tes dates et intégrer les 2 lignes qui suivent dans une boucle qui créera des feuilles avec tes dates comme nom
AppExcel.ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "toto1"
'là, tu sauvegardes ton classeur
AppExcel.ActiveWorkbook.SaveAs FileName:=FichierXls, _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

AppExcel.Quit

' RéOuverture du classeur Excel créé
Set ClasseurExcel = AppExcel.Workbooks.Open(FichierXls)

' tu fais tes requetes par date et, à la place de "toto1" tu sélectionnes ta feuille suivant la date et tu remplis tes feuilles.
' remplissage de qques cellules for example
With ClasseurExcel.Sheets("toto1")
' le format, c cells(ligne,colonne)
.Cells(1, 1) = 100
.Cells(1, 2) = 200
.Cells(1, 3) = 300
.Cells(1, 4) = 400
.Cells(1, 5) = 500

End With

ClasseurExcel.Save
ClasseurExcel.Close
AppExcel.Quit

Set FeuilleExcel = Nothing
Set ClasseurExcel = Nothing
Set AppExcel = Nothing

End Sub

Bon, si tu as besoin de précisions, je reste à l'écoute.

Cordialement

CanisLupus
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
6
ce que j'avasi compris de la question, tu avais un table ou des données et tu voulais aller chercher des données qui se trouver dans les données que tu as

select * from table where champ1 in ('a','b','c','d','e', ....)

ou

select * from table where champ1 in (select intervale from table2)

voici 2 façon pour avoir des données qui se trouve dasn un intervale

aussi tu peut y mettre "not in" pour ceux qui se trouve pas dans l,intervale
Messages postés
2
Date d'inscription
lundi 28 juin 2004
Statut
Membre
Dernière intervention
29 juin 2004

Mon vrai problème est :

Je veux prendre valeur par valeur d'une table Access pour la stocker dans une feuille portant comme nom la date associée a cette valeur

exemple:

Voici la table

DATE VALEUR
10/10/2004 200
10/10/2004 250
11/10/2004 150
11/10/2004 200
12/10/2004 187
...

Fichier Excel:
Nommer une feuille : 10_10_2004 et mettre les valeurs : 200 et 250
Nommer une feuille : 11_10_2004 et mettre les valeurs : 150 et 200
Nommer une feuille : 12_10_2004 et mettre les valeurs : 187

Merci d'avance
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
6
fait un bon order by par date, pour être sur de l'ordre des donnée, puis prend le code a CanisLupus

crée les fichiers FichierXls = "c:" & format(rst![date],"dd_mm_yyyy") & ".xls"
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
Avant le code que j'ai mis plus haut, tu crées un recordset basé sur un "select * from TaTable order by DATE"

ensuite, à la place de :

AppExcel.ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "toto1"

tu mets :

dim wdate
do while not rst.eof
if format(rst![date],"dd_mm_yyyy")<>wdate then
wdate = format(rst![date],"dd_mm_yyyy")
AppExcel.ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = wdate
end if
rst.movenext
loop

ensuite, à la place de :

With ClasseurExcel.Sheets("toto1")
' le format, c cells(ligne,colonne)
.Cells(1, 1) = 100
.Cells(1, 2) = 200
.Cells(1, 3) = 300
.Cells(1, 4) = 400
.Cells(1, 5) = 500
End With

tu écris

dim col as integer
wdate=""
rst.movefirst
do while not rst.eof
if format(rst![date],"dd_mm_yyyy")<>wdate then
wdate = format(rst![date],"dd_mm_yyyy")
col=1
else
col=col+1
end if
ClasseurExcel.Sheets(wdate).Cells(1, col) = rst![valeur]
rst.movenext
loop

Bon, ça c un exemple écrit vite fait mais tu devrais t'en sortir.

Bonne prog

Cordialement

CanisLupus