3 fichier Excel dans un seul !? [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 26-04-2004 à 10:25:37
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...)
Marsh Posté le 26-04-2004 à 11:33:08
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...
Marsh Posté le 26-04-2004 à 13:38:53
je met à ma sauce et je teste tout de suite...
merci !!!!
Marsh Posté le 26-04-2004 à 15:10:19
ca marche pas,
j'ai modifié comme ca :
Code :
|
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 ?
Marsh Posté le 26-04-2004 à 15:29:37
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).
Marsh Posté le 26-04-2004 à 15:39:13
ca marche pas, il ne veux pas de cette ligne :
Code :
|
et oui, c pour la bretgane... (je suis à rennes... et je bosse pour les bretons... )
Marsh Posté le 26-04-2004 à 15:47:58
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" )
Marsh Posté le 26-04-2004 à 16:17:38
même sans les guillemets, ca marche pas...
et pour le nom, je changerai une fois que ca marchera ...
(il faudra mettre des guillemets ???)
Marsh Posté le 26-04-2004 à 16:28:59
Set shTemp = Worksheets(1)
Yes, il faudra mettre les guillemets si tu donnes lenom de la feuille.
Marsh Posté le 26-04-2004 à 16:54:03
merci !!!!! ca marche...
par contre, il a aussi fallu que je modifie aussi la fin...
Code :
|
au lieu de :
Code :
|
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 !!!!!!!!
Marsh Posté le 26-04-2004 à 17:04:20
bon nouvelles erreurs...
voici le code, pour mettre les 3 fichiers dans un seul.
Code :
|
il me marque une erreur au niveau du 2ème :
Code :
|
qu'est ce qui merdouille ?????
nom de l'erreur : erreur automation
l'objet invoqué s'est déconnecté de ses clients !!!????
Marsh Posté le 27-04-2004 à 07:54:18
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 :
|
a remplacer par
Code :
|
Le False, c'est pour dire qu'on ne sauvegarde pas en sortant.
Marsh Posté le 27-04-2004 à 09:00:29
il ne veut pas ...
l'indice n'appartient pas à la sélection... !!!!???
code (que j'ai modifié) :
Code :
|
il faut que j'enlève des trucs des boucles... ???
Marsh Posté le 27-04-2004 à 09:13:11
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)
Marsh Posté le 27-04-2004 à 09:27:06
ok, mais il plante encore sur
Code :
|
PS : merci de m'aider comme ca... je sais que je suis chaint...
Marsh Posté le 27-04-2004 à 10:39:12
bon, si je vire la ligne :
Code :
|
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....
Marsh Posté le 27-04-2004 à 15:45:04
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 ( )
source complet :
Code :
|
Code :
|
Code :
|
Code :
|
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
Marsh Posté le 27-04-2004 à 17:11:51
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.
Marsh Posté le 28-04-2004 à 16:16:57
ca ne marche pas.. j'arrive pas à faire le ménage...
j'ai essayé :
Code :
|
et il veut pas...
ca vient du fait que j'ai viré la ligne :
Code :
|
parceque VBA n'en voulait pas ....
des idées pour mon problème de processus EXCEL...
et pour les cas du graphique plat !!!???????
pour le graphique, c'est pas grave, au pire, il ne sera pas incorporé...
mais le processus, je ne peux laisser ca comme ca...
Marsh Posté le 22-04-2004 à 12:36:19
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.