IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Ouvrir une feuille vierge Excel


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut Ouvrir une feuille vierge Excel (avec données)
    Bonjour à tous,

    Après quelques temps d'absence me revoilà pour une nouvelle question sur un nouveau thème (pour moi) : le passage d'Access à Excel.

    Je souhaite, lors de l'activation d'un bouton de commande, ouvrir Excel sans créer de nouveau fichier et y insérer le résultat d'une requête VBA. (Du type SQL = "SELECT * FROM MaTable")

    J'ai trouvé comment insérer les données, en passant par la création d'une requête (méthode QueryDef), mais je n'arrive pas à ne pas créer le fichier.
    De plus, j'ai du mal à gérer la création de fichier, après la première utilisation je me retrouve souvent avec des bugs : Il faut au moins un champ de destination, impossible d'ouvrir le fichier, etc. ça me cause bien des soucis pour rien...

    Une petite piste pour m'aider ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Dans la Access tu trouveras plusieurs idées pour piloter Excel, et faire ce que tu veux. http://access.developpez.com/faq/?page=Excel

    Starec

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim qd As QueryDef
    Set qd = CurrentDb.CreateQueryDef("Requete_Temporaire", "Select * From MATABLE")
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97,"Requete_Temporaire", "c:\fichier.xls"
    DoCmd.DeleteObject acQuery,"Requete_Temporaire"
    J'utilise ce code pour la création du fichier.
    Je n'avais pas trouvé mon bonheur dans la FAQ, je ne me serai pas permis de venir poster sans avoir cherché... Soit je suis passé à côté, et pour m'en assurer je vais relire l'ensemble, soit ma réponse n'est pas là, ce que je crois...

    A bientôt

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut
    Bien ce que je pensais, je n'ai pas trouvé la solution à mon problème dans la FAQ. Il y a plein de belles choses, mais pas la simple ouverture d'Excel.
    Par contre il y a une méthode pour remplir la feuille, mais elle m'est inutile (et je ne peux pas essayer de l'appliquer à mon cas) tant que je ne peux ouvrir cette feuille...

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Par défaut
    voir du coté du controle ActiveX
    Microsoft Office Spreadsheet 11.0
    si ça peut faire ton affaire c'est peut être assez limite !!
    mais en y ajoutant ça
    http://starec.developpez.com/tuto/msfcillimitee/#LIII-A
    de notre cher starec cela s'améliore sérieusement

  6. #6
    Membre Expert Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Par défaut
    Hello,

    Pour simplement ouvrir Excel, utilises une commande du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ret
     
    ret = Shell("C:\Program Files\Microsoft Office\Office11\Excel.exe", vbNormalFocus)

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut
    Un autre petit soucis que j'ai avec ta méthode, Pierre : le fichier Excel créé est toujours long à ouvrir, très long même, au point que l'espace réservé aux données ne s'affiche pas sans ouvrir le document à partir d'un autre avec les "cases" déjà chargées.

    Et un autre avec les dates dont le jour est inférieur à 13 (ex : 11/11/2008) qui n'est pas exporté au même format que celles ayant un jour supérieur à 12 (ex 21/11/2008) alors qu'elles sont enregistrées au même format.

  8. #8
    Membre Expert Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Par défaut
    Bonjour,

    Pour ouvrir Excel ET y importer des données, la ligne de code que je t'ai proposée n'est pas adaptée, c'est un peu plus compliqué...

    Je te propose ci-dessous une petite fonction, basée sur l'ouverture d'un Recordset (jeu d'enregistrements) et basé sur un code sql (requête) pointant sur une table "Clients" (à toi de modifier avec le nom de ta propre table). Ensuite, je me base sur la commande "CopyFromRecordset" pour "copier" dans Excel le résultat de ta requête. (à noter que si ta requête reste du type de celle mentionnée dans ton premier post... autant mentionner la table directement

    Voici le code de cette petite fonction, à toi de t'y retrouver, je l'ai commenté afin que tu puisses t'y retrouver facilement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Public Function ExportVersExcel()
    Dim xl          As Excel.Application
    Dim Classeur    As Excel.Workbook
    Dim db          As DAO.Database
    Dim rst         As DAO.Recordset
    Dim fld         As DAO.Field
    Dim sql         As String
    Dim intCol      As Integer
     
    '   Ouverture de la requête à exporter
    sql = "SELECT Clients.* FROM Clients"
    Set db = CurrentDb()
    Set rst = db.OpenRecordset(sql)
     
    '   Ouverture d'Excel
    Set xl = New Excel.Application
    xl.Visible = True
     
    With xl
        Set Classeur = .Workbooks.Add                   ' Création d'un nouveau classeur
        Classeur.Sheets("Feuil1").Name = "Importation"  ' Renommage de la première feuille du classeur
     
        With Classeur.Sheets("Importation")             ' Transfert du nom des champs en entête de colonne
            intCol = 1
            For Each fld In rst.Fields
                .Cells(1, intCol) = fld.Name
                intCol = intCol + 1
            Next
     
            .Range("A2").CopyFromRecordset rst          ' Copie du recordset sur Excel à partir de la cellule "A2"
     
        End With
    End With
     
    Set xl = Nothing
    rst.Close
    Set rst = Nothing
    Set db = Nothing
    End Function
    Voilà, bonne journée et bonne suite pour ton développement

    Bernard.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut
    Hmm, ton code convient parfaitement à ma situation, je n'ai donc plus qu'à l'adapter à mon cas histoire d'importer plusieurs requêtes à la suite sans les "superposer".
    En plus, ça ne pose pas de soucis avec les dates, donc c'est nickel.

    Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD11] Ouvrir une feuille Excel dans un classeur
    Par Watier_53 dans le forum WinDev
    Réponses: 1
    Dernier message: 10/04/2008, 19h00
  2. ouvrire une feuille EXCEL
    Par skillipo dans le forum Documents
    Réponses: 2
    Dernier message: 08/02/2008, 14h07
  3. ouvrir une feuille excel
    Par massilia80 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/02/2006, 09h20
  4. Ouvrir une feuille excel et mettre son contenu dans VB6
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 17/01/2006, 09h16
  5. ouvrir une feuille EXCEL dans Delphi.NET
    Par micha382 dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 04/11/2005, 22h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo