Copier un classeur sans les formules vers nouveau classeur

alain18

XLDnaute Occasionnel
Bonjour à tous,
A partir d'un classeur avec une dizaine de feuilles (onglets) géré par de nombreuses formules et macros, je souhaiterais copier dans un second classeur (avec un autre nom) seulement quelques feuilles bien définies, avec l'ensemble de leurs contenus mais sans aucune formule.
Je ne sais pas ci cela est bien clair, mais pour résumer, je souhaiterais copier et coller uniquement les valeurs. J'ai bien trouvé dans un post de Papou-net une macro (ci-dessous) qui fait ce genre de travail mais les copies crées un fichier nouveau par feuille, hors je souhaite garder toutes les feuilles dans le même fichier.
Etant nul en VBA, je ne suis pas capable d'adapter son code ou en créer un autre....!

Merci de votre aide

Code de Papou-net:
Sub CopieFeuilles()
For Each sh In ActiveWorkbook.Sheets
sh.Copy
ActiveWorkbook.SaveAs "F:\" & sh.Name
ActiveWorkbook.Close
Next
End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Copier un classeur sans les formules vers nouveau classeur

Bonjour Alain

modifi peut être ainsi :
Code:
 For Each sh In ActiveWorkbook.Sheets
 sh.Copy
 With ActiveSheet.UsedRange
    .Copy
    .PasteSpecial xlPasteValues
    .PasteSpecial xlPasteFormats
 End With
 ActiveWorkbook.SaveAs "F:\" & sh.Name
 ActiveWorkbook.Close
 Next

bonne journée
@+
 

alain18

XLDnaute Occasionnel
Re : Copier un classeur sans les formules vers nouveau classeur

Bonjour et merci Pierrot93
Ce code fonctionne parfaitement mais donne le même résultat que le précédent. Il crée toujours un fichier par feuille et il n'y a pas la possibilité de sélectionner seulement quelques feuilles spécifiques à transférer dans un même fichier.

En PJ un exemple ou il faudrait copier et créer un nouveau fichier avec seulement "affaire1" et "affaire3" (sans formule ni bouton si possible)
Merci.
 

Pièces jointes

  • copie2.xls
    36 KB · Affichages: 217

job75

XLDnaute Barbatruc
Re : Copier un classeur sans les formules vers nouveau classeur

Bonjour alain18, Pierrot,

Voyez cette macro dans le fichier joint :

Code:
Sub CopieFeuilles()
Dim n%, F As Object, Sh As Object
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si le fichier TOTO.xls existe déjà
Set F = ThisWorkbook.Sheets(Array("affaire1", "affaire3")) 'feuilles à copier
With Application
  n = .SheetsInNewWorkbook
  .SheetsInNewWorkbook = F.Count
  Workbooks.Add 'nouveau document
  .SheetsInNewWorkbook = n
End With
With ActiveWorkbook
  n = 0
  For Each Sh In F
    n = n + 1
    With .Sheets(n)
      Sh.Cells.Copy .Cells
      .UsedRange = .UsedRange.Value
      .Name = Sh.Name
    End With
  Next
  .SaveAs "C:\Users\Alain\Desktop\" & "TOTO.xls" '"C:\" & "TOTO.xls" 'plus facile à tester
  .Close
End With
End Sub
A+
 

Pièces jointes

  • copie(1).xls
    49 KB · Affichages: 194
  • copie(1).xls
    49 KB · Affichages: 176
  • copie(1).xls
    49 KB · Affichages: 200

kjin

XLDnaute Barbatruc
Re : Copier un classeur sans les formules vers nouveau classeur

Bonjour, salut Pierrot:)
Pas très précise la question !
S'agit-il de copier des feuilles sélectionnées au préalable ou s'agit-il toujours des mêmes feuilles
Ici, en sélectionnant les feuilles au préalable
Code:
Option Base 1
Sub CopieFeuilles()
Dim T(), wb As Workbook, ws As Worksheet, sh As Shape
With ActiveWindow
    ReDim T(.SelectedSheets.Count)
    For i = 1 To UBound(T)
        T(i) = .SelectedSheets(i).Name
    Next
End With
Sheets(T()).Copy
With ActiveWorkbook
    For Each ws In .Sheets
        With ws
            With .UsedRange.Cells
                .Value = .Value
            End With
            For Each sh In .Shapes
                If sh.Type = msoFormControl Then
                    If sh.FormControlType = xlButtonControl Then sh.Delete
                End If
            Next
        End With
    Next
.SaveAs ("C:\...\xxx.xls") 'à adapter
.Close
End With
End Sub

Edit : Adiou Job :)

A+
kjin
 
Dernière édition:

alain18

XLDnaute Occasionnel
Re : Copier un classeur sans les formules vers nouveau classeur

Bonjour à tous,
Merci Job75, votre macro après les premiers tests semble corresponde à mon besoin. Il faut que je regarde maintenant sur mon gros fichier.
Merci également à Kjin d'avoir regardé mon problême. Je me suis peut être mal expliqué mais en fait, oui les feuilles seront définies au préalable. Le but de cette manip étant de pouvoir envoyer une partie du fichier (donc prédéfini) à des clients qui doivent recevoir seulement de l'information sans y intégrer toute la base de donnée utilisée pour effectuer les calculs.
Toutefois cela peut sans doute m'être utile; dans ce cas, de quelle manière je dois sélectionner mes feuilles au préalable ? Je m'excuse, c'est peut être une question toute bête....!!
Merci de votre réponse.
Je regarde tout ceci en détail.
 

job75

XLDnaute Barbatruc
Re : Copier un classeur sans les formules vers nouveau classeur

Re, salut kjin :)

Une variante, sans doute plus simple, pour la boucle For/Next :

Code:
For n = 1 To F.Count
  With .Sheets(n)
    F(n).Cells.Copy .Cells
    .UsedRange = .UsedRange.Value
    .Name = F(n).Name
  End With
Next
Fichier(2).

A+
 

Pièces jointes

  • copie(2).xls
    50 KB · Affichages: 171
  • copie(2).xls
    50 KB · Affichages: 173
  • copie(2).xls
    50 KB · Affichages: 173

alain18

XLDnaute Occasionnel
Re : Copier un classeur sans les formules vers nouveau classeur

Re,
OK, Kjin, je confirme c'était bien une question de "vrai débutant", je voyais vraiment autre chose....excusez moi.
Merci, maintenant (plus tard) je regarde tous ça en détail.
A+
 

alain18

XLDnaute Occasionnel
Re : Copier un classeur sans les formules vers nouveau classeur

Bonsoir au forum, bonsoir Job75,
Je viens d'effectuer les différents tests. Les deux macros fonctionnent parfaitement. Toutefois, serait il possible d'insérer dans le code le mode d'affichage du nouveau fichier, à savoir: "supprimer le quadrillage". Sur le fichier original le quadrillage n'apparait pas mais après la copie, celui-ci apparait dans le nouveau fichier. J'utilise pour l'instant le code à Job75.
Autre question: A l'ouverture du nouveau fichier excel me pose la question suivante: "le fichier que vous tentez d'ouvrir "TOTO.xls" est différent de celui de l'extension de fichier. Assurez vous qu'il n'est pas endommagé et qu'il provient d'une source fiable avant de l'ouvrir. Souhaitez vous ouvrir le fichier maintenant ? "
Je ne comprends pas cette question alors qu'ils sont tous les deux en 97-2003 et .xls . Toutefois je suis avec excel 2007. Alors ...??
Merci de votre aide à tous.
 

job75

XLDnaute Barbatruc
Re : Copier un classeur sans les formules vers nouveau classeur

Bonjour alain18, le forum,

La macro dans le fichier joint doit régler les 2 problèmes soulevés.

C'est à vous de choisir à la fin le format du fichier :

- soit le format de la version Excel en cours,

- soit toujours le format Excel 97-2003 en .xls

A+
 

Pièces jointes

  • copie(3).xls
    54 KB · Affichages: 181

job75

XLDnaute Barbatruc
Re : Copier un classeur sans les formules vers nouveau classeur

Re,

Je viens de tester sur mon portable avec Excel 2010.

Si le fichier est enregistré en .xlsx il est impossible de l'ouvrir.

Je ne comprends vraiment pas ce qui se passe.

Donc vous n'avez pas le choix, prenez cette version (4) qui enregistre en .xls.

A+
 

Pièces jointes

  • copie(4).xls
    48 KB · Affichages: 165

job75

XLDnaute Barbatruc
Re : Copier un classeur sans les formules vers nouveau classeur

Re,

Bon j'ai trouvé le moyen d'enregistrer en .xlsx.

Il faut le format 51 et non pas xlWorkbookNormal...

Voir le fichier (5).

A+
 

Pièces jointes

  • copie(5).xls
    49 KB · Affichages: 210
  • copie(5).xls
    49 KB · Affichages: 213
  • copie(5).xls
    49 KB · Affichages: 256

nijseri

XLDnaute Nouveau
Re : Copier un classeur sans les formules vers nouveau classeur

j'ai trouvé ce que je cherchais dans ce post sauf un détail

Comment je peux donner le nom de ma cellule A1 de la feuille à copier au fichier xls créer

Merci d'avance à tous
 

Discussions similaires

Statistiques des forums

Discussions
314 010
Messages
2 104 521
Membres
109 055
dernier inscrit
Nonoo