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-E] Copier une feuille excel d'un fichier A vers un fichier B


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Par défaut [VBA-E] Copier une feuille excel d'un fichier A vers un fichier B
    Bonjour,

    Bon après avoir trouvé des fonctions qui répondaient à mon sujet, j'ai plein de problèmes (copies qui ne se font pas etc...)

    Je redemande donc de l'aide car je ne sais plus du tout comment faire et je dois avoir fini cette macro pour jeudi

    J'ai deux fichiers Excel Template et des fichiers 1,2,3 etc.... Dans le fichier Template il y a une feuille qui s'apelle Toto et dans 1,2,3 etc.. une feuille qui s'apelle Tata-1, Tata-2 (pour le fichier 2) etc...

    Je dois copier pour chaque fichier 1,2,3 etc... la feuille Tata-1, tata-2 etc.. dans le fichier Template après la feuille Toto.

    Autrement dit à la fin de l'opération dans Template j'ai comme feuille Toto - Tata-1 (qui vient du fichier1), Tata-2(qui vient du 2) etc...

    Je ne sais plus comment faire. Autre détail important, je dois faire des copier/coller par valeurs!

    Un très grand merci d'avance !

    EDIT :

    je viens de trouver un code source interessant mais il y a un problème :

    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
    40
    41
    42
    Function Importation_donnees_Rnd(FichierSource As file, FichierDest As String, OngletSource As String, OngletDest As String)
     
     
      Set Fichier_xls_Source = GetObject(FichierSource)
      Set Fichier_xls_Source = GetObject(, "Excel.application")
     
      Fichier_xls_Source.Application.Visible = True
     
     
      Fichier_xls_Source.Application.Workbooks.Open Filename:=FichierSource
     
     
      Fichier_xls_Source.Application.ActiveWorkbook.Worksheets(OngletSource).Activate
      Fichier_xls_Source.Application.ActiveWorkbook.Worksheets(OngletSource).Cells.Select
      Fichier_xls_Source.Application.Selection.Copy
     
     
      Set Fichier_xls_dest = CreateObject("Excel.application")
     
      Fichier_xls_dest.DisplayAlerts = False
      Fichier_xls_dest.Workbooks.Open Filename:=FichierDest, editable:=True
      Fichier_xls_dest.Visible = True
     
     
      Fichier_xls_dest.Application.Worksheets(OngletDest).Activate
     
      Fichier_xls_dest.Application.Worksheets(OngletDest).Cells.Select
      Fichier_xls_dest.Application.Worksheets(OngletDest).Paste
     
      Fichier_xls_dest.Application.DisplayAlerts = False
      Fichier_xls_dest.ActiveWorkbook.SaveAs Filename:=FichierDest
      Fichier_xls_dest.Application.Quit
      Fichier_xls_dest.Application.DisplayAlerts = True
     
      Fichier_xls_Source.Application.DisplayAlerts = False
      Fichier_xls_Source.Application.Quit
      Fichier_xls_Source.Application.DisplayAlerts = True
     
      Set Fichier_xls_Source = Nothing
      Set Fichier_xls_dest = Nothing
     
    End Function
    Mon "onglet de destination" n'existe pas, je dois en créer un pour à chaque passage dans ce genre de fonction

  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
    Pour copier une feuille dans un autre classeur, puis copier les seules valeurs sur elles-même dans le fichier "destination", tu as ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Application.CutCopyMode = False
        Sheets("Tata").Copy After:=Workbooks("Classeur1").Sheets(Workbooks("Classeur1").Sheets.Count)
        Cells.Copy
        Range("A1").PasteSpecial Paste:=xlPasteValues
    Tu ne dis pas comment tu listes les fichiers à copier, je n'ai donc pas fait de boucle de ce style qui aurait pu passer tous tes classeurs en revue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For each LeClasseur in Application.workbooks
    en évitant le fichier Destination... dont tu connais le nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If not LeClasseur.name = "Destination.xls" then
    et si tu as instancié ton fichier au départ, c'est plus court
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ClD = Workbooks("Destination.xls")
    Ensuite tu utilises ClD à la place de Workbooks("Destination.xls")

  3. #3
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Par défaut
    Je liste mes fichier comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each file In dossier.Files
     
       ....
     
     
    Next


    je vais essayer ce que tu m'as proposé dans ta réponse...

  4. #4
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Par défaut
    Ce que je n'arrive pas à saisir dans la programmation vba/excel (je débute désolé) c'est si je doit ouvrir mes fichiers.

    Par exemple quand je dois faire cette instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sheets("Tata").Copy After:=Workbooks("Classeur1").Sheets(Workbooks("Classeur1").Sheets.Count)
        Cells.Copy
        Range("A1").PasteSpecial Paste:=xlPasteValues

    Le fichier excel qui contient la feuille tata et le fichier de destination doivent-ils être ouvert?

  5. #5
    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
    Evite d'utiliser file comme nom de variable. File est un objet, tu risques de perturber VBA en l'utilisant comme tu le fais
    A toutes fins utiles

  6. #6
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Par défaut
    Citation Envoyé par ouskel'n'or
    Evite d'utiliser file comme nom de variable. File est un objet, tu risques de perturber VBA en l'utilisant comme tu le fais
    A toutes fins utiles

    Ok.
    J'en suis donc ici :


    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
     
     
     
    For Each fic In dossier.Files
     
        f = fic.Name
     
        Set Fichier_xls_dest = CreateObject("Excel.application")
        Fichier_xls_dest.Workbooks.Open Filename:=DestinationFile, editable:=True
        Fichier_xls_dest.Application.Sheets.Add.Name = "Toto"
        Fichier_xls_dest.Application.DisplayAlerts = False
        Fichier_xls_dest.ActiveWorkbook.Close savechanges:=True
        Fichier_xls_dest.Application.Quit
        Fichier_xls_dest.Application.DisplayAlerts = True
     
        Application.CutCopyMode = False
        Workbooks.Open fic
        ActiveWorkbook.Worksheets("Activité mois").Unprotect (pass)
        Sheets("Activité mois").Copy After:=Workbooks(DestinationFile).Sheets(Workbooks("Toto").Sheets.Count)
        Cells.Copy
        Range("A1").PasteSpecial Paste:=xlPasteValues
        ActiveWorkbook.Close savechanges:=False
     
     
     
    Next
    En fait je dois déproteger mon fichier Excel source (la feuille Activité mois).

    Mon application plante à cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("Activité mois").Copy After:=Workbooks(DestinationFile).Sheets(Workbooks("Toto").Sheets.Count)
        Cells.Copy
    L'indice n'appartient pas à la séléction. A ce stade, j'ai mon fichier source ouvert, mon fichier de destination est fermé mais je lui est rajouter la feuille Toto pour accueillir la copie de "Activité mois". Cela vient peut-être du WorkBooks de destination, 'jai mis son chemin DestinationFile mais ce n'est peut-être pas ça ...

  7. #7
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Par défaut
    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
    For Each fic In dossier.Files
     
        f = fic.Name
     
        Set Fichier_xls_dest = CreateObject("Excel.application")
        Fichier_xls_dest.Workbooks.Open Filename:=DestinationFile, editable:=True
        'destName = Fichier_xls_dest.Workbooks.Name
        'MsgBox (destName)
        Fichier_xls_dest.Application.Sheets.Add.Name = "Toto"
        Fichier_xls_dest.Application.DisplayAlerts = False
        Fichier_xls_dest.ActiveWorkbook.Close savechanges:=True
        Fichier_xls_dest.Application.Quit
        Fichier_xls_dest.Application.DisplayAlerts = True
     
        Application.CutCopyMode = False
        Workbooks.Open fic
     
        ActiveWorkbook.Worksheets("Activité mois").Unprotect (pass)
        Workbooks.Open DestinationFile
        Sheets("Activité mois").Copy After:=Workbooks("RA-CF-TMA-2007-M03.xls").Sheets(Workbooks("Toto").Sheets.Count)
        Cells.Copy
        Range("A1").PasteSpecial Paste:=xlPasteValues
     
    'For Each x In Sheets("Activité mois").Range("A1:" & Sheets("Activité mois").Range("E65536").End(xlUp).Address)
       ' x.Copy (Sheets("Toto").Cells(x.Row, x.Column))
    'Next
     
     
        ActiveWorkbook.Close savechanges:=False
     
       'inode = Importation_donnees_Rnd(file, DestinationFile, "Activité mois", f)
     
     
    Next
    Voici ma denière version en date, j'ai essayé un autre code de copie mais rien n'y fait : l"indice n'appartient pas à la séléction. Lors de la copie, mon fichier source et destination sont ouvert (destination actif).

Discussions similaires

  1. [XL-2010] VBA - Copier une feuille Excel à partir d'un fichier XSLM partagé
    Par joboljobol dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/05/2015, 08h01
  2. [Toutes versions] copier une feuille excel en VBA
    Par thirdeye dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/09/2010, 10h39
  3. copier une feuille excel vers un autre fichier excel en access VBA
    Par acbdev dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/03/2008, 09h32
  4. Comment copier une feuille EXCEL sous ACCESS?
    Par PAULOM dans le forum Access
    Réponses: 7
    Dernier message: 28/04/2006, 10h01
  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