Copier une feuille d'un fichier A vers un fichier B(excel)

Copier une feuille d'un fichier A vers un fichier B(excel) - VB/VBA/VBS - Programmation

Marsh Posté le 20-03-2007 à 16:59:28    

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. Function Importation_donnees_Rnd(FichierSource As file, FichierDest As String, OngletSource As String, OngletDest As String)
  2.  
  3.  
  4.   Set Fichier_xls_Source = GetObject(FichierSource)
  5.   Set Fichier_xls_Source = GetObject(, "Excel.application" )
  6.   Fichier_xls_Source.Application.Visible = True
  7.  
  8.  
  9.   Fichier_xls_Source.Application.Workbooks.Open Filename:=FichierSource
  10.  
  11.  
  12.   Fichier_xls_Source.Application.ActiveWorkbook.Worksheets(OngletSource).Activate
  13.   Fichier_xls_Source.Application.ActiveWorkbook.Worksheets(OngletSource).Cells.Select
  14.   Fichier_xls_Source.Application.Selection.Copy
  15.  
  16.  
  17.   Set Fichier_xls_dest = CreateObject("Excel.application" )
  18.  
  19.   Fichier_xls_dest.DisplayAlerts = False
  20.   Fichier_xls_dest.Workbooks.Open Filename:=FichierDest, editable:=True
  21.   Fichier_xls_dest.Visible = True
  22.  
  23.  
  24.   Fichier_xls_dest.Application.Worksheets(OngletDest).Activate
  25.  
  26.   Fichier_xls_dest.Application.Worksheets(OngletDest).Cells.Select
  27.   Fichier_xls_dest.Application.Worksheets(OngletDest).Paste
  28.  
  29.   Fichier_xls_dest.Application.DisplayAlerts = False
  30.   Fichier_xls_dest.ActiveWorkbook.SaveAs Filename:=FichierDest
  31.   Fichier_xls_dest.Application.Quit
  32.   Fichier_xls_dest.Application.DisplayAlerts = True
  33.  
  34.   Fichier_xls_Source.Application.DisplayAlerts = False
  35.   Fichier_xls_Source.Application.Quit
  36.   Fichier_xls_Source.Application.DisplayAlerts = True
  37.   Set Fichier_xls_Source = Nothing
  38.   Set Fichier_xls_dest = Nothing
  39.  
  40. End Function


 
Mon "onglet de destination" n'existe pas, je dois en créer un pour à chaque passage dans ce genre de fonction


Message édité par skyst3f le 20-03-2007 à 17:11:26
Reply

Marsh Posté le 20-03-2007 à 16:59:28   

Reply

Marsh Posté le 20-03-2007 à 17:10:30    

As-tu déjà du code qui te retourne une erreur au moins, qu'on puisse te le faire avec un début stp ? :)

Reply

Marsh Posté le 20-03-2007 à 17:41:33    

Oui, alors voilà ce que j'ai pour l'instant.
 
J'ai une fonction trait2() comme suit :
 

Code :
  1. Sub Trait2()
  2. Dim pass As String
  3. Dim file As file, f As String
  4. Dim test As Integer
  5. Application.ScreenUpdating = False
  6. For Each file In dossier.Files
  7.    
  8.     f = file.Name
  9.     test = Importation_donnees_Rnd(file, DestinationFile, "Activité mois", f)
  10.                  
  11. Next
  12. End Sub


 
 
Ce genre de boucle fonctionne, je m'en sers dans mes traitements avant l'appel de cette fonction.
 
Bon après je laisse bosser le code que j'ai déjà posté et ça ne fonctionne pas comme je le voudrais. J'ai rajouté une instruction pour qu'une feuille soit crée (ongletdest).
 
Alors déjà j'ai un message d'erreu ici :Fichier_xls_Source.Application.Workbooks.Open Filename:=FichierSource  il me dit que le fichier est déjà ouvert... mais je ne l'ai pas ouvert! enfin si plus haut dans mon code mais je l'ai refermé (j'ai vévrifié).
 
Ensuite, à un moment donnée cette fonction avait marché mais elle ne m'avais pas fait un collage spéciale par valeur. Quand j'ai modifié le code pour rajouter : .PasteSpecial : ça plante.

Reply

Marsh Posté le 20-03-2007 à 17:48:14    

skyst3f a écrit :

Oui, alors voilà ce que j'ai pour l'instant.
Alors déjà j'ai un message d'erreu ici :Fichier_xls_Source.Application.Workbooks.Open Filename:=FichierSource  il me dit que le fichier est déjà ouvert... mais je ne l'ai pas ouvert! enfin si plus haut dans mon code mais je l'ai refermé (j'ai vévrifié).
 
Ensuite, à un moment donnée cette fonction avait marché mais elle ne m'avais pas fait un collage spéciale par valeur. Quand j'ai modifié le code pour rajouter : .PasteSpecial : ça plante.


 
1. Tu peux faire un workbook(FichierSource).activate dans le cas où il serait déjà ouvert :)
2. qu'est-ce qui plante dans le cas du pastespecial par valeur ?

Reply

Marsh Posté le 20-03-2007 à 17:49:46    

jpcheck a écrit :

1. Tu peux faire un workbook(FichierSource).activate dans le cas où il serait déjà ouvert :)
2. qu'est-ce qui plante dans le cas du pastespecial par valeur ?


 
Eh bien en fait la fonction l'ouvre ici :

Code :
  1. Set Fichier_xls_Source = GetObject(FichierSource) 
  2. Set Fichier_xls_Source = GetObject(, "Excel.application" )


 
Je n'y comprends plus rien moi....


Message édité par skyst3f le 20-03-2007 à 17:52:50
Reply

Marsh Posté le 20-03-2007 à 17:54:22    

exact, donc tu l'ouvre bien deux fois, une fois avec
Set Fichier_xls_Source = GetObject(FichierSource)    
et une autre fois avec
Fichier_xls_Source.Application.Workbooks.Open Filename:=FichierSource
 
donc il faut supprimer une des deux ouvertures :D

Reply

Marsh Posté le 20-03-2007 à 17:58:58    

jpcheck a écrit :

exact, donc tu l'ouvre bien deux fois, une fois avec
Set Fichier_xls_Source = GetObject(FichierSource)    
et une autre fois avec
Fichier_xls_Source.Application.Workbooks.Open Filename:=FichierSource
 
donc il faut supprimer une des deux ouvertures :D


 
Ok, c'est bon, problème corrigé.
 
Maintenant j'en ai un deuxième : le "copie-collage", et spéciale en plus.
 
 
ça : Fichier_xls_dest.Application.Worksheets(OngletDest).Paste , ça ne me donne pas ce que je veux. Moi je veux un collage spécial par valeur. J'ai essayé une méthode d'une de mes précédentes fonctions qui foirent :
 

Code :
  1. Fichier_xls_dest.Application.Worksheets(OngletDest).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  2. :=False, Transpose:=False


 
Mais ça bloque : "Erreur définie par l'application ou par l'objet"....
 
Que faire?

Reply

Marsh Posté le 20-03-2007 à 19:48:09    

skyst3f a écrit :


 

Code :
  1. Fichier_xls_dest.Application.Worksheets(OngletDest).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  2. :=False, Transpose:=False


 
Mais ça bloque : "Erreur définie par l'application ou par l'objet"....
 
Que faire?


 
qu est ce que tu veux faire ?
tu veux copier la feuille entière ou une partie de la feuille ?
 
je viens de tester de copier une feuille dans un autre classeur et je n'y arrive pas (sauf erreur de ma part)--> je suis pas sur que copier une feuille soit possible
 
par contre copier une plage de données je sais faire.
a toi de voir mais dans le cas de la copie de la feuille je peux pas t'aider
 
par défaut quand tu crées un nouveau fichier excel il y a combien de feuille ? 3 ?
si c'est pas le cas: outil \ option \ general \ nbre de feuille ds nveaux classeur \ 3

Reply

Marsh Posté le 20-03-2007 à 19:58:25    

sinon pour ton problème essaye avec ca
 
Cells.Select
Selection.Copy
Sheets("Feuil3" ).Select
Worksheets(OngletDest).Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 
a mon avis ca marchait pas parce que tu n'avais pas vraiment de sélection


Message édité par ingenieurcesi le 20-03-2007 à 20:00:39
Reply

Marsh Posté le 21-03-2007 à 09:49:37    

Bon j'ai recodé selon les conseils d'un autre forumeurs ma fonction de copie mais ça ne fonctionne toujours pas : l'indice n'appartient pas à la séléction.
 

Code :
  1. For Each fic In dossier.Files
  2.    
  3.     f = fic.Name
  4.    
  5.     Set Fichier_xls_dest = CreateObject("Excel.application" )
  6.     Fichier_xls_dest.Workbooks.Open Filename:=DestinationFile, editable:=True
  7.     'destName = Fichier_xls_dest.Workbooks.Name
  8.     'MsgBox (destName)
  9.     Fichier_xls_dest.Application.Sheets.Add.Name = "Toto"
  10.     Fichier_xls_dest.Application.DisplayAlerts = False
  11.     Fichier_xls_dest.ActiveWorkbook.Close savechanges:=True
  12.     Fichier_xls_dest.Application.DisplayAlerts = True
  13.    
  14.     Application.CutCopyMode = False
  15.     Workbooks.Open fic
  16.     ActiveWorkbook.Worksheets("Activité mois" ).Unprotect (pass)
  17.     Sheets("Activité mois" ).Copy After:=Workbooks("RA-CF-TMA-2007-M03.xls" ).Sheets(Workbooks("Toto" ).Sheets.Count)
  18.     Cells.Copy
  19.     Range("A1" ).PasteSpecial Paste:=xlPasteValues
  20.     Fichier_xls_dest.Application.DisplayAlerts = False
  21.     Fichier_xls_dest.ActiveWorkbook.Close savechanges:=True
  22.     Fichier_xls_dest.Application.Quit
  23.     Fichier_xls_dest.Application.DisplayAlerts = True
  24.     ActiveWorkbook.Close savechanges:=False
  25.  
  26.    'inode = Importation_donnees_Rnd(file, DestinationFile, "Activité mois", f)
  27.  
  28.                
  29. Next


 
En gros, je crée une nouvelle feuille qui s'apelle "Toto" dans mon fichier de destination. Puis je veux copier la feuille Activité mois du fichier source et ensuite je fais un copier/coller spécial par valeur dans le fichier de destination, sur l'onglet toto.
 
le blocage a lieu au moment de la copie.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed