Enregistrer deux onglets sur dix

maval

XLDnaute Barbatruc
Bonjour,

Je suis a la recherche d'un code VBA pour enregistrer deux onglets sur dix.

Je m'explique j'ai un fichier avec 10 onglets j'aimerais que lorsque j'enregistre seul les deux premier onglet sois enregistrer.

je vous remercie de votre aide
 

maval

XLDnaute Barbatruc
Re : Enregistrer deux onglets sur dix

Bonjour Pierrot

J'ai trouvé un code sur le net qui fonctionne pas trop mal sauf que je ne peut qu'enregistrer la feuille active
n'ayant plus de nouvelle de toi j'ai posté une nouvelle demande mon code est:

Code:
Sub Archiver()

Dim extension As String
Dim chemin As String, nomfichier As String
Dim style As Integer
Application.ScreenUpdating = False
ThisWorkbook.ActiveSheet.Copy
extension = ".xlsm"
chemin = "C:\Users\Max\Desktop\Test\"
nomfichier = ActiveSheet.Range("A1") ' & extension
With ActiveWorkbook
      .ActiveSheet.DrawingObjects(2).Delete
    .SaveAs Filename:=chemin & nomfichier
    .Close
End With
End Sub

Si tu peut regarde s'il on peut modifier

Bonne journée
 

Pierrot93

XLDnaute Barbatruc
Re : Enregistrer deux onglets sur dix

Re,

avec le chemin :
Code:
Option Explicit
Sub test()
Dim i As Integer, x As String, Chemin As String
Workbooks("Matrise.xlsm").Save
Application.DisplayAlerts = False
For i = 10 To 3 Step -1
     Sheets(i).Delete
     Next i
Application.DisplayAlerts = True
x = InputBox("Nom fichier ?")
Chemin = "C:\Users\Max\Desktop\Test\"
If x <> "" Then ActiveWorkbook.SaveAs Chemin & x
End Sub
 

job75

XLDnaute Barbatruc
Re : Enregistrer deux onglets sur dix

Bonjour maval, Pierrot, le forum,

Pour compléter la macro du post #16 :

Code:
Sub Archiver()
Dim ext$, chemin$, nomfich$, formatfich
ext = ".xlsm" '.xlsx '.xls 'à adapter
chemin = ThisWorkbook.Path & "\" '"C:\Users\Max\Desktop\Test\"
nomfich = ThisWorkbook.Sheets(1).[A1]
formatfich = xlWorkbookNormal
If Val(Application.Version) >= 12 Then _
formatfich = IIf(ext = ".xls", 56, IIf(ext = ".xlsm", 52, 51))
Application.ScreenUpdating = False
ThisWorkbook.Sheets(1).Copy
With ActiveWorkbook
  ThisWorkbook.Sheets(2).Copy After:=.Sheets(1)
  On Error Resume Next 'si nomfich n'est pas autorisé
  .Sheets(1).DrawingObjects(2).Delete '??
  .SaveAs chemin & nomfich, formatfich
  .Close False
End With
End Sub
L'extension, donc le format du fichier, est paramétrable.

Bonne journée.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Enregistrer deux onglets sur dix

Re,

Je crois que le format xlWorkbookDefault n'est valable qu'à partir d'Excel 2007, je l'ai donc remplacé par xlWorkbookNormal.

Pour supprimer les objets sauf un il suffit d'une boucle :

Code:
Sub Archiver()
Dim ext$, chemin$, nomfich$, formatfich, o As Object
ext = ".xlsm" '.xlsx '.xls 'à adapter
chemin = ThisWorkbook.Path & "\" '"C:\Users\Max\Desktop\Test\"
nomfich = ThisWorkbook.Sheets(1).[A1]
formatfich = xlWorkbookNormal
If Val(Application.Version) >= 12 Then _
formatfich = IIf(ext = ".xls", 56, IIf(ext = ".xlsm", 52, 51))
Application.ScreenUpdating = False
ThisWorkbook.Sheets(1).Copy
With ActiveWorkbook
  ThisWorkbook.Sheets(2).Copy After:=.Sheets(1)
  For Each o In .Sheets(1).DrawingObjects
    If o.Name <> "dudu" Then o.Delete
  Next
  On Error Resume Next 'si nomfich n'est pas autorisé
  .Sheets(1).DrawingObjects(2).Delete '??
  .SaveAs chemin & nomfich, formatfich
  .Close False
End With
End Sub
Edit : si l'on veut aussi supprimer les contrôles ActiveX remplacer .DrawingObjects par .Shapes

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Enregistrer deux onglets sur dix

Re,

Effectivement DrawingObjects inclut les OLEObjects donc utilisez cette macro :

Code:
Sub Archiver()
Dim ext$, chemin$, nomfich$, formatfich, o As Object
ext = ".xlsm" '.xlsx '.xls 'à adapter
chemin = ThisWorkbook.Path & "\" '"C:\Users\Max\Desktop\Test\"
nomfich = ThisWorkbook.Sheets(1).[A1]
formatfich = xlWorkbookNormal
If Val(Application.Version) >= 12 Then _
formatfich = IIf(ext = ".xls", 56, IIf(ext = ".xlsm", 52, 51))
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si le fichier existe déjà
ThisWorkbook.Sheets(1).Copy
With ActiveWorkbook
  ThisWorkbook.Sheets(2).Copy After:=.Sheets(1)
  For Each o In .Sheets(1).DrawingObjects
    If TypeName(o) <> "OLEObject" And o.Name <> "dudu" Then o.Delete
  Next
  .Sheets(1).Activate
  On Error Resume Next 'si nomfich n'est pas autorisé
  .SaveAs chemin & nomfich, formatfich
  .Close False
End With
End Sub
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 107
Messages
2 085 354
Membres
102 873
dernier inscrit
yayo