Copier une feuille d'un classeur ouvert avec Application.GetOpenFilename

L

lpp37

Guest
boujour tous,

c'est pas que j'aime bien me flageler avec des lignes de VBA, mais j'ai encore un soucis que j'arrive pas à résoudre par moi-même... alors je partage. sympa hein? ;)

bon alors voilà, en plusieurs étapes:

1.) j'ai un classeur de base (A) sur lequel se trouve un bouton "ouvrir", qui va lancer Application.GetOpenFilename puis ouvrir le classeur distant (B) par la même occasion...

jusque là tout va bien, ça marche du tonnerre.

2.) je sauvegardais ce classeur distant (B), qui se trouve sur le réseau, dans le répertoire "mes documents" (dc classeur (C)), puis je ferme le classeur distant (B)

3.)Le truc c'est que le classeur distant (C) ne comportait qu'une feuille ne contenant que des valeurs, paske rempli manuellement. Je récupérais ensuite ces valeurs dans le premier classeur de base (A) par un bon vieux ExecuteExcel4Macro (d'où la copie (C) paske ExecuteExcel4Macro ça marche pas directement sur le classeur du réseau, pour des questions de droits d'accès) et tout allait bien...

le pb:

maintenant, mon classeur distant (B) comporte plusieurs feuilles, et celle qui comportait que des valeurs se retrouve pleine de formules, paske remplie automatiquement en fonction des valeurs se trouvant dans les autres feuilles du classeur...

donc: la copie du classeur entier (B ->C) est super lourde (donc longue)
donc: le ExecuteExcel4Macro ça marche plus trop bien... (à cause de la présence des formules à la place de valeurs)

ce que je voudrais faire, c'est copier la feuille du classeur distant (B) dans un nouveau classeur (C) à 1 feuille, mais seulement en format et valeurs, pas en formules.

Comme ça je pourrais executer sur (A) mon ExecuteExcel4Macro depuis (C)

c clair, ou je repepete?

merci de votre attention!
 
A

Abel

Guest
Bonjour lpp37,

Fais une copie de l'onglet et non du classeur avec un collage spécial ="valeurs".

Utilise l'enregistreur de macros pour voir la syntaxe.

Si tu n'y arrive pas, mets nous un exemple en pièce jointe.

Abel.
 
L

lpp37

Guest
oyui oui, je suis d'accord, on peut faire ça avec thisworkbook.sheets("feuille1").copy....

le hic, c'est que ça m'ouvre un troisième classeur pour (C), j'ai déjà (A) d'ouvert, et avec mon GetOpenFileName, j'ai aussi ouvert (B)...

avant je faisais un SaveAs de (B), dc tout se faisait en transparent, et je n'avait que (A) et (B) qui étaient ouverts, sachant que je refermais (B) une fois copié en (C) . mais SaveAs copie l'intégralité du classeur... et moi je veux qu'une seule feuille maintenant

à moins que l'on puisse utiliser copy de façon transparente (genre ScreenUpdate = false)

je suis désolé, je peux pas joindre de fichier en pièce jointe, car données confidentielles... :(

Lpp
 
A

Abel

Guest
Re,

Pour la pièce jointe, efface les données ou mets en des bidons.

Save as ne copie pas mais enregistre le fichier et ScreenUpdate active ou désactive le rafraichissement d'écran pendant l'exécution d'une macro.

Regarde si un truc du genre de ce qui suit correspond à ce que tu cherches.

Sub CopieNouveauFichier()
NomFichier = ActiveWorkbook.Name
NouveauFichier = "NouveauFichier"
Cells.Select
Selection.Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:="C:\Mes documents\" & NouveauFichier & ".xls", FileFormat :=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= False, CreateBackup:=False
End Sub


Adapte NouveauFichier.
Avec un Inputbox par exemple : NouveauFichier = Inputbox ("Entrez le nom du nouveau fichier : ").
Adapte aussi le chemin indiqué.

Abel
 

Discussions similaires

Réponses
2
Affichages
350
Réponses
9
Affichages
262

Statistiques des forums

Discussions
314 211
Messages
2 107 328
Membres
109 804
dernier inscrit
Dramac