access->excel

T

toubib

Guest
bonjour à tous,

j'aimerais pouvoir copier les données résultant de requêtes access dans un fichier excel et ce avec une MAJ automatique une fois par mois?
comment puis-je faire sachant que je ne maîtrise ABSOLUMENT PAS les liaisons access et excel?

ps: j'ai regardé le super post de michel xld, cependant comme je ne comprends rien au code, je n'ai pas réussi à transposer sur mon cas :s

merci pour vos réponses :)
 

anuky

XLDnaute Occasionnel
Bonjour toubib et tous le monde sur le forum,

Je pense que le mieux d'utiliser Excel uniquement avec un import basé sur ta requête Access.

Ouvrir un classeur Excel :
Données/Données Externes->Importer des données...

Là tu as une boite de dialogue et dans type de fichiers, tu choisi bases de données Access ou tous les fichiers.

Tu séléctionne ta base de données.

Puis dans une autre fenêtre du séléctionne ta requête...

Puis l'emplacement des données dans ton classeur Excel

Et normalement (ça fait quelque temp que je n'ai pas utilisé cette fonction) dès que tu ouvre ton classeur Excel il se met automatiquement à jour.

Voilà

A+
 
T

toubib

Guest
je n'ai pas cette possibilité, voila ce que j'ai:

exécuter une réquête
créer une requete sur le web
créer une requête
importer un fichier text
...

je suis un peu perdu la, toute aide sera la bienvenue :s
 

anuky

XLDnaute Occasionnel
J'ai fait tourner l'enregistreur de macro en suivant la procédure décrite précédement, ce qui donne le code suivant (je suis pas certain que ça marche mais tu peux toujour essayer) :

Code:
Sub Macro4()
'

'
    With ActiveSheet.QueryTables.Add(Connection:=Array( _
        'OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password='''';User ID=Admin;Data Source=[color=#FF0000]C:\\Documents and Settings\\Bureau\\Travail_du_sol.mdb[/color]' _
        , _
        ';Mode=Share Deny Write;Extended Properties='''';Jet OLEDB:System database='''';Jet OLEDB:Registry Path='''';Jet OLEDB:Database Passwo' _
        , _
        'rd='''';Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transa' _
        , _
        'ctions=1;Jet OLEDB:New Database Password='''';Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Do' _
        , _
        'n't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False' _
        ), Destination:=Range('A1'))
        .CommandType = xlCmdTable
        .CommandText = Array('[color=#0000FF]qryAzoteParTraitements[/color]')
        .Name = '[color=#FF6600]Travail_du_sol[/color]'
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceDataFile = _
        '[color=#FF0000]C:\\Documents and Settings\\Bureau\\Travail_du_sol.mdb[/color]'
        .Refresh BackgroundQuery:=False
    End With
    ActiveWindow.SmallScroll Down:=54
End Sub

Les champs en couleur sont a modifier en adaptant avec les caractéristiques de ta base de données :
rouge : chemin d'accès à la BDD.
orange : Nom de la BDD sans l'extension (.mdb)
Bleu : nom de la requête

je réfléchi a une autre méthode avec access qui devrai fonctionner mais sans mettre à jour les données d'excel donc nécessité de lancer la macro depuis Access pour les MAJ

a+
 

anuky

XLDnaute Occasionnel
Les couleurs ont pas marché comme prévu, je ressai :

Sub Macro4()
'
'

'
With ActiveSheet.QueryTables.Add(Connection:=Array( _
'OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password='''';User ID=Admin;Data Source=C:\\Documents and Settings\\Bureau\\Travail_du_sol.mdb' _
, _
';Mode=Share Deny Write;Extended Properties='''';Jet OLEDB:System database='''';Jet OLEDB:Registry Path='''';Jet OLEDB:Database Passwo' _
, _
'rd='''';Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transa' _
, _
'ctions=1;Jet OLEDB:New Database Password='''';Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Do' _
, _
'n't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False' _
), Destination:=Range('A1'))
.CommandType = xlCmdTable
.CommandText = Array('qryAzoteParTraitements')
.Name = 'Travail_du_sol'
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = _
'C:\\Documents and Settings\\Bureau\\Travail_du_sol.mdb'
.Refresh BackgroundQuery:=False
End With
ActiveWindow.SmallScroll Down:=54
End Sub


Les champs en couleur sont a modifier (enfin d'après ce que j'ai compris du code) en adaptant avec les caractéristiques de ta base de données :
rouge : chemin d'accès à la BDD.
Vert : Nom de la BDD sans l'extension (.mdb)
Bleu : nom de la requête
 

anuky

XLDnaute Occasionnel
Je pense que c'est une incompatibilité de version alors soit tu passe à Excel 2002 où + si affinité ou tu passe par Access où je peu pas te donner de réponse dans l'état actuel de mes connaissances.

Voici la méthode que je t'ai promis en passant par access (je part du principe que tu connait un minimum cette petit merveille)

Tout d'abord, tu créé un formulaire où tu insère un boutton
dans les propriété du boutton, onglet Autre, ligne Nom (normalement la première, tu tape cmd_Export (nom qui correspond à mon exemple, mais tu peux écrire autre chose pour la cohérence de ta base).

puis tu attribu à ton boutton un évènement sur clic

et tu ajoute le code suivant :

Code:
Private Sub cmd_Export_Click()

Dim xl As New Excel.Application
Dim i As Byte

    'Rend visible l'appli EXCEL
    xl.Visible = True

    'Création d'un nouveau classeur EXCEL
    xl.Workbooks.Add

Qteglypho:
    Set DBA = Application.CurrentDb

    'Ouverture des enregistrements de la requête NOM A MODIFIER
    Set rs = DBA.OpenRecordset('qryQteGlyphosate')
    If rs.RecordCount = 0 Then
        Exit Sub
    End If
    'Ajoute 1 feuille QteGlypho NOM A MODIFIER
    xl.Worksheets.Add
    xl.ActiveSheet.Name = 'QteGlypho'

    With xl.ActiveWorkbook.Worksheets('QteGlypho')
        'Copie les intitulés de colonnes
        For iCols = 0 To rs.Fields.Count - 1
            .Cells(6, iCols + 1).Value = rs.Fields(iCols).Name
        Next
        'Copie le jeu d'enregistrements
        .Range('A7').CopyFromRecordset rs
    End With
 
    Call MiseEnForme
   
    
End Sub

Voilà sur mon PC sous Acess 2002 ça fonctionne

si tu as des soucis demande, j'essairai de répondre
 

anuky

XLDnaute Occasionnel
Je pense que c'est une incompatibilité de version alors soit tu passe à Excel 2002 où + si affinité ou tu passe par Access où je peu pas te donner de réponse dans l'état actuel de mes connaissances.

Voici la méthode que je t'ai promis en passant par access (je part du principe que tu connait un minimum cette petit merveille)

Tout d'abord, tu créé un formulaire où tu insère un boutton
dans les propriété du boutton, onglet Autre, ligne Nom (normalement la première, tu tape cmd_Export (nom qui correspond à mon exemple, mais tu peux écrire autre chose pour la cohérence de ta base).

puis tu attribu à ton boutton un évènement sur clic

et tu ajoute le code suivant :

Code:
Private Sub cmd_Export_Click()

Dim xl As New Excel.Application
Dim i As Byte

    'Rend visible l'appli EXCEL
    xl.Visible = True

    'Création d'un nouveau classeur EXCEL
    xl.Workbooks.Add

Qteglypho:
    Set DBA = Application.CurrentDb

    'Ouverture des enregistrements de la requête NOM A MODIFIER
    Set rs = DBA.OpenRecordset('qryQteGlyphosate')
    If rs.RecordCount = 0 Then
        Exit Sub
    End If
    'Ajoute 1 feuille QteGlypho NOM A MODIFIER
    xl.Worksheets.Add
    xl.ActiveSheet.Name = 'QteGlypho'

    With xl.ActiveWorkbook.Worksheets('QteGlypho')
        'Copie les intitulés de colonnes
        For iCols = 0 To rs.Fields.Count - 1
            .Cells(6, iCols + 1).Value = rs.Fields(iCols).Name
        Next
        'Copie le jeu d'enregistrements
        .Range('A7').CopyFromRecordset rs
    End With
 
    Call MiseEnForme
   
    
End Sub

Voilà sur mon PC sous Acess 2002 ça fonctionne

si tu as des soucis demande, j'essairai de répondre
 

Discussions similaires

Réponses
4
Affichages
196
Réponses
3
Affichages
762

Statistiques des forums

Discussions
312 305
Messages
2 087 077
Membres
103 455
dernier inscrit
saramachado