Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1471 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] 3 fichier Excel dans un seul !?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA] 3 fichier Excel dans un seul !?

n°705846
petburn
Posté le 22-04-2004 à 12:36:19  profilanswer
 

bonjour, j'ai un ensemble de fichiers Excel, créé à partir de BO.
 
le problème, c'est qu'ils sont regroupé par trois.
 
je souhaiterais donc en VBA, faire un truc du genre :
 
j'ai donc 3 fichiers (ils ont le même nom, suf un indice...)
 
je veux :
créer un nouveau fichier cible Excel (même nom, mais sans l'indice donc.)
copier la feuille 1 du fichier 1 dans la feuille 1 du fichier cible
copier la feuille 1 du fichier 2 dans la feuille 2 du fichier cible
copier la feuille 1 du fichier 3 dans la feuille 3 du fichier cible
 
bien sur sauvegarder le fichier Excel cible.
 
supprimer les 3 anciens fichier (qui ne me serve plus...)
( un kill fichier1... devrait suffir)
 
voila,
 
et je bloque bcp.. en fait, je ne vois pas trop comment partir...
 
donc si vous avez une idée...
 
ca sera avec plaisir.
 
merci d'avance.
 
et bonne journée.

mood
Publicité
Posté le 22-04-2004 à 12:36:19  profilanswer
 

n°708345
petburn
Posté le 26-04-2004 à 10:25:37  profilanswer
 

personne ????
même pas une petite macro ... même si elle n'est pas spécialement faite pour BO (vu que cela ne touchera aucun élement BO.. mais que des fichiers Excels, elle peut etre lancé de n'importe quelle macro VBA...)

n°708421
JihemAir
Je sais pas
Posté le 26-04-2004 à 11:33:08  profilanswer
 

Une toute petite macro, à peine dégrossie:
 
Public Sub CopySheet()
Dim strNewFile As String
Dim newDoc As Workbook
Dim shTemp As Worksheet
 
    ' Création d'un nouveau fichier
    ' que l'on ouvre.
    strNewFile = "c:\temp\New.xls"
    Set newDoc = Workbooks.Add
     
    ' Ouverture du fichier 1
    Workbooks.Open "Fic1.xls"
     
    ' On récupère la feuille du fichier 1
    Set shTemp = Workbooks("Fic1.xls" ).Worksheets("X1" )
     
    ' On copie dans le nouveau fichier
    shTemp.Copy after:=newDoc.Worksheets(1)
     
End Sub
 
 
Attention, il reste du boulot:
adapter aux 3 fichiers (je ne connais pas les noms),
s'assurer qu'il n'existe pas déjà une feuille du même nom dans le fichier destination,
sauver le fichier destination,
Détruire les fichiers sources...
 


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
n°708547
petburn
Posté le 26-04-2004 à 13:38:53  profilanswer
 

je met à ma sauce et je teste tout de suite...
 
merci !!!!  :hello:

n°708695
petburn
Posté le 26-04-2004 à 15:10:19  profilanswer
 

ca marche pas,
 
j'ai modifié comme ca :

Code :
  1. Public Sub CopySheet(lName As String)
  2. Dim strNewFile As String
  3. Dim newDoc As Workbook
  4. Dim shTemp As Worksheet
  5. Dim dpt(1 To 4) As String
  6.         dpt(1) = "22"
  7.         dpt(2) = "29"
  8.         dpt(3) = "35"
  9.         dpt(4) = "56"
  10.        
  11.     For i = LBound(dpt) To UBound(dpt)
  12.    
  13.         ' Création d'un nouveau fichier
  14.         ' que l'on ouvre.
  15.         strNewFile = "P:\test\prompt\" & lName & "-" & dpt(i) & ".xls"
  16.         Set newDoc = Workbooks.Add
  17.    
  18.         ' Ouverture du fichier 1
  19.         Workbooks.Open "P:\test\prompt\" & lName & "-TabD-" & dpt(i) & ".xls"
  20.    
  21.         ' On récupère la feuille du fichier 1
  22.         Set shTemp = Workbooks(1).Worksheets(1)
  23.        
  24.         ' On copie dans le nouveau fichier
  25.         shTemp.Copy after:=newDoc.Worksheets(1)
  26.        
  27.         newDoc.SaveAs (strNewFile)
  28.         newDoc.Close
  29.         Workbooks.Close
  30.     Next
  31.    
  32. End Sub


 
je ne vois pas d'ou ca vien...
les fichiers (l y en a 4) sont bien créé... mais ca merdouille... puisque les fichiers sont mal fermé... (il reste un processus EXCEL !!!)
 
et les fichiers créés ne contiennent rien... sauf une feuille en plus :
j'ai donc :
feuil1 - feuil1 (2) - feuil2 - feuil3
 
je ne comprends pas ce qui merde....
j'ai oublié de faire quoi ?
qu'est ce que j'ai mal fait ?


Message édité par petburn le 26-04-2004 à 15:11:40
n°708729
JihemAir
Je sais pas
Posté le 26-04-2004 à 15:29:37  profilanswer
 

Ce qui ne va pas?
Set shTemp = Workbooks(1).Worksheets(1)
Tu copies toujours la feuille 1 du fichier 1 du classeur.
 
newDoc.Close  
Workbooks.Close
Tu fermes le fichier dans lequel tu vas effectuer la prochaine copie, puis tu fermes ton classeur.
 
 
Essaie qq chose comme ça:
 
Public Sub CopySheet(lName As String)
Dim strNewFile As String, strOldFile As String
Dim newDoc As Workbook
Dim shTemp As Worksheet
Dim i As Integer
Dim dpt(1 To 4) As String
 
          dpt(1) = "22"
          dpt(2) = "29"
          dpt(3) = "35"
          dpt(4) = "56"
             
      For i = LBound(dpt) To UBound(dpt)
       
          ' Création d'un nouveau fichier
          ' que l'on ouvre.
          strNewFile = "P:\test\prompt\" & lName & "-" & dpt(i) & ".xls"
          Set newDoc = Workbooks.Add
         
          ' Ouverture du fichier source
          strOldFile = "P:\test\prompt\" & lName & "-TabD-" & dpt(i) & ".xls"
          Workbooks.Open strOldFile
         
          ' On récupère la feuille du fichier 1
          Set shTemp = Workbooks("strOldFile" ).Worksheets(1)
         
          ' On copie dans le nouveau fichier
          shTemp.Copy after:=newDoc.Worksheets(1)
           
          newDoc.SaveAs (strNewFile)
          Workbooks("strOldFile" ).Close False
      Next
         
  End Sub
 
 
Et salut les bretons (22, 29, 35, 56).


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
n°708745
petburn
Posté le 26-04-2004 à 15:39:13  profilanswer
 

ca marche pas, il ne veux pas de cette ligne :
 

Code :
  1. Set shTemp = Workbooks("strOldFile" ).Worksheets(1)


 
et oui, c pour la bretgane... ;) (je suis à rennes... et je bosse pour les bretons... ;) )

n°708763
JihemAir
Je sais pas
Posté le 26-04-2004 à 15:47:58  profilanswer
 

Erreur, j'ai laissé les guillemets...
Set shTemp = Workbooks(strOldFile).Worksheets(1)
 
Mais tu es sur que la feuille à copier est la 1ère du document?
Il vaut mieux donner son nom:
Set shTemp = Workbooks(strOldFile).Worksheets("NomFeuille" )


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
n°708812
petburn
Posté le 26-04-2004 à 16:17:38  profilanswer
 

même sans les guillemets, ca marche pas... :cry:  
 
et pour le nom, je changerai une fois que ca marchera ...
(il faudra mettre des guillemets ???)

n°708821
JihemAir
Je sais pas
Posté le 26-04-2004 à 16:28:59  profilanswer
 

Set shTemp = Worksheets(1)
 
Yes, il faudra mettre les guillemets si tu donnes lenom de la feuille.


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
mood
Publicité
Posté le 26-04-2004 à 16:28:59  profilanswer
 

n°708885
petburn
Posté le 26-04-2004 à 16:54:03  profilanswer
 

merci !!!!!  :love:  ca marche...
 
par contre, il a aussi fallu que je modifie aussi la fin...
 

Code :
  1. Workbooks.Close

au lieu de :

Code :
  1. Workbooks("strOldFile" ).Close False


 
d'ailleurs, je ne comprends pas ce que le False venait faire la...
 
bref, maintenant, je vais voir pour faire ca avec 3 fichiers dans 1 seul...
 
donc il y aura peut etre d'autres questions...
 
en tout cas ... merci bcp JihEmAir !!!!!!!!  :hello:

n°708903
petburn
Posté le 26-04-2004 à 17:04:20  profilanswer
 

bon nouvelles erreurs...
 
voici le code, pour mettre les 3 fichiers dans un seul.
 

Code :
  1. Public Sub CopySheet(lName As String)
  2. Dim strNewFile As String, strOldFile As String
  3. Dim newDoc As Workbook
  4. Dim shTemp As Worksheet
  5. Dim i As Integer
  6. Dim dpt(1 To 4) As String
  7.           dpt(1) = "22"
  8.           dpt(2) = "29"
  9.           dpt(3) = "35"
  10.           dpt(4) = "56"
  11.            
  12.       For i = LBound(dpt) To UBound(dpt)
  13.        
  14.           ' Création d'un nouveau fichier
  15.           ' que l'on ouvre.
  16.           strNewFile = "P:\test\prompt\" & lName & "-" & dpt(i) & ".xls"
  17.           Set newDoc = Workbooks.Add
  18.        
  19.          
  20.          
  21.          
  22.           ' Ouverture du fichier source "tabD"
  23.           strOldFile = "P:\test\prompt\" & lName & "-TabD-" & dpt(i) & ".xls"
  24.           Workbooks.Open strOldFile
  25.        
  26.           ' On récupère la feuille du fichier 1
  27.           Set shTemp = Worksheets(1)
  28.        
  29.           ' On copie dans le nouveau fichier
  30.           shTemp.Copy after:=newDoc.Worksheets(1)
  31.            
  32.           newDoc.SaveAs (strNewFile)
  33.           Workbooks.Close
  34.          
  35.          
  36.          
  37.          
  38.           ' Ouverture du fichier source "tabS"
  39.           strOldFile = "P:\test\prompt\" & lName & "-TabS-" & dpt(i) & ".xls"
  40.           Workbooks.Open strOldFile
  41.        
  42.           ' On récupère la feuille du fichier 1
  43.           Set shTemp = Worksheets(1)
  44.        
  45.           ' On copie dans le nouveau fichier
  46.           shTemp.Copy after:=newDoc.Worksheets(2)
  47.            
  48.           newDoc.SaveAs (strNewFile)
  49.           Workbooks.Close
  50.          
  51.          
  52.            
  53.            ' Ouverture du fichier source "Graph"
  54.           strOldFile = "P:\test\prompt\" & lName & "-Graph-" & dpt(i) & ".xls"
  55.           Workbooks.Open strOldFile
  56.        
  57.           ' On récupère la feuille du fichier 1
  58.           Set shTemp = Worksheets(1)
  59.        
  60.           ' On copie dans le nouveau fichier
  61.           shTemp.Copy after:=newDoc.Worksheets(3)
  62.            
  63.           newDoc.SaveAs (strNewFile)
  64.           Workbooks.Close
  65.      
  66.      
  67.      
  68.       Next
  69.        
  70.   End Sub


 
il me marque une erreur au niveau du 2ème :

Code :
  1. shTemp.Copy after:=newDoc.Worksheets(2)


 
 
qu'est ce qui merdouille ?????
 
nom de l'erreur : erreur automation
l'objet invoqué s'est déconnecté de ses clients !!!???? :??:  :??:


Message édité par petburn le 26-04-2004 à 17:17:51
n°709287
JihemAir
Je sais pas
Posté le 27-04-2004 à 07:54:18  profilanswer
 

Tu as fermé Workbook auquel newDoc fait référence, bref, tu lui coupes l'herbe sous le pied.  
 
Il faut conserver la syntaxe que je t'ai donnée, mais j'avais une erreur dans le code (toujours les guillemets):

Code :
  1. Workbooks("strOldFile" ).Close False


a remplacer par

Code :
  1. Workbooks(strOldFile).Close False


 
Le False, c'est pour dire qu'on ne sauvegarde pas en sortant.


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
n°709312
petburn
Posté le 27-04-2004 à 09:00:29  profilanswer
 

il ne veut pas ...
 
l'indice n'appartient pas à la sélection... !!!!???
 
code (que j'ai modifié) :

Code :
  1. Public Sub CopySheet(lName As String)
  2. Dim strNewFile As String, strOldFile As String
  3. Dim newDoc As Workbook
  4. Dim shTemp As Worksheet
  5. Dim i As Integer
  6. Dim dpt(1 To 4) As String
  7.     dpt(1) = "22"
  8.     dpt(2) = "29"
  9.     dpt(3) = "35"
  10.     dpt(4) = "56"
  11.    
  12. Dim rep(1 To 3) As String
  13.     rep(1) = "-TabD-"
  14.     rep(2) = "-TabS-"
  15.     rep(3) = "-Graph-"
  16.            
  17.     For i = LBound(dpt) To UBound(dpt)
  18.        
  19.           ' Création d'un nouveau fichier
  20.           ' que l'on ouvre.
  21.           strNewFile = "P:\test\prompt\" & lName & "-" & dpt(i) & ".xls"
  22.           Set newDoc = Workbooks.Add
  23.        
  24.         For j = LBound(rep) To UBound(rep)
  25.          
  26.              
  27.           ' Ouverture du fichier source "tabD"
  28.           strOldFile = "P:\test\prompt\" & lName & rep(j) & dpt(i) & ".xls"
  29.           Workbooks.Open strOldFile
  30.        
  31.           ' On récupère la feuille du fichier 1
  32.           Set shTemp = Worksheets(1)
  33.        
  34.           ' On copie dans le nouveau fichier
  35.           shTemp.Copy after:=newDoc.Worksheets(j)
  36.            
  37.           newDoc.SaveAs (strNewFile)
  38.           Workbooks(strOldFile).Close False
  39.          
  40.         Next
  41.      
  42.       Next
  43.        
  44.   End Sub


 
il faut que j'enlève des trucs des boucles... ???

n°709322
JihemAir
Je sais pas
Posté le 27-04-2004 à 09:13:11  profilanswer
 

Il ne connait pas Worksheets(j) vu que j, c'est l'indice de la feuille après laquelle il doit copier la nouvelle et que j est aussi ton compteur de boucle (qui augmente à chaque fois). Laisse l'indice à 1.
shTemp.Copy after:=newDoc.Worksheets(1)
 
et puis pendant qu'on y est, ne sauve pas ton fichier à chaque passage dans la boucle, sauve le après. On gagnera pas mal de temps.
newDoc.SaveAs (strNewFile)


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
n°709334
petburn
Posté le 27-04-2004 à 09:27:06  profilanswer
 

ok, mais il plante encore sur  

Code :
  1. Workbooks(strOldFile).Close False


 
PS : merci de m'aider comme ca... je sais que je suis chaint...

n°709415
petburn
Posté le 27-04-2004 à 10:39:12  profilanswer
 

bon, si je vire la ligne :

Code :
  1. Workbooks(strOldFile).Close False


 
ca marche, j'ai bien les 3 fichiers, mais j'ai toujours les autres fichiers, qui ne sont pas fermés... et je ne peux pas les supprimer...
 
sinon, quand j'ouvre un fichier qui a été créé... j'ai es autres (ceux qui n'ont pas été fermés... normal...).
et j'ai bienles formats qui sont gardé.. mais les couleurs changent...
et j'ai pas le graphique.. alors qu'il passe bien dans le fichier source...
 
en plus, quand j'ouvre un fichier cible créé, il me dit que le classeur comporte des liaisons avec un autre classeur.
 
je voudrais que ce message ne s'affiche pas, et que les liaisons ne soit pas faites...
 
donc si tu as une idée....

n°709752
petburn
Posté le 27-04-2004 à 15:10:56  profilanswer
 

JihEmAir !!! SVP  :cry:

n°709812
petburn
Posté le 27-04-2004 à 15:45:04  profilanswer
 

j'ai des soucis :
 
j'ai tjs mon problème de processus EXCEL qui ne s'arrete pas...
résultat, je ne peux pas ouvrir les fichiers Excel tant que je n'ai pas killé le processus à la main...(Ctrl Alt Suppr ...)
 
le graphique est plat (il y a bien un graphique... mais tout est à 0... alors que dans le fichier source, non ( :ange: )
 
source complet :

Code :
  1. Sub Test()
  2.     Dim dpt(1 To 4) As String
  3.         dpt(1) = "22"
  4.         dpt(2) = "29"
  5.         dpt(3) = "35"
  6.         dpt(4) = "56"
  7.        
  8.     For i = LBound(dpt) To UBound(dpt)
  9.         titre (dpt(i))
  10.         fichier (dpt(i))
  11.         SetDptPrompt (dpt(i))
  12.         ActiveDocument.ExportAsPDF ("P:\test\prompt\" & ActiveDocument.Name & "-" & dpt(i) & ".pdf" )
  13.         ActiveDocument.Reports("Tableaux Détaillés" ).ExportAsExcel ("P:\test\prompt\" & ActiveDocument.Name & "-TabD-" & dpt(i) & ".xls" )
  14.         ActiveDocument.Reports("Tableaux de Synthèse" ).ExportAsExcel ("P:\test\prompt\" & ActiveDocument.Name & "-TabS-" & dpt(i) & ".xls" )
  15.         ActiveDocument.Reports("Graphiques" ).ExportAsExcel ("P:\test\prompt\" & ActiveDocument.Name & "-Graph-" & dpt(i) & ".xls" )
  16.     Next
  17.         CopySheet (ActiveDocument.Name)
  18.        
  19. End Sub


 

Code :
  1. Sub titre(ltitre As String)
  2.     Dim myvar_Titre As Variable
  3.     Set myvar_Titre = Application.Variables("titre" )
  4.     myvar_Titre.Value = ltitre
  5.     ActiveReport.ForceCompute
  6. End Sub


 

Code :
  1. Sub fichier(lfichier As String)
  2.     Dim myvar_Fich As Variable
  3.     Set myvar_Fich = Application.Variables("fichier" )
  4.     myvar_Fich.Value = lfichier
  5.     ActiveReport.ForceCompute
  6. End Sub


 

Code :
  1. Public Sub CopySheet(lName As String)
  2. Dim strNewFile As String, strOldFile As String
  3. Dim newDoc As Workbook
  4. Dim shTemp As Worksheet
  5. Dim i As Integer, j As Integer
  6. Dim dpt(1 To 4) As String
  7.     dpt(1) = "22"
  8.     dpt(2) = "29"
  9.     dpt(3) = "35"
  10.     dpt(4) = "56"
  11.    
  12. Dim rep(1 To 3) As String
  13.     rep(1) = "-Graph-"
  14.     rep(2) = "-TabS-"
  15.     rep(3) = "-TabD-"
  16.    
  17.                
  18.     For i = LBound(dpt) To UBound(dpt)
  19.            
  20.           ' Création d'un nouveau fichier
  21.           ' que l'on ouvre.
  22.           strNewFile = "P:\test\prompt\" & lName & "-" & dpt(i) & ".xls"
  23.           Set newDoc = Workbooks.Add
  24.        
  25.         For j = LBound(rep) To UBound(rep)
  26.                      
  27.           ' Ouverture du fichier source "tabD"
  28.           strOldFile = "P:\test\prompt\" & lName & rep(j) & dpt(i) & ".xls"
  29.           Workbooks.Open strOldFile
  30.        
  31.           ' On récupère la feuille du fichier 1
  32.           Set shTemp = Worksheets(1)
  33.        
  34.           ' On copie dans le nouveau fichier
  35.           shTemp.Copy after:=newDoc.Worksheets(1)
  36.            
  37.          
  38.           'Workbooks(strOldFile).Close False
  39.                    
  40.         Next
  41.             ' enregistrement du fichier cible
  42.             newDoc.SaveAs (strNewFile)
  43.       Next
  44.     Excel.Application.Quit
  45.    
  46.     ' suppression des fichiers temporaires
  47.     For i = LBound(dpt) To UBound(dpt)
  48.         Kill "P:\test\prompt\" & lName & "-TabD-" & dpt(i) & ".xls"
  49.         Kill "P:\test\prompt\" & lName & "-TabS-" & dpt(i) & ".xls"
  50.         Kill "P:\test\prompt\" & lName & "-Graph-" & dpt(i) & ".xls"
  51.     Next
  52.            
  53.   End Sub


 
 
Une fois sur deux (voir aléatoirement), j'ai un message d'erreur :
 

Citation :

impossible d'accèder à l'objet distant


 
et je voudrais eviter qu'il me demande si je veux remplacer quand je créé un fichier... et qu'il existe déjà...
=> je le kill avant de la créer ???
 
 
voila... donc si vous pouvez m'aider... ca sera super quoi...
 
merci d'avance.
bonne journée


Message édité par petburn le 27-04-2004 à 15:51:11
n°709978
JihemAir
Je sais pas
Posté le 27-04-2004 à 17:11:51  profilanswer
 

Pour l'Excel qui tourne en tache de fond, c'est parce que tu n'as pas fait le ménage derrière toi en partant. C'est à dire que tu n'as pas nettoyé tes objets. Et ça, c'est pas bien.
 
Set objet.machin = Nothing
 
Pour le reste, on verra demain parce que là, j'ai du boulot.


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
n°709993
petburn
Posté le 27-04-2004 à 17:16:47  profilanswer
 

ok, pas de prob.
 
à demain alors...  :hello:

n°711112
petburn
Posté le 28-04-2004 à 16:16:57  profilanswer
 

ca ne marche pas.. j'arrive pas à faire le ménage...
 
j'ai essayé :

Code :
  1. Set Workbooks = Nothing


 
et il veut pas...
 
ca vient du fait que j'ai viré la ligne :

Code :
  1. Workbooks(strOldFile).Close False


parceque VBA n'en voulait pas ....
 
des idées pour mon problème de processus EXCEL... :sweat:  
 
et pour les cas du graphique plat !!!??????? :sweat:  
 
pour le graphique, c'est pas grave, au pire, il ne sera pas incorporé...
 
mais le processus, je ne peux laisser ca comme ca... :cry:

n°712602
petburn
Posté le 30-04-2004 à 10:15:57  profilanswer
 

toujours personne .... :sweat: ... :cry:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] 3 fichier Excel dans un seul !?

 

Sujets relatifs
Problème de taille... de requête!!!!(Excel)[C++]Port Serie -> Envoi d'un fichier texte...
Extraction et conversion d'un fichier xml en fichier imageprogrammation de l'exécution d'un fichier batch avec la schtasks
[Word/VBA] 'Modifier Image' sur un .WMF inséré mais en VBA?Enregistrer et lire une structure dans un fichier
[PHP] Changer localement le niveau d'erreur dans un fichiermacro excel
[Java] parser fichier CSV... JDBC ?[vbA/word] Comment intégrer une zone de texte ?
Plus de sujets relatifs à : [VBA] 3 fichier Excel dans un seul !?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR