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 :

Macro: ouvrir un fichier excel et créer un autre fichier excel en tache de fond


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 2
    Par défaut Macro: ouvrir un fichier excel et créer un autre fichier excel en tache de fond
    Bonjour à la communauté
    Je suis un petit nouveau sur le forum. Je ne suis pas un pro dans les macros non plus.

    J'ai réussi à faire une macro qui faisait exactement mon besoin grâce à la fonction enregistrement.
    Maintenant je voudrais faire la même chose mais en tache de fond.

    Mon besoin est le suivant:

    J'ai un fichier A dans lequel j'ai ma macro.
    Lorsque je lance la macro:
    1- Ca ouvre un fichier B
    2- Ca copie deux onglets dans un nouveau fichier C
    3- Je sauvegarde le fichier C
    4- Je ferme le fichier C
    5- Je sauvegarde et ferme le fichier B

    La macro est la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Macro1()
    '
    ' Macro1 Macro
    ' Copie de 2 onglets dans un autre fichier
     
        Windows("Fichier B.xlsx").Activate
        Sheets(Array("Tab 1", "Tab 2")).Select
        Sheets("Tab 2").Activate
        Sheets(Array("Tab 1", "Tab 2")).Copy
        ActiveWorkbook.SaveAs Filename:= _
            "C:\Users\caal100\Desktop\New folder\Fichier C.xlsx", FileFormat:= _
            xlOpenXMLWorkbook, CreateBackup:=False
    End Sub
    Comme annoncé, je voudrais faire la meme chose en tache de fond sans voir les fichiers qui s'ouvrent et se referment.

    Merci pour votre aide

    Alca7878

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Alca7878 Voir le message
    Bonjour,

    Essayez ce code :

    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
     
    Sub CopierTab1Tab2DansUnNouveauFichier()
     
    ' Copie de 2 onglets dans un autre fichier
     
    Dim CheminSource As String, CheminCible As String
     
        Application.ScreenUpdating = False
     
        CheminSource = "C:\Users\caal100\"                                ' A adapter
        CheminCible = "C:\Users\caal100\Desktop\New folder\"   
     
        Workbooks.Open Filename:=CheminSource & "Fichier B.xlsx"
        Sheets(Array("Tab 1", "Tab 2")).Copy
     
        With ActiveWorkbook
             Application.DisplayAlerts = False
             .SaveAs Filename:=CheminCible & "Fichier C.xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
             .Close savechanges:=True
             Application.DisplayAlerts = True
        End With
     
        With Workbooks("Fichier B.xlsx")
             .Close savechanges:=True  ' A supprimer si B doit rester ouvert, et False s'il ne doit pas être sauvegardé.
        End With
     
        MsgBox "Fichier C.xlsx créé !", vbInformation
        Application.ScreenUpdating = True
     
    End Sub
    Pensez à mettre votre code entre balises #

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 2
    Par défaut
    Bonjour Eric
    Merci pour la réponse et le code
    Cela fonctionne bien merci

    Pour vraiment répondre à mon besoin, il me faut te donner plus de précision:

    En fait le fichier A est une sorte de client qui est lié avec le fichier B qui se trouve sur un server.
    L'utilisateur rentre des infos dans le fichier A. Quand il lance la macro, cela ouvre le fichier B.
    Le fichier B récupéré les infos du fichier A, et fait un traitement pour donner un résultat qui sont les deux onglets que je copie dans le fichier C.

    Par contre, je ne veux pas que l'utilisateur puisse récupérer le fichier B.
    Pour le moment, mes sécurités sur le fichier B sont:
    - je vais protéger le fichier avec mot de passe
    - je vais m'assurer que l'utilisateur est bien le bon (check avec mot de passe Windows)
    - Je vais mettre le serveur dans un fichier avec une limitation sur les utilisateurs

    Avec ton code, on voit le fichier apparaitre derrière en arrière plan. Sais tu si il peut s'ouvrir mais en caché?
    J'ai trouvé un code sur le net sans le tester pour le moment

    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
    Option Explicit  
    Dim xlApp As New Excel.Application ' déclarer Public si dans un module 
    Dim xlBook As New Excel.Workbook 
    Dim xlSheet As New Excel.Worksheet 
     
    Sub MaSub() 
     
    'Ouvrir le classeur dont on a besoin avec tout le chemin... 
    Set xlBook = xlApp.Workbooks.Open("LeNomDeTonFichier.xls") 
    Set xlSheet = xlBook.Sheets("Feuil1") ' si on veut utiliser une feuille en particulier 
     
    'Pour vérifier que tout fonctionne bien 
    MsgBox xlSheet.Range("C8") 
    'si on ne spécifie pas de feuille 
    ' MsgBox xlBook.Activesheet.Range("C8") 
    ' ou MsgBox xlBook.Sheets("Feuil1").Range("C8") 
     
    'Important en quittant le programme ou quand on n'en a plus besoin (pas nécessairement ici...) 
    xlBook.Close 
    xlApp.Quit 
    Set xlSheet = Nothing 
    Set xlBook = Nothing 
    Set xlApp = Nothing 
     
    End Sub
    Qu'en penses tu? des idées?

    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Alca7878 Voir le message
    Avec ton code, on voit le fichier apparaître derrière en arrière plan. Sais tu si il peut s'ouvrir mais en caché?
    Bonjour,

    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    Logiquement, on ne devrait voir que l'écran d'où le code démarre. A l'ouverture de B, y a-t-il une macro qui remet en route le rafraîchissement de l'écran ? La fenêtre de lancement couvre-t-il tout l'écran ?

    Sinon, pour contrôler les accès à un fichier, je donne des droits en fonction des Users.

    Cordialement.

Discussions similaires

  1. [XL-2010] excel - ouverture d'un autre fichier via Macro
    Par willoweiss dans le forum Excel
    Réponses: 5
    Dernier message: 18/05/2014, 19h09
  2. Excel lire dans un autre fichier Impossible?
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/09/2009, 16h00
  3. Créer du code vba excel réutilisable dans d'autres classeurs excel
    Par nicoMU dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/11/2008, 15h22
  4. [FPDF] Créer un fichier PDF à partir d'un autre fichier PDF
    Par axel-erator dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 18/06/2006, 23h29
  5. [fichier d'aide]créer/gérer un fichier d'aide
    Par ce.moi7 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 03/05/2004, 17h34

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