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

  1. #1
    Membre habitué
    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
    Points : 127
    Points
    127
    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 habitué
    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
    Points : 127
    Points
    127
    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 habitué
    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
    Points : 127
    Points
    127
    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 expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Points : 1 707
    Points
    1 707
    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 expérimenté 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
    Points : 1 591
    Points
    1 591
    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)
    Nous n'héritons pas la Terre de nos ancêtres, nous l'empruntons à nos enfants, prenons-en soin !
    (proverbe amérindien)

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Bonsoir.

    Si c'est pour travailler dedans par la suite, tu peux ouvrir un nouveau classeur excel en utilisant des objets de la librairie Excel (la cocher dans les références du projet avant de l'utiliser...)

    Voici l'exemple d'un code qui ouvre un nouveau fichier, place un mot dans la cellule A1 du premier onglet et le ferme en le nommant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub CreerClasseur()
        Dim oExcel As Excel.Application
        Dim Classeur As Excel.Workbook
     
        Set oExcel = CreateObject("excel.application")
        Set Classeur = Excel.Workbooks.Add()
        Classeur.ActiveSheet.Range("a1") = "bonjour"
     
        Classeur.Close savechanges:=True, Filename:="d:\données\testaccess.xls"
        Set Classeur = Nothing
        oExcel.Quit
        Set oExcel = Nothing
    End Sub
    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre habitué
    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
    Points : 127
    Points
    127
    Par défaut
    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)
    C'est la première étape, merci bien. Maintenant, reste à trouver comment remplir la feuille ouverte sans avoir à utiliser de chemin de fichier, comme c'est le cas dans tous les exemples sur lesquels je suis tombé jusqu'à présent !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub CreerClasseur()
        Dim oExcel As Excel.Application
        Dim Classeur As Excel.Workbook
     
        Set oExcel = CreateObject("excel.application")
        Set Classeur = Excel.Workbooks.Add()
        Classeur.ActiveSheet.Range("a1") = "bonjour"
     
        'Classeur.Close savechanges:=True, Filename:="d:\données\testaccess.xls"
        'Set Classeur = Nothing * Gardée dans un premier temps, supprimée ensuite
        'oExcel.Quit
        'Set oExcel = Nothing * Gardée dans un premier temps, supprimée ensuite
     
    End Sub
    Vu que je ne voulais pas fermer le classeur de façon automatisé, et encore moins l'enregistrer, j'ai enlevé les lignes en commentaire avant d'essayer, sans succès : Excel se lance bien dans la liste des processus, mais n'est pas visible. Impossible donc de proposer à l'utilisateur de travailler sous Excel.

    D'un côté, j'arrive à ouvrir une page vierge d'Excel, d'un autre à créer un fichier Excel avec les données issues d'une requête. (même si ce deuxième point présente quelques bugs, je n'ai pas cherché à les corriger, n'arrivant pas au résultat souhaité)

    Je pensais utiliser la liste alimentée par la requête pour remplir la feuille Excel à l'aide de ".cells" ou ".range", et en ajoutant une boucle, mais à quoi appliquer ce ".cells/range" ?

    Merci en tout cas pour votre aide, j'ai déjà de quoi arriver à un résultat fonctionnel, même si ne répondant que peu au "cahier des charges"…

  9. #9
    Membre habitué
    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
    Points : 127
    Points
    127
    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.

  10. #10
    Membre expérimenté 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
    Points : 1 591
    Points
    1 591
    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.
    Nous n'héritons pas la Terre de nos ancêtres, nous l'empruntons à nos enfants, prenons-en soin !
    (proverbe amérindien)

  11. #11
    Membre habitué
    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
    Points : 127
    Points
    127
    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