Soutenez-nous
Publicité
+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 29
  1. #1
    Nouveau Membre du Club
    Inscrit en
    février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 174
    Points : 30
    Points
    30

    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 :
    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
    Inscrit en
    février 2005
    Messages
    12 466
    Détails du profil
    Informations forums :
    Inscription : février 2005
    Messages : 12 466
    Points : 13 431
    Points
    13 431

    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 :
    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 :
    For each LeClasseur in Application.workbooks
    en évitant le fichier Destination... dont tu connais le nom
    Code :
    If not LeClasseur.name = "Destination.xls" then
    et si tu as instancié ton fichier au départ, c'est plus court
    Code :
    Set ClD = Workbooks("Destination.xls")
    Ensuite tu utilises ClD à la place de Workbooks("Destination.xls")

  3. #3
    Nouveau Membre du Club
    Inscrit en
    février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 174
    Points : 30
    Points
    30

    Par défaut

    Je liste mes fichier comme ceci :

    Code :
    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
    Nouveau Membre du Club
    Inscrit en
    février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 174
    Points : 30
    Points
    30

    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 :
    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
    Inscrit en
    février 2005
    Messages
    12 466
    Détails du profil
    Informations forums :
    Inscription : février 2005
    Messages : 12 466
    Points : 13 431
    Points
    13 431

    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
    Nouveau Membre du Club
    Inscrit en
    février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 174
    Points : 30
    Points
    30

    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 :
    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 :
    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
    Nouveau Membre du Club
    Inscrit en
    février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 174
    Points : 30
    Points
    30

    Par défaut

    Code :
    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).

  8. #8
    Nouveau Membre du Club
    Inscrit en
    février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 174
    Points : 30
    Points
    30

    Par défaut

    J'ai même essayé ça :

    Code :
    1
    2
     Workbooks(1).Sheets("Activité mois").Copy After:=Workbooks(2).Sheets(Workbooks("Toto").Sheets.Count)
        Cells.Copy

    Mais l'indice n'appartient pas à la séléction....

  9. #9
    Inactif
    Avatar de ouskel'n'or
    Inscrit en
    février 2005
    Messages
    12 466
    Détails du profil
    Informations forums :
    Inscription : février 2005
    Messages : 12 466
    Points : 13 431
    Points
    13 431

    Par défaut

    Je reprends ton code du post 6. Ajoute la ligne en rouge
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
        Application.CutCopyMode = False
        Workbooks.Open fic
        DoEvents 'Laisse le temps à ton fichier de s'ouvrir
        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
    Tu dis

  10. #10
    Nouveau Membre du Club
    Inscrit en
    février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 174
    Points : 30
    Points
    30

    Par défaut

    Citation Envoyé par ouskel'n'or
    Je reprends ton code du post 6. Ajoute la ligne en rouge
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
        Application.CutCopyMode = False
        Workbooks.Open fic
        DoEvents 'Laisse le temps à ton fichier de s'ouvrir
        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
    Tu dis

    Même problème....

  11. #11
    Inactif
    Avatar de ouskel'n'or
    Inscrit en
    février 2005
    Messages
    12 466
    Détails du profil
    Informations forums :
    Inscription : février 2005
    Messages : 12 466
    Points : 13 431
    Points
    13 431

    Par défaut

    Citation Envoyé par Tu
    Même problème....
    Et ça te fait rire ?
    Alors tu ne m'as pas tout dit !
    Donne-nous
    1 - le nom du fichier dans lequel se trouve la macro
    2 - Le nom du fichier dans lequel setrouve la feuille récapitulative
    3 - Le nom de la feuille que tu copies
    4 - Le répertoire dans lequel tu listes les fichiers
    5 - Le code qui te permet de lister les fichiers
    Et là,on verra ce que tu peux faire
    Je n'ai pas compris ce que tu "bricoles", là
    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
    et ça m'aiderait à comprendre si tu répondais à mes 5 (premières) questions

  12. #12
    Nouveau Membre du Club
    Inscrit en
    février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 174
    Points : 30
    Points
    30

    Par défaut

    Citation Envoyé par ouskel'n'or
    Et ça te fait rire ?
    Alors tu ne m'as pas tout dit !
    Donne-nous
    1 - le nom du fichier dans lequel se trouve la macro
    2 - Le nom du fichier dans lequel setrouve la feuille récapitulative
    3 - Le nom de la feuille que tu copies
    4 - Le répertoire dans lequel tu listes les fichiers
    5 - Le code qui te permet de lister les fichiers
    Et là,on verra ce que tu peux faire
    Je n'ai pas compris ce que tu "bricoles", là
    et ça m'aiderait à comprendre si tu répondais à mes 5 (premières) questions
    Ouh là non ça ne me fait pas rire du tout, le smileys c'était juste pour dire que je commençais à devenir dingue

    Le nom du fichier où ce trouve la macro? eh bien comment ça? dans un fichier excel que j'ouvre et qui comporte un bouton executer lançant tout un tas de fonction sur ces fameux fichiers sources.

    je vais chercher des fichiers sources dans un répertoire et les liste avec cette fameuse boucle for fic in dossier.files ....next. Le repertoire d'où viennent les fichiers changent à chaque lancement du programme, il est determiné en fonction des choix de l'utlisateur.


    Avant d'arriver à cette fonction, j'utilise déjà cette boucle et elle fonctionne, mais peut-être dois-je m'y prendre autrement...


    Pour faire simple, les fichiers sources se trouve dans c:\sources. J'ouvre un template dans c:\template\template.xls, et pour chaque fichier dans c:\sources, je crée une feuille dans template.xls. Dans chaque fichier source il y a une feuille nommé "Activité mois", je dois la copier/coller par valeur dans la nouvelle feuille crée dans template.xls.

    Ah oui j'oubliais, les feuilles du fichier source sont protegés mais la déprotection fonctionne.

    Je ne peux pas uploadé le programme quelque part, je suis stagiaire dans une boite et je compte le rester.

    Mais je suis bloqué depuis plusieurs jours sur ce copier/coller

  13. #13
    Inactif
    Avatar de ouskel'n'or
    Inscrit en
    février 2005
    Messages
    12 466
    Détails du profil
    Informations forums :
    Inscription : février 2005
    Messages : 12 466
    Points : 13 431
    Points
    13 431

    Par défaut

    Copie : Feuille "Activité mois" dans c:\Sources\*.xls
    Coller : c:\template\template.xls

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for fic in dossier.files
         Debug.print fic.name
         Fic.open
         Application.CutCopyMode = False
         Fic.Worksheets("Tata").Copy After:=Workbooks("template.xls").Sheets(Workbooks("template.xls").sheets.Count)
         Cells.Copy
         Range("A1").PasteSpecial Paste:=xlPasteValues
         Fic.close false
    next
    Debug.print pour vérifier que tes noms de fichiers sont bien des noms avec le chemin. Dans l'éditeur VB - Affichage -> Fenêtre exécution. Cela t'affichera la fenêtre qui te permettra de vérifier.
    Je n'ai pas testé (!) Tu peux faire ça pour moi ?
    A+

    Edit
    Si Fic est bien déclaré " as Workbook "

  14. #14
    Nouveau Membre du Club
    Inscrit en
    février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 174
    Points : 30
    Points
    30

    Par défaut

    Non fic n'est pas un workbook, c'est uen variable de type file... du coup ça ne veut même pas compiler. j'ai enlever les fic. et j'ai de nouveau L'indice n'appartient pas à la selection....

  15. #15
    Inactif
    Avatar de ouskel'n'or
    Inscrit en
    février 2005
    Messages
    12 466
    Détails du profil
    Informations forums :
    Inscription : février 2005
    Messages : 12 466
    Points : 13 431
    Points
    13 431

    Par défaut

    Tes fichiers sont bien des workbooks ? Non ?
    C'est pour ça que je te demandais le code qui liste les fichiers. Mais un de ces jours, on aura tout, faut pas désespérer... et se montrer patient

  16. #16
    Nouveau Membre du Club
    Inscrit en
    février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 174
    Points : 30
    Points
    30

    Par défaut

    C'est peut être ça que tu voulais en fait :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Dim fso As New FileSystemObject
    Dim fic as File
    Dim PathProjet as String
    Dim dossier As Folder
     
    PathProjet = Feuil1.Cells(indicePath + 1, 3) + "\" + ComboBoxAnnee.Value + "\" + ComboBoxAnnee.Value + "-" & nummois
     
    Set dossier = fso.GetFolder(PathProjet) 
     
     
    For Each fic In dossier.Files
        etc....
     
    Next

  17. #17
    Inactif
    Avatar de ouskel'n'or
    Inscrit en
    février 2005
    Messages
    12 466
    Détails du profil
    Informations forums :
    Inscription : février 2005
    Messages : 12 466
    Points : 13 431
    Points
    13 431

    Par défaut

    Citation Envoyé par skystef
    C'est peut être ça que tu voulais en fait :
    Oui, au fait !
    Une seconde, je regarde (j'utilise toujours et encore "Dir")

  18. #18
    Nouveau Membre du Club
    Inscrit en
    février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 174
    Points : 30
    Points
    30

    Par défaut

    Oups j'avais pas validé..


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Dim fso As New FileSystemObject
    Dim fic as File
    Dim PathProjet as String
    Dim dossier As Folder
     
    PathProjet = Feuil1.Cells(indicePath + 1, 3) + "\" + ComboBoxAnnee.Value + "\" + ComboBoxAnnee.Value + "-" & nummois
     
    Set dossier = fso.GetFolder(PathProjet) 
     
     
    For Each fic In dossier.Files
        etc....
     
    Next

  19. #19
    Inactif
    Avatar de ouskel'n'or
    Inscrit en
    février 2005
    Messages
    12 466
    Détails du profil
    Informations forums :
    Inscription : février 2005
    Messages : 12 466
    Points : 13 431
    Points
    13 431

    Par défaut

    Voilà ! J'ai venu, j'ai vu, j'ai vaincu !
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub ListerLesFichierFaçonFolder()
    Dim fso As New FileSystemObject
    Dim fic As file
    Dim PathProjet As String
    Dim dossier As Folder
    Dim Wk As Variant
    PathProjet = "D:\xls\"
     
    Set dossier = fso.GetFolder(PathProjet)
     
     
    For Each fic In dossier.Files
        Wk = PathProjet & fic.Name
        Workbooks.Open Filename:=Wk
    Next
    End Sub
    Punaise ! J'ai lancé ça et j'ai vite fait un Ctrl + Pause, ça m'a ouvert un trentaine de fichiers
    Qu'est-ce qu'on rigole !
    Tu sauras adapter ?
    A+

  20. #20
    Inactif
    Avatar de ouskel'n'or
    Inscrit en
    février 2005
    Messages
    12 466
    Détails du profil
    Informations forums :
    Inscription : février 2005
    Messages : 12 466
    Points : 13 431
    Points
    13 431

    Par défaut

    Je pense qu'on doit pouvoir préciser le type de fichier qu'on désire ouvrir, avec FileSystemObject mais je n'ai pas pris le temps de rechercher. Je ne voulais pas que tu perdes encore une demie-journée
    Je regarde et si je trouve, je te mets ça. A moinse que bbil ou un érudit quelconque passe par là

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •