J'offre le pastis si...

B

babou

Guest
Bonjour le forum,

J'ai un probleme pour lequel je sollicite votre aide. Il s'agit en gros de copier-coller valeur tout en conservant le formattage. J'ai fait une recherche sur ce forum et n'ai pas exactement trouve ce que je cherchais. Si un fil repondant a ma question existe, je suis preneur de l'info...

Mon probleme est le suivant. J'ai un fichier excel dans lequel j'ai, disons, 10 feuilles :

- Feuille 1
- Feuille 2
- Feuille 3
.
.
- Feuille 8
- Feuille 9
- Feuille 10

Chacune de ces feuilles contient non seulement des formules et des requetes SQL me les mettant a jour.

Je voudrais creer a l'aide d'un script un fichier dans lequel je ne copie que Feuille 1, Feuille 2, Feuille 3. Tout en sachant que ce coller doit se faire comme valeur, tout en gardant le formattage de la feuille initiale (notamment pour des pbs de dates). La liste des feuilles a copier est toujours la meme.

Je voudrais aussi lui donner un nom dont une partie est tjours la meme (" coder en dur"), l'autre dependra de la reponse du user. Ex: Rapport du mois de Janvier. "Rapport du mois de" est fixe. "Janvier" dependra de la reponse du user.

Voila.
Si quelqu'un peut m'aider, ce serait sympa.
A bientot.
Babou.
 
B

ben

Guest
Si on répond juste à ton message et pas à ta question, on a droit au verre de pastis ;-))
 
V

viviane

Guest
ma modeste contribution pour le nom de la feuille:
mois = InputBox("Quel mois ? ")
ActiveSheet.Name = mois

Euh voilà , c'est pas délirant comme réponse mais je débute :)
Et j'suis pas intéressée par le pastis!!
 
B

babou

Guest
Pour Ben : pas de probleme :eek:)

Pour Viviane : il n'y a pas que le pastis dans la vie... On peut trouver autre chose. Quant a ta proposition, comment fait-on pour concatener la reponse du user avec une chaine de caractere predefinie pour sauver le fichier, et non pas seulement le sheet ?

Merci pour vos autres reponses.

Babou.
 
A

andré

Guest
Salut babou,

Je ne te réponds peut-être qu'en partie, mais ainsi tu auras un point de départ .
(donc le pastis est à tes frais, moi je paierai l'eau et les glaçons -lol-).

Pour copier tes feuilles, tu passes par Edition / Déplacer ou copier une feuille / Créer une copie / tu choisis sa localisation puis OK, puis sur ta copie tu fais un copier / coller valeurs.

Pour nommer ta feuille (je suppose que tu ne parles pas de l'onglet), tu prévois une cellule (par exemple A1, hors zone imprimable) dans laquelle le "user" introduit sa partie de nom, et dans la cellule devant contenir le nom de la feuille tu places la formule =CONCATENER("Rapport du mois de ";A1)
N'oublie pas l'espace entre de et "

J'espère que j'ai pu t'aider.

André
 
B

babou

Guest
Merci Andre pour ta reponse...
C'est effectivement la maniere que j'utilise pour creer ce fichier aujourd'hui. Et, dans la realite, il s'agit de bien plus que 3 feuilles :eek:(
J'aurais aime une methode avec un script vb, ou je n'excel (!) pas vraiment...
Quant aux termes "feuilles" utilisees, j'espere ne pas me tromper. Je precise au cas ou : ce sont certaines feuilles (onglets) que je souhaite copier coller dans un autre classeur. Et c'est ce classeur que je voudrais pouvoir sauver en le nommant d'une facon bien determinee.
J'espere avoir apporte les precisions necessaires.
J'en profite pour faire un petit UP !
Babou.
 
A

andré

Guest
Resalut babou,

Là c'est du boulot pour Thierry.

Attend, il n'est pas loin, ... je vois qu'il arrive ... en discussion avec Vériland, ... ils vont contacter Ti parce qu'il ne s'en sortent pas, ... donc un peu de patience.

André.
 
A

A_Binouze_Drinker_Among_Others

Guest
bonjour


utilise l'enregistreur de macros.

cela te donnerait un code similaire à celui :

reponse = Application.InputBox("Nom du rapport", "Enregistrement du rapport", "Rapport de ...")
If reponse = False Or reponse = "Rapport de ..." Then Exit Sub
Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Select
Sheets("Feuil3").Activate
Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Copy Before:=Sheets(1)
ChDir "C:\Documents and Settings\royers\Bureau"
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\royers\Bureau\" & reponse, FileFormat:=xlNormal _
, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False


pour le nom variable des feuilles
tu peux rajouter avant la copie
for each sh in activewindow.selectedsheets
sh.activate:range("A1").value="Feuille " & sh.index & " du rapport"
next sh

ce n'est pas une formule variable, je ne sais plus si on peut retourner à l'aide d'une formule standard la position de la feuille
surement que oui en faisant appel au formules excel 4

bye
 
B

babou

Guest
Bonjour Stephane,
Merci de ta reponse. Je pense que c'est ce que je recherche. Toutefois, j'ai essaye d'adapter ton exemple a mon cas et j'ai l'impression qu'il tourne en boucle.
A quoi correspond le test "If reponse = False Or reponse = "Rapport de ..." Then Exit Sub" ? Ce ne serait pas plutot, si la reponse est OK, j'effectue le copier coller. Si non, je sors de la procedure ?
La ligne "Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Copy Before:=Sheets(1)" effectue-t-elle un copier-coller valeur en gardant le formattage ?
J'avais effectivement utiliser l'enregistreur de macro, etant plutot un newbie en vb. Ce que je n'arrivais pas a faire etait de faire saisir le nom du report, et etablir une boucle sur un ensemble d'onglets...
Merci de ta reponse.
Babou.
 
A

A_Binouze_Drinker_Among_Others

Guest
autre version

Sub hh()

reponse = Application.InputBox("Nom du rapport", "Enregistrement du rapport", "Rapport de ...")

'si l'utilisateur a voulu annuler par le bouton annuler ou par la croix, ou s'il a laissé la réponse par défaut,
'alors on sort de la procédure.
If reponse = False Or reponse = "Rapport de ..." Then Exit Sub

For Each sh In ActiveWindow.SelectedSheets
sh.Activate: Range("A1").Value = "Feuille " & sh.Index & " du rapport"
Next sh

'copie des feuilles dans un nouveau classeur
Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Copy


For Each sh In ActiveWorkbook.Sheets
sh.Activate: Range("A1").Value = "Feuille " & sh.Index & " du rapport"
sh.[A1].CurrentRegion.Formula = sh.[A1].CurrentRegion.Value
Next sh

ChDir "C:\Documents and Settings\royers\Bureau"

'Concaténation du chemin d'acès au fichier avec le nom donné par l'utilisateur stocké au préalable dans la variable réponse
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\royers\Bureau\" & reponse, FileFormat:=xlNormal _
, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False


End Sub
 
B

Babou

Guest
Merci A_Binouze_Drinker_Among_Others pour cette macro. Je vais tester et te tiens informe.
Babou.
 
Haut Bas