copie onglet dans nouveau classeur

  • Initiateur de la discussion Initiateur de la discussion xpxpplus
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

X

xpxpplus

Guest
Slt a tous les meilleurs, j'aimerai realiser une macro qui prend qqes feuilles différentes de mon classeur et me les copies sous un nom de la cellule a5 du premier classeur, pouvez vous m'aider....

Merci
 
Re : copie onglet dans nouveau classeur

Bonjour xpxpplus

bien sur que l'on peut t'aider mais ta question est trop imprécise et comporte un non sens
si tu copies plusieurs feuilles, il te faudra plusieur noms ou peut être veux tu copier un ensemble de feuilles dans un nouveau classeur dont le nom est en A5 d'une feuille du classeur d'origine? le classeur de destination est existant ou pas?
en clair il faut que tu précises ce que tu veux en fournissant si possible un classeur exemple.

Cordialement, A+
 
Re : copie onglet dans nouveau classeur

j'ai fais un ptit fichier avec qqes explications plus concretes : jeveux choisir la feuille 3 et 7 et 12 par exemple et je voudrais avec une macro, enregistrer les pages choisies soit par une case a coché ou un menu déroulant et qui envoient les feuilles choisies dans un seul et nouveau fichier qui aura le nom choisi par la cell a5

regarde dans le fichier en attache zip

Merci

xpxpplus
 

Pièces jointes

Re : copie onglet dans nouveau classeur

Salut

désolé pour le retard, je ne pensais plus à ton post.
voici un exemple
j'ai abandonné les cases à cocher pour un double clic sur les cellules, elles passent alors en gras rouge, plus simple à gérer que des cases
un clic sur le bouton copie les feuilles, pour le nom du classeur on ne peut le définir qu'à l'enregistrement donc je lance un enregistrement, tu peux prédéfinir le chemin en l'ajoutant soit dans la cellule E13 soit dans la proc en l'ajoutant à la ligne
Nom_Classeur_Temp = Range(Nom_Classeur).Value & ".xls"
qui deviendrait ainsi
Nom_Classeur_Temp = cheminàutiliser & Range(Nom_Classeur).Value & ".xls"

voila le code utilisé, la liste des feuilles se met à jour à l'activation de la feuille
tu peux modifier les constantes
Const Plage_Ref As String = "D18" ' définit le début de la plage des noms de feuilles
Const Nom_Classeur As String = "E13" 'définit le nom de classeur à utiliser

Cordialement, A+

Option Explicit
Const Plage_Ref As String = "D18"
Const Nom_Classeur As String = "E13"
Dim Compteur As Long, Compteur2 As Long

Private Sub Worksheet_Activate()
'initialisation
With Range(Plage_Ref & ":" & Range(Plage_Ref).Offset(65536 - Range(Plage_Ref).Row, 0).End(xlUp).Address)
.Font.ColorIndex = xlAutomatic
.Font.Bold = False
.ClearContents
End With
Compteur2 = 0
For Compteur = 1 To Worksheets.Count
''''activer les deux lignes pour ne pas afficher dans la liste des feuilles la feuille contenant la liste
'If Not (Worksheets(Compteur).Name = ActiveSheet.Name) Then
Range(Plage_Ref).Offset(Compteur2, 0).Value = Worksheets(Compteur).Name
Compteur2 = Compteur2 + 1
'End If
Next Compteur
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range(Plage_Ref & ":" & Range(Plage_Ref).Offset(65536 - Range(Plage_Ref).Row, 0).End(xlUp).Address)) Is Nothing Then
Else
With Target
If .Font.ColorIndex = 3 And .Font.Bold = True Then
.Font.ColorIndex = xlAutomatic
.Font.Bold = False
Else
.Font.ColorIndex = 3
.Font.Bold = True
End If
End With
End If
Cancel = True
End Sub
Private Sub CommandButton1_Click()
Dim Nom_Feuil As Range, Noms_Feuilles() As String, Nom_Classeur_Temp As String
Dim Test_Fichier As Integer, Titre_Box As String, Classeur_en_cours As Workbook
Compteur = 0
For Each Nom_Feuil In Range(Plage_Ref & ":" & Range(Plage_Ref).Offset(65536 - Range(Plage_Ref).Row, 0).End(xlUp).Address)
If Nom_Feuil.Font.ColorIndex = 3 And Nom_Feuil.Font.Bold = True Then
Compteur = Compteur + 1
ReDim Preserve Noms_Feuilles(1 To Compteur)
Noms_Feuilles(Compteur) = Nom_Feuil.Value
End If
Next Nom_Feuil
If Compteur > 0 Then
Nom_Classeur_Temp = Range(Nom_Classeur).Value & ".xls"
ThisWorkbook.Sheets(Noms_Feuilles).Copy
'paramètres d'enregistrement du fichier
Titre_Box = "Enregistrement du fichier"
Do
Test_Fichier = 0
Nom_Classeur_Temp = Application.GetSaveAsFilename(Nom_Classeur_Temp, FileFilter:="Fichiers Excel (*.Xls),*.Xls", Title:=Titre_Box)
If Not (Dir$(Nom_Classeur_Temp, vbNormal) = "") Then
Test_Fichier = MsgBox(LCase(Nom_Classeur_Temp) & " existe déja" & Chr(10) & "en date du " & DateValue(FileDateTime(Nom_Classeur_Temp)) & Chr(10) & "voulez vous l'écraser ?", vbYesNo + vbQuestion)
If Not (Test_Fichier = 7) Then
For Each Classeur_en_cours In Application.Workbooks
If StrComp(Classeur_en_cours.FullName, Nom_Classeur_Temp, 1) = 0 Then
MsgBox LCase(Nom_Classeur_Temp) & " est ouvert, ce nom ne peut être utilisé", vbOKOnly + vbCritical
Test_Fichier = 7
Exit For
End If
Next Classeur_en_cours
End If
End If
If Test_Fichier = 7 Then Titre_Box = "Redéfinissez le nom d'enregistrement"
If Nom_Classeur_Temp = "Faux" Then MsgBox "Fichier non enregistré !", vbOKOnly + vbExclamation: Sheets(1).Select: Exit Sub
Loop While Test_Fichier = 7
'sélection de la première feuille
Sheets(1).Select
'enregistrement
ActiveWorkbook.SaveAs Filename:=Nom_Classeur_Temp, FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
End If
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
481
Réponses
3
Affichages
326
Réponses
1
Affichages
177
Retour