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 :

Envoyer(copier) objet classeur excel (feuille donné+feuille graph) vers nouveau classeur 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
    Avril 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Par défaut Envoyer(copier) objet classeur excel (feuille donné+feuille graph) vers nouveau classeur excel
    Bonjour,

    Un autre problème, j'aimerai envoyer un graphique contenu d'un classeur excel contenu dans un objet, vers un nouveau classeur excel, et le tout sans macro de (re)création du graphique.
    Simple question : est-ce possible ? Sinon, je saurai me débrouiller, mais ça va quand même prendre un peu de temps.

    Pour expliquer mon code, en amont, mon objet contient une feuille, alimentée par une requête (avec en tête), et une feuille graphe qui se met à jour (selon le nombre de séries, données sources etc...) par macro excel décrite et donc adapté au VBA Access lors de l'activation de l'enregistrement (form_current) du formulaire global.
    Dans mon code ci-dessous, l'exportation des données de l'objet classeur vers le nouveau classeur fonctionne bien, avec la création d'une feuille graphique.

    J'aimerais donc que tout cet objet soit envoyé directement dans un nouveau classeur, en conservant la mise en forme du graphe, et par bonheur sans retoucher à la sélection des données sources, séries etc...

    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
    Private Sub Flotte_Trainer_export_graphe_Click()
    Dim appexcel As Excel.Application
    Dim oWb1 As Excel.Workbook, oWb2 As Excel.Workbook
    Dim oFeuille1 As Excel.Worksheet, oFeuille2 As Excel.Worksheet
    Dim oGraph1 As Excel.Chart, oGraph2 As Excel.Chart
     
    Set appexcel = CreateObject("Excel.Application")
        appexcel.Application.Visible = True
     
    'Ouverture d'un fichier Excel
    Set oWb1 = appexcel.Workbooks.Add
    Set oWb2 = Forms.F_Pays.Flotte_fighter_graphe.Object
     
     
    Set oFeuille1 = oWb1.Worksheets(1)
    Set oFeuille2 = oWb2.Worksheets(1)
    Set oGraph1 = oWb1.Charts.Add 'création d'une feuille graphe
    Set oGraph2 = oWb2.Charts(1) 'là ça ne fait rien, la feuille graphique reste vide
     
    oFeuille1.Range("a1:l100").Value = oFeuille2.Range("a1:l100").Value 'kopikol de mes données
    'début de typage du graphe au cas il le faudra, mais je m'y prends mal je viens de commencer
    'Set oGraph1.ChartType = oGraph2.ChartType
    'Set oGraph1.ChartArea = oGraph2.ChartArea
     
    'Désallocation mémoire
    Set oFeuille1 = Nothing
    Set oFeuille2 = Nothing
    Set oWb1 = Nothing
    Set oWb2 = Nothing
    Set oGraph1 = Nothing
    Set oGraph2 = Nothing
    Set appexcel = Nothing
     
    End Sub

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 134
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Désolé pour les désagréments de déplacement mais le message prêtait à confusion...

    Bref, si j'ai bien compris, le but est de copier graphique et données d'un classeur vers sun autre ?
    Si c'est le cas, l'usage de méthode de copie de VBA issue de l'objet Excel doit répondre à ta demande.
    Mais il est évident que cela requiert un peu de codage Automation, ce qui n'est pas forcément limpide pour tous...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Par défaut
    Rebonjour, merci d'avoir répondu !

    Je viens d'écrire un gros pavé avec mon code et tout, et j'ai fermé la fenêtre...

    Donc si je comprends bien, il faut impérativement recréer du VBA sur Access, qui créera le graph sur la feuille du nouveau classeur excel, à chaque export. Je précise que je n'utiliserai pas de fichier modèle xls car s'il est effacé par un user...

    J'ai déjà une macro VBA de MAJ du graph dans l'objet access, mais pas encore de macro VBA de création de graph pour le nouveau classeur exporté.
    Donc j'imagine que la copie de code VBA de MAJ ne fonctionnera dans mon cas.

    J'ai bon ?

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 134
    Billets dans le blog
    5
    Par défaut
    Il y a quelque chose qui m'échappe
    Tu dis que tu veux copier graphique et données d'un classeur (donc existant, je présume) et dans ton dernier message, tu dis qu'il peut être supprimé par un tier...

    Essaye d'être un peu plus précis sur la démarche :
    • Qu'est ce que tu as au départ et tu pars d'où (Données de table depuis un formulaire... ???)
    • Que fait l'utilisateur dans tout ça ?
    • Que doit-on obtenir à l'arrivée.
    • Excel reste t-il ouvert ?
    • Le classeur 2 existe t-il aussi ?


    Là je pourrais te répondre...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Par défaut
    Bonjour !

    Merci pour ta patience Je vais essayer d'être plus explicite.

    Avant tout j'ai deux cas de figure : le premier est que je suis la méthode que j'ai commencé (export vers fichier vide), mais je crois que je vais suivre finalement l'export vers un modèle excel (.xlt).

    D'abord je réponds à tes questions, et ensuite j'explique ce qu'il me reste à faire dans les deux cas de figure

    • Qu'est ce que tu as au départ et tu pars d'où (Données de table depuis un formulaire... ???)

    Je suis sur un formulaire Access basé sur une table pays, où est présent un objet OLE Excel indépendant contenant une feuille de données (Feuil1), et un graphe (Graph1, c'est le nom de la feuille-graphe) que l'on voit sur l'écran. L'objet est verrouillé, l'utilisateur ne peut y toucher.
    Le graphe est déjà construit, il se rapporte aux données de la feuille. La feuille est alimenté en données par une requête combinant plusieurs tables avec un where=nomdel'enregistrementduformulaire (également clé primaire de la table pays).
    A chaque changement d'enregistrement, la feuille de données puis le graphe sont MAJ par VBA (ça fonctionne).


    • Que fait l'utilisateur dans tout ça ?

    Donc l'utilisateur ne fait rien à part changer d'enregistrement dans une liste déroulante. Et le graphe excel de l'objet OLE est MAJ. Et les futurs utilisateurs, d'après ma chef, ne sont pas doués etc... lambda quoi, c'est pourquoi l'objet ne peut être modifié.


    • Que doit-on obtenir à l'arrivée.

    Il y a à côté du graphe un bouton excel, qui permettra l'export du classeur de l'objet OLE, export qui ouvrira excel avec les mêmes données dans une feuille, et le même graphe dans une autre. Comme l'utilisateur a l'habitude d'excel, c'est là qu'il modifiera ce qu'il voudra etc... et de plus ça enlève d'éventuels risques de modif à mon fichier access.


    • Excel reste t-il ouvert ?

    comme précédemment:
    Donc quand il clique sur le bouton export à coté de l'objet OLE dans access, ça ouvre Excel application avec la feuille et le graphe exporté.


    • Le classeur 2 existe t-il aussi ?

    Donc quand excel est ouvert après export, l'utilisateur voit les données et le graphe, il peut y faire ce qu'il veut. Le fichier étant "sans titre" c'est après qu'il peut l'enregister, d'après mon premier cas de figure. Dans l'autre cas, c'est un fichier modèle, donc il existe.


    1 - export vers classeur xls vierge
    Là j'arrive à exporter les données dans la feuille, et je dois créer le graphe, comme le classeur est vierge au départ. Donc j'imagine qu'il faut que je réécrive du VBA dans Access dans la procédure d'export, afin de piloter excel qui créera le graphe à partir des données exportées.

    2 - export vers classeur xls basé sur modèle xlt
    Mais là je suis en train de changer un peu mon fusil d'épaule, j'ai créé un fichier modèle (.xlt) que j'ai mis dans un repertoire du serveur. Il contient une feuille de données (avec les mêmes étiquettes que ma requete), et une feuille graphe. La feuille de données contient en plus un bouton "MAJ graphe" qui en fait supprime puis recrée le graphe en fonction des données.
    Comme ça l'utilisateur, lorsqu'il clique sur le bouton export sur le formulaire access, arrivera sur le fichier xls (basé sur le modèle) avec tout de fait, avec en plus le bouton de MAJ graphe lorsqu'il retouche à ses données.

    Procédure d'ouverture du modele xlt sans transfert de données:
    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
    Sub OuvrirModeleAvecDonnees(Chemin As String) ', oFeuille As Worksheet, oGraph As Chart)
    Dim xlApp As Excel.Application, oWb As Excel.Workbook
    On Error Resume Next
    Set xlApp = GetObject(, "Excel.application")
    If err = "ERR_NOT_RUNNING" Then
        err.Clear
        Set xlApp = CreateObject("Excel.application")
    End If
     
    Set oWb = xlApp.Workbooks.Add("" & Chemin & "") 'chemin du fichier
     
    oWb.RunAutoMacros xlAutoOpen
     
    xlApp.Visible = True
    Set oWb = Nothing
    Set xlApp = Nothing
    End Sub
    Avec un call OuvrirModeleAvecDonnees("V:\fsdfs.xlt") sur l'évnement clic du bouton

    Donc en fait il me reste juste à coder le transfért du résultat de la requête sur la feuille de données du ficher excel et simuler le clic bouton "MAJ données", tout cela en ouverture du fichier excel. (la macro MAJ données est déjà opérationnelle).

    Dois-je coder cela juste avant le end sub du code ci-dessus (donc pilotage d'excel par access) ou le mettre dans le module VBA ThisWorkbook du classeur xlt? (Il me semble que this workbook) est une sorte de macro de démarrage dans excel)

    J'espère être clair et pas trop long, mais c'est vrai que si j'explique succintement, ça peut être flou, et si je suis complet, je sais pas si le lecteur peut s'y retrouver, et ça peut être barbant à lire également !

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 134
    Billets dans le blog
    5
    Par défaut
    Mouais....

    Bon, tu te compliques bien la vie...
    Tu peux faire de l'OLE certes, c'est d'ailleurs la meilleure solution dans ton cas.
    Il faut effectivement un XLT déjà formaté, ça gagnera du temps.
    Tu peux aussi un poser des cellules nommées : cela sera plus pratique pour la suite avec la table de données correspondantes.

    Ce que tu peux faire :
    A/ Préparatifs
    1. Dans ton XLT, tu construits un tableau (au niveau d'une cellule nommée pour la cellule Haut-Gauche) sur la feuille cible qui représente exactement la propriété RowSource de ton Graphique dans Access.
    2. Tu y loges des données bidons.
    3. Tu insères alors un graphique fondé sur ces données tel que le graphe doit être construit.
    4. Ton garphique étant construit, tu le mets en forme comme il se doit et le plus fidèlement possible à celui visible dans le formulaire Access
    5. Tu sauves et tu fermes le XLT


    B/ Mise en oeuvre
    1. Ta procédure de "déplacement/copie" du graphique se traduit par l'ouverture du XLT en tant que nouveau classeur.
    2. Tu ne génères aucun graphique, il est déjà là.
    3. Tu parcours ton RecordSet et tu loges les valeurs dans le tableau où se situe la cellule nommée de tout à l'heure comme point de départ.
    4. Ton graphique va se mettre automatiquement à jour.


    Voilà, c'est fini.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

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

Discussions similaires

  1. [XL-2007] Copier/coller dans nouveau classeur la ou les feuille(s) sélectionnée avec checkbox
    Par apache84 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/02/2014, 17h19
  2. [AC-2003] Création d'une requête et export vers Excel sur une feuille donnée
    Par nola38 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/01/2014, 15h23
  3. Réponses: 8
    Dernier message: 24/01/2014, 12h23
  4. [XL-2007] Excel plante avec macro sauvegarde feuille vers nouveau classeur avec nom spécifique
    Par stephadm dans le forum Macros et VBA Excel
    Réponses: 32
    Dernier message: 10/05/2012, 14h59
  5. copie d'1 feuille d'1 classeur vers nouveau classeur excel 2003
    Par samson_02 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/02/2009, 16h14

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