VBA copie de plusieurs onglet pour sauvegarde sur un nouveau fichier

  • Initiateur de la discussion Initiateur de la discussion Trajic
  • 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 !

Trajic

XLDnaute Nouveau
Bonjour,

Je travaille sur une macro qui me permettrait de copier 3 onglets d'un fichier en comportant 8 et pouvoir lancer la fenêtre de sauvegarde "enregistrer sous".

Le souci, c'est pour le choix du premier onglet. 2 onglets peuvent être sélectionner directement mais le premier doit être choisi selon le choix fait au préalable par moi

Voici le code mais il ne fonctionne pas :
HTML:
Dim Feuilles(1) As Variant
If Range("FR!M3").Value > 0 Then Sheets("FR") = Feuilles(1)
If Range("DE!M3").Value > 0 Then Sheets("DE") = Feuilles(1)
If Range("Other!M3").Value > 0 Then Sheets("Other") = Feuilles(1)
Feuilles(2) = "DL"
Feuilles(3) = "POD"

Pour le lancement de la sauvegarde, je n'ai pas pu voir mais le code est dans le fichier à la suite de ce code. Si quelqu'un pourrait m'éclaircir sur ce point ?

Merci
 

Pièces jointes

Re : VBA copie de plusieurs onglet pour sauvegarde sur un nouveau fichier

Bonsoir Trajic, bonsoir le forum,

Peut-être comme ça :
Code:
Private Sub CboSave_Click()
Dim Feuilles(1 To 3) As Variant 'déclare le tableau de 3 variables de 1 à 3

If Sheets("FR").Range("M3").Value > 0 Then Feuilles(1) = "FR" 'définit la variable Feuilles(1)
If Sheets("DE").Range("M3").Value > 0 Then Feuilles(1) = "DE" 'définit la variable Feuilles(1)
If Sheets("Other").Range("M3").Value > 0 Then Feuilles(1) = "Other" 'définit la variable Feuilles(1)
Feuilles(2) = "DL" 'définit la variable Feuilles(2)
Feuilles(3) = "POD" 'définit la variable Feuilles(3)
 
ChDrive "C"
ChDir ("C:\Users\Public\Documents")
 
'ici tu adapteras car il y avait écrit "Classeur1"
'j'ai corrigé par "Classeur2.xlsm" le mieux serait peut-être : [ThisWorkbook.sheets(Array(...)]

Workbooks("classeur2.xlsm").Sheets(Array(Feuilles(1), Feuilles(2), Feuilles(3))).Copy
fichier = Application.GetSaveAsFilename(fileFilter:="Classeur Excel (*.xls), *.xls")
ActiveWorkbook.SaveAs Filename:=fichier, FileFormat:=xlWorkbookNormal
ActiveWorkbook.Close
Unload Me 'vide et ferme l'UserForm
End Sub
 
Re : VBA copie de plusieurs onglet pour sauvegarde sur un nouveau fichier

Merci Robert pour ta réponse.

Petit souci, j'ai un message d'erreur qui apparait maintenant. Pour ce code
Feuilles(2) = "DL"
, j'ai ce message d'erreur :

Capture.PNG

J'ai essayé de changer au code ci-dessous mais ca ne marche pas non plus
Feuilles(2) = Sheets("DL")

Que faudrait-il faire ?
 

Pièces jointes

  • Capture.PNG
    Capture.PNG
    16.5 KB · Affichages: 53
  • Capture.PNG
    Capture.PNG
    16.5 KB · Affichages: 42
Re : VBA copie de plusieurs onglet pour sauvegarde sur un nouveau fichier

Bonjour Trajic, bonjour le forum,

le code fonctionne bien chez moi ! L'erreur ne peut arriver que si tu n'as pas déclaré le tableau de variables:
Code:
Dim Feuilles(1 To 3) As Variant
Car même si l'onglet Sheets("DL") n'existait pas, la ligne :
Code:
Feuilles(2) = "DL"
ne provoquerait pas une erreur... Donc je je comprends pas où se trouve le problème.

Toutefois, j'ai modifié le code au cas où le premier onglet ne serait pas défini car je ne l'avais pas fait dans le premier code envoyé :
Code:
Private Sub CboSave_Click()
Dim Feuilles(1 To 3) As String 'déclare le tableau de 3 variables de 1 à 3

If Sheets("FR").Range("M3").Value > 0 Then Feuilles(1) = "FR" 'définit la variable Feuilles(1)
If Sheets("DE").Range("M3").Value > 0 Then Feuilles(1) = "DE" 'définit la variable Feuilles(1)
If Sheets("Other").Range("M3").Value > 0 Then Feuilles(1) = "Other" 'définit la variable Feuilles(1)
Feuilles(2) = "DL" 'définit la variable Feuilles(2)
Feuilles(3) = "POD" 'définit la variable Feuilles(3)
 
ChDrive "C"
ChDir ("C:\Users\Public\Documents")
 
'ici tu adapteras car il y avait écrit "Classeur1"
'j'ai corrigé par "Classeur2.xlsm" le mieux serait peut-être : [ThisWorkbook.sheets(Array(...)]

If Feuilles(1) = "" Then
    If MsgBox("La première feuille n'a pas été définie ! Voulez-vous continuer ?", vbYesNo, "ATTENTIONS !") = vbYes Then
        Workbooks("classeur2.xlsm").Sheets(Array(Feuilles(2), Feuilles(3))).Copy
        GoTo SUITE
    Else
        Exit Sub
    End If
End If
Workbooks("classeur2.xlsm").Sheets(Array(Feuilles(1), Feuilles(2), Feuilles(3))).Copy
SUITE:
fichier = Application.GetSaveAsFilename(fileFilter:="Classeur Excel (*.xls), *.xls")
ActiveWorkbook.SaveAs Filename:=fichier, FileFormat:=xlWorkbookNormal
ActiveWorkbook.Close
Unload Me 'vide et ferme l'UserForm
End Sub
 
- 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

Discussions similaires

Réponses
4
Affichages
186
Réponses
5
Affichages
248
Réponses
4
Affichages
464
Retour