Résolu Code vba pour créer un nouveau classeur à partir d'une feuille

MimiExcel

Nouveau membre
Bonjour à tous !! :)

Je crée ce sujet car vous m'avez tous superbement aidée à coder pour créer un classeur à partir d'un existant grâce à un précédent sujet.

MAIS il me reste deux petits problèmes. En gros, je travaille avec un classeur contenant deux feuilles. L'une avec des calculs, l'autre qui les synthétise automatiquement pour le client.
Bien sûr, je ne peux que lui donner la synthèse et pas mes calculs savants.

1. Apparemment, il n'aime pas trop le .xlsm ...
2. Mon bouton d'exécution me pose problème car il se copie aussi sur la synthèse et j'aimerai l'éviter.

Quelqu'un peut-il m'aider s'il vous plaît ? Voici le code complet mais je crois qu'il se répète avec mon bouton d'exécution...

Private Sub CommandButton1_Click()
For Each feuille In ActiveWorkbook.Sheets

feuille.Copy

With ActiveWorkbook

.Title = feuille.Name

.Subject = feuille.Name

.ActiveSheet.Copy

.SaveAs Filename:=feuille.Name + ".xlsm"

End With


Next

End Sub



Private Sub Worksheet_Activate()

For Each feuille In ActiveWorkbook.Sheets

feuille.Copy

With ActiveWorkbook

.Title = feuille.Name

.Subject = feuille.Name

.ActiveSheet.Copy

.SaveAs Filename:=feuille.Name + ".xlsm"

End With


Next

End Sub

Merci beaucoup par avance à celui ou celle qui pourra m'aider.


Cordialement.
 

drul

Obscur pro du hardware
Staff
[:falzar] la balise code stp !

Je regarde ça dans la journée.
 

drul

Obscur pro du hardware
Staff
Tout d'abord 2 questions:

Ton bouton est dans la feuille de calcul ou dans la feuille de synthèse ?
Quel est exactement le résultat que tu désires ? (un classeur ne contenant que la feuille synthèse au format xls ?)
 

MimiExcel

Nouveau membre


Je te fais une seule réponse pour tes deux messages.
Tout d'abord je suis vraiment nulle parce que je ne vois pas la précieuse balise code... :??:

Mon bouton est dans la feuille de synthèse et je voudrais que l'export soit en .xls mais sans me reprendre le dit bouton dans la copie de la feuille.
J'ai essayé .xls mais le code ne fonctionnait pas d'où le .xlsm dans code.

Merci encore.
 

drul

Obscur pro du hardware
Staff
Ok,
Alors ce que je ferais:
1) on règle la propriété du bouton pour ne pas être copié avec les cellule (bouton de droite sur le bouton, format control (je suis en anglais)))
2) avec la macro on crée un nouveau workbook
3) on copie le contenu de toutes les cellules de la feuille synthèse (mais pas la feuille entière) dans le première feuille du nouveau workbook
4) on sauve le nouveau workbook
5) on ferme le nouveau workbook

Essaie de pondre du code pour faire cela.
Commence par les points 1 à 3 et donne moi ce que tu arrives à faire.

Pour la balises code,
il faut taper [code="vb"] ton code ici [/code]
ce qui donne :
Code:
Sub Test()
'du code mis en forme
if tralala then
 a=b
end if
End Sub
 

MimiExcel

Nouveau membre

Super merci beaucoup! Je vais déjà travailler avec tes pistes et je te donnerai mon retour ainsi que la balise code d'ailleurs! Bonne soirée et bon week-end!
 

MimiExcel

Nouveau membre
Bonsoir :),

Me revoilà avec un peu d'avancement dans mon code.

C'est mon premier code donc forcément, j'ai un peu piétiné.

En fait, j'ai dû mettre mes deux tableaux* dans la même feuille. Sinon, pas de formules reprises dans le copier/coller. *(tableau calculs + tableau en remplissage automatique pour mon client).

Je choisis donc ma plage de cellule à recopier (A1:H251) ce qui laisse 4 pages de marge.
En effet, il faut que je prévois les évolutions du tableau selon les dossiers même si la trame est similaire.

En gros, ça me copie ce que je veux, ouvre un nouveau tableau, le colle et le fait enregistrer dans la foulée. En .xlsx car je ne veux pas de copie de macros.

J'ajouterai plus tard un message automatique pour les personnes qui ne résisteront pas à ajouter des choses en dehors de ma plage... Mais c'est autre chose pour mon niveau.

Alors voilà mon code (et avec balises Drul ;-) ) qui marche à merveille pour ceux que cela intéresse :

Code:
 Private Sub CommandButton1_Click()

Sheets("TEST").Range("A1:H250").Select
    Selection.Copy
        
Set NewBook = Workbooks.Add
    
    ActiveSheet.Paste
    Application.CutCopyMode = False
    
 Application.DisplayAlerts = False
Do
    fName = Application.GetSaveAsFilename
Loop Until fName <> False
    ActiveWorkbook.SaveAs Filename:=fName & "xls", _
FileFormat:=xlWorkbookNormal, CreateBackup:=False
    
ActiveSheet.Range("A1").Select

Application.DisplayAlerts = True

End Sub



 

drul

Obscur pro du hardware
Staff
Meilleure réponse
Salut, c'est pas mal du tout ;)

Seul petit reproche: tu passes par le presse papier, ce qui est fortement non recommandé. (que ce passe t'il si tu as des données importantes dans ton presse papier au moment ou tu executes ta macro) ?

Tes variables sont-elles déclarées ?
sinon, je t'encourage à toujours le faire. (on peut rajouter "option explicit" pour rendre la déclaration obligatoire)


Une petite correction donc:
Code:
 Private Sub CommandButton1_Click()
dim maSource as range

set maSource = Sheets("TEST").Range("A1:H250")

Set NewBook = Workbooks.Add

maSource.copy ActiveSheet.cells(1,1) ' ici on copie SANS passer par le presse papier

Do
fName = Application.GetSaveAsFilename
Loop Until fName <> False
ActiveWorkbook.SaveAs Filename:=fName & "xls", _
FileFormat:=xlWorkbookNormal, CreateBackup:=False

ActiveSheet.Range("A1").Select

Application.DisplayAlerts = True

End Sub

Une question pourquoi ne pas copier toutes les cellules ?

Code:
set maSource=Sheets("TEST").Range(Sheets("TEST").cells(1,1), Sheets("TEST").Cells(Application.Rows.Count, Application.Columns.Count))

Tu pourrais aussi fermer automatiquement le wbook que tu viens de créer en rajoutant tout en bas du code:

Code:
NewBook.close
 

MimiExcel

Nouveau membre

HelloDrul,

Merci beaucoup pour la correction du presse papier (faut vraiment que j'achète un livre là dessus.

Je ne copie pastoute la feuille comme à l'origine car il y a le tableau de calculs à ne surtout pas donner au client.
Si je mets les calculs dans la feuille 2 ar exemple, il ne verra que =feuil2 etc quand il voudra retravailler son truc. ^
Je ne dois donner que la réponse pro-formée et la recopie m'horripile.

Je te souhaite une bonne journée.

Cordialement.

 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 132
Messages
6 718 000
Membres
1 586 387
Dernier membre
ouistititouille
Partager cette page
Haut