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

Macros et VBA Excel Discussion :

[VBA - Excel] Exporter une feuille Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 66
    Par défaut [VBA - Excel] Exporter une feuille Excel
    Bonjour tout le monde,

    Voilà, j’ai une application VB qui à été développé via le module Visual basic d’Excel (Excel 2003 soit la version 11). Dans cette application j’ai une feuille d’excel (Un devis) que je voudrais exporter/enregistrer dans un fichier excel. Pour permettre a mes clients de modifier ce devis si ils veulent rajouter des références ou autre. Dans cette feuille Excel il y a bien sur des formules, des objets graphiques, des colonnes qui ont des tailles différentes.

    Je voudrais donc exporter cette feuille avec ça mise en pages, ces objets graphies et avec ses valeurs (Donc je ne veux pas conserver les formules mais uniquement les valeurs).


    Ce qu’il faut s’avoir c’est que dans cette Application Visual Basic – Exel, il ne peut pas y avoir d’autre classeur Excel dans la même session (J’ai du mettre en place quelque que ligne de code pour permettre a mon application de s’exécuter seul dans une session unique d’Excel pour des raisons pratiques). Il est donc impossible de faire un simple copié collé de la feuille Excel en question, entre deux classeurs, puisqu’il n’y a aucun lien possible entre mon classeur Excel ou tourne mon application et éventuellement un autre classeur que l’on aurait ouvert pour copier la feuille Excel (ces deux classeurs ne pourront jamais être dans la même session).

    J’ai des solutions mais qui me semble être plus du bidouillage que qu’elle que chose de propre. Je fais donc appel a vos lumières si vous avez des améliorations voir des méthodes différentes celles-ci sont les bienvenues


    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
     
    Sub Save()
    Dim ApplicationName As String
    Dim ExcelVersion As Integer
    Dim ApplicationVersion As Integer
    ApplicationName = ThisWorkbook.Name
     
    'je nettoie la feuille tampon qui va recevoir une copie de la feuille devis que je veux exporter
    Sheets("TempSheet").Select
    ActiveSheet.Shapes.SelectAll
    Selection.Delete
    ActiveSheet.Cells.Clear
     
    'Je copie la la feuille qui contient mon devis
    Sheets("CHART-OFFER").Range("A1:H63").Copy
    Sheets("Tempsheet").Range("A1").Select
     
    'Je test la version excel du client car la méthode paste special fonctionne differement celon la version d'excel
    'Je copie d'abord la taille des colonnes de mon devis vers la feuille tampon
    If ApplicationVersion > ExcelVersion Then
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Else
    Selection.PasteSpecial Paste:=8, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End If
     
    'Ensuite je copie entierement mon devis vers la feuille tampon, ce qui me permet de copier mes objects graphique, mais les formules sont aussi copier, je vais donc les remplacer par leur valeurs grace a la ligne suivante
    Sheets("TempSheet").Paste Range("A1")
     
    'Ensuite j'ecrase les formules precedement copier sur ma feuille tampon par les valeures de ma feuille devis
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     
    'Je copie cette feuille tampon pour pouvoir l'exporter
    Sheets("TempSheet").Copy
    'J'utilise la methode Save'as qui me permettra de choisir le nom du nouveau classeur excel qui contiendra ma feuille devis
    Application.Dialogs(xlDialogSaveAs).Show
     
    'Je retourne sur mon application
    Windows(ApplicationName).Activate
    End sub
    J’avais pensé à une autre méthode : Imprimer dans un fichier
    J’ai testé mais le fichier que j’obtiens en sortie je ne sais pas avec quoi l’ouvrir, donc ça ne me parait pas être une bopnne méthode mais je vous la mets quand même ça peut donner des idé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
     
     
    A) in Excel 97 :
    Sub prinTofile()
    Dim fileName As String
    fileName = "MyPint.prn"
     
    ChDrive "C"
    ChDir "C:\My Documents"
    If Dir(curdir & "\" & fileName) <> "" Then kill curdir & "\" & fileName
    SendKeys fileName & "{enter}"
    thisworkbook.Worksheets("Sheet1").PrintOut PrintToFile:=True
    End Sub
     
    B) in Excel 2000 :
    Time to switch over to Excel2000 where you can specify the filename as follows :
    thisworkbook.Worksheets("Sheet1").PrintOut PrintToFile:=True, Prtofilename:="C:\MyTest.prn"

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ce qui serait bien serait que tu nous expliques pourquoi tu ne peux pas ouvrir deux classeurs en même temps...
    Ceci dit, j'ai vu passé, il y a pas mal de temps, un post sur l'écriture dans un fichier Excel fermé. Je cherche et je te dirai si je trouve

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    J'ai cherché et j'ai trouvé avec "fichier fermé" comme mots clés
    http://www.developpez.net/forums/sho...327#post618327
    Tu dis

  4. #4
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 66
    Par défaut
    Je peux avoir deux classeurs d'ouvert, seulement ils ne seront pas dans la même session ou instance d'Excel pour des raisons pratique envers mes clients.

    Pourquoi j'ai fait ca ?

    Car lorsqu'une macro ou application visual basic (je le rappel dans mon cas l'application visual basic a été développé via le module d'Excel) est lancé, et que dans un deuxieme temps tu decide d'ouvrir un fichier excel, celui-ci va s'ouvrir dans la même session que ton application et par la même sera inacessible tant que l'application Visual Basic est lancé, ce qui est vraiment peut pratique. La méthode c'est d'aller ouvrir un deuxiéme Excel et avec celui-ci ouvrir le fichier que tu souhaite consulter

    J'ai donc mis en place un bout de code qui permet d'automatiser le lancement d'une deuxieme session excel (lorsque mon application visual basic est lancée) et permettre a mes clients de visualiser un document excel en même temps que l'application visual basic tourne (c'est transparent pour eux). Sinon il devrait manuellement lancer un deuxieme fichier excel et via cette deuxieme instance d'excel aller ouvrir le fichier excel qu'il souhaite consulter.

  5. #5
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 66
    Par défaut
    Sinon j'ai brièvement regardé le lien que tu ma mis, mais celui-ci ne semble pas en rapport avec ce que je veux faire.

    Pour rappel je veux simplement sauvegarder une feuille excel qui est présente dans le classeur de mon Application visual basic vers un classeurs quelconque, on pourrait voir sa comme un export ou une sauvegarde.

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ok, on va voir si j'ai bien compris...
    Tu veux pouvoir consulter une feuille et pour ça, tu veux pouvoir passer d'une feuille à l'autre sur simple demande...
    Deux questions :
    - Au départ, la feuille que le client souhaitera consulter est-elle dans le même classeur ?
    - Dans ton module VBA, as-tu un userform ouvert ?
    A+

  7. #7
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 66
    Par défaut [VBA-EXCEL] Sauvegarde d'une feuille uniquement
    Bonjour tout le monde, décidement je pose beaucoup de question ces temps si.

    Alors voilà je me posais une question, je ne sais pas du tout si c'est possible et donc j'attend vos réponses

    Est-il possible de sauvegarder uniquement une feuille spécifique parmis tout un classeur ?

    En gros on a un classeur X avec une feuille 1, 2 et 3

    Ces 3 feuilles ont subi des changements, est il possible de sauvegarder uniquement les changements occasionné sur la feuille 1 par exemple ?

    Et donc si c'est possible n'hésitez pas a poster le code

    Merci tout le monde

  8. #8
    Membre expérimenté Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Par défaut
    Ben je peux te proposer un truc. Tu transféres ta feuille1 vers un nouveau classeur que tu sauvegarde et tu fermes ton premier classeur sans le sauvegarder. Ne reste plus qu'à ouvrir les deux et réunir les pages (ce qui nécessite une étape manuelle)

    Transfert de page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    worksheets(1).move
    activeworkbook.saveas TonChemin
    Puis fermer les classeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    application.displayalerts=true
    application.quit

    T'avoues que j'ai pas trop réfléchi, y a sûrement mieux mais bon dans un premier temps ça peut le faire

  9. #9
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 66
    Par défaut
    Ca pourrait être une solution, mais dans mon cas celle-ci ne marcherais pas, dû fait que mon application VB (développé via la module Visual Basic d’Excel) tourne (ou se lance) dans une session unique d’Excel, ce qui interdit tout copier/coller/déplacement entre le classeur de mon application et un autre.

    Donc si quelqu’un à une autre solution je suis preneur, en tout cas je te remercie d’y avoir réfléchi.

  10. #10
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 66
    Par défaut
    c'est deux postes différent, d'un coté je veux exporter une feuille, de l'autre je veux sauvegarder uniquement une feuille specifique de mon classeur et non pas tout mon classeur

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Saveas :
    Si tu crains les doublons dans les noms de fichiers, tu peux faire ça dans une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    msg = "Saisir le nom du fichier "
    Do
         on error resume next
              NomFich = inputbox(msg,"Nom du Fichier") 
              ActiveWorkbook.saveas filename:= "NomFich"
              ok = err = 0
              err.clear
         On error goto 0
         msg = "Fichier existant" & vbcrlf & msg
    loop while not ok
    Juste pour l'idée...
    Une simple gestion d'erreur permettrait de pallier le problème

  12. #12
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 66
    Par défaut
    Je vais garder ma solution actuel celle que j'avais posté en début, et concernant la sauvegarde d'une feuille unique, ba je vais sauvegarder mon classeur en entier, mais je vais faire en sorte que l'utilisateur puisse sauvegarder le classeur que dans un cas précis, et qu il ne puisse plus retourner en arrière pour sauvegarder à nouveau

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

Discussions similaires

  1. [XL-2007] copier une feuille excel d'une instance excel à une autre
    Par marcelisa2 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/03/2012, 23h44
  2. exporter une feuille excel vers une table access
    Par sanfour_walhan dans le forum VB.NET
    Réponses: 8
    Dernier message: 01/06/2011, 03h01
  3. [VBA-E] Exporter une page Excel vers un Fichier Txt
    Par mamantins dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/06/2006, 11h09
  4. [VBA-E] Afficher une feuille excel pour la modifier
    Par z980x dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/05/2006, 22h21
  5. [VBA-A] Ajouter une feuille Excel
    Par kissmytoe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/02/2006, 15h54

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