VBA copie de plusieurs onglet pour sauvegarde sur un nouveau fichier

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

  • Classeur2.xlsm
    74.9 KB · Affichages: 34
  • Classeur2.xlsm
    74.9 KB · Affichages: 42
  • Classeur2.xlsm
    74.9 KB · Affichages: 47

Robert

XLDnaute Barbatruc
Repose en paix
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
 

Trajic

XLDnaute Nouveau
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: 52
  • Capture.PNG
    Capture.PNG
    16.5 KB · Affichages: 41

Robert

XLDnaute Barbatruc
Repose en paix
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
 

Discussions similaires

Statistiques des forums

Discussions
312 451
Messages
2 088 517
Membres
103 874
dernier inscrit
baraki