Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Copie de toutes les feuilles d'un classeur EXCEL vers un nouveau

16 réponses
Avatar
Gandalf
Bonjour,

J'essaie de copier toutes les feuilles de mon classeur EXCEL vers un nouveau
mais rencontre un problème : il me copie également les formules et les liens.

Je voudrais simplement copier les données sans les formules.
Actuellement, j'utilise le code ci-dessous :

------------------------------------------------------
Dim F As WorkSheet
Application.ScreenUpdating = False
For Each F in Sheets
Sheets(F.Name).Copy
Next F
Application.ScreenUpdating = True
With ActiveWorkbook
.SaveAs "c:\test.xls"
.Close
End With
------------------------------------------------------------------

Merci d'avance pour toute aide sur ce sujet.

PS : je suis obligé de faire cela pour réduire la taille de mon fichier
excel. Actuellement il fait 50 Mo !! Et je regarde qu'en copiant tous les
onglets "à la main" dans un nouveau fichier, il ne fait plus que 2 Mo !

10 réponses

1 2
Avatar
Daniel.C
Bonjour.
Tu peux faire comme ça :

Dim F As Worksheet
Application.ScreenUpdating = False
For Each F In Sheets
F.Copy
Cells.Clear
F.Cells.Copy
[A1].PasteSpecial xlValues
Next F
Application.ScreenUpdating = True
With ActiveWorkbook
.SaveAs "c:test.xls"
.Close
End With

Seulement, tu crées un classeur par feuille copiée et tu ne sauvegardes
que la dernière ?

Daniel

Bonjour,

J'essaie de copier toutes les feuilles de mon classeur EXCEL vers un nouveau
mais rencontre un problème : il me copie également les formules et les liens.

Je voudrais simplement copier les données sans les formules.
Actuellement, j'utilise le code ci-dessous :

------------------------------------------------------
Dim F As WorkSheet
Application.ScreenUpdating = False
For Each F in Sheets
Sheets(F.Name).Copy
Next F
Application.ScreenUpdating = True
With ActiveWorkbook
.SaveAs "c:test.xls"
.Close
End With
------------------------------------------------------------------

Merci d'avance pour toute aide sur ce sujet.

PS : je suis obligé de faire cela pour réduire la taille de mon fichier
excel. Actuellement il fait 50 Mo !! Et je regarde qu'en copiant tous les
onglets "à la main" dans un nouveau fichier, il ne fait plus que 2 Mo !


Avatar
Gandalf
Bonjour,

Merci pour ta réponse mais je ne comprends pas ce que fait le
"[A1].PasteSpecial xlValues" ?

Donc ce code copie tous mes onglets dans des nouveaux classeurs ?
Donc si j'ai 5 onglets j'aurais 5 fichiers excel en sortie ?

Merci pour ton retour.




"Daniel.C" wrote:

Bonjour.
Tu peux faire comme ça :

Dim F As Worksheet
Application.ScreenUpdating = False
For Each F In Sheets
F.Copy
Cells.Clear
F.Cells.Copy
[A1].PasteSpecial xlValues
Next F
Application.ScreenUpdating = True
With ActiveWorkbook
.SaveAs "c:test.xls"
.Close
End With

Seulement, tu crées un classeur par feuille copiée et tu ne sauvegardes
que la dernière ?

Daniel

> Bonjour,
>
> J'essaie de copier toutes les feuilles de mon classeur EXCEL vers un nouveau
> mais rencontre un problème : il me copie également les formules et les liens.
>
> Je voudrais simplement copier les données sans les formules.
> Actuellement, j'utilise le code ci-dessous :
>
> ------------------------------------------------------
> Dim F As WorkSheet
> Application.ScreenUpdating = False
> For Each F in Sheets
> Sheets(F.Name).Copy
> Next F
> Application.ScreenUpdating = True
> With ActiveWorkbook
> .SaveAs "c:test.xls"
> .Close
> End With
> ------------------------------------------------------------------
>
> Merci d'avance pour toute aide sur ce sujet.
>
> PS : je suis obligé de faire cela pour réduire la taille de mon fichier
> excel. Actuellement il fait 50 Mo !! Et je regarde qu'en copiant tous les
> onglets "à la main" dans un nouveau fichier, il ne fait plus que 2 Mo !





Avatar
Daniel.C
> Merci pour ta réponse mais je ne comprends pas ce que fait le
"[A1].PasteSpecial xlValues" ?



Ca recopie les valeurs des cellules de la feuille source sur la feuille
cible. Ainsi, plus de formules.

Donc ce code copie tous mes onglets dans des nouveaux classeurs ?
Donc si j'ai 5 onglets j'aurais 5 fichiers excel en sortie ?




Oui.Teste-le pour t'en assurer.
Daniel
Avatar
lSteph
bonjour,

Sub copyShAsWbk()
Dim i As Integer
Application.ScreenUpdating = False
For i = 1 To ActiveWorkbook.Sheets.Count
Sheets(i).Copy
ActiveSheet.Cells.Copy
ActiveSheet.[A1].PasteSpecial xlValues
With ActiveWorkbook
.SaveAs "c:test" & i & ".xls"
.Close
End With
Next i
End Sub


'lSteph





On 12 nov, 12:25, Gandalf wrote:
Bonjour,

J'essaie de copier toutes les feuilles de mon classeur EXCEL vers un nouv eau
mais rencontre un problème : il me copie également les formules et le s liens.

Je voudrais simplement copier les données sans les formules.
Actuellement, j'utilise le code ci-dessous :

------------------------------------------------------
Dim F As WorkSheet
Application.ScreenUpdating = False
For Each F in Sheets
    Sheets(F.Name).Copy
Next F
Application.ScreenUpdating = True
With ActiveWorkbook
        .SaveAs "c:test.xls"
        .Close
End With
------------------------------------------------------------------

Merci d'avance pour toute aide sur ce sujet.

PS : je suis obligé de faire cela pour réduire la taille de mon fichi er
excel. Actuellement il fait 50 Mo !! Et je regarde qu'en copiant tous les
onglets "à la main" dans un nouveau fichier, il ne fait plus que 2 Mo !


Avatar
Gandalf
"Daniel.C" wrote:

> Merci pour ta réponse mais je ne comprends pas ce que fait le
> "[A1].PasteSpecial xlValues" ?
>
Ca recopie les valeurs des cellules de la feuille source sur la feuille
cible. Ainsi, plus de formules.

> Donc ce code copie tous mes onglets dans des nouveaux classeurs ?
> Donc si j'ai 5 onglets j'aurais 5 fichiers excel en sortie ?
>

Oui.Teste-le pour t'en assurer.
Daniel






Bonjour,

Merci pour cette réponse.
Il n'y a donc pas d'autre moyen que de faire autant de fichier que d'onglets ?

Je vais déjà tester ainsi.
Avatar
Gandalf
"lSteph" wrote:

bonjour,

Sub copyShAsWbk()
Dim i As Integer
Application.ScreenUpdating = False
For i = 1 To ActiveWorkbook.Sheets.Count
Sheets(i).Copy
ActiveSheet.Cells.Copy
ActiveSheet.[A1].PasteSpecial xlValues
With ActiveWorkbook
.SaveAs "c:test" & i & ".xls"
.Close
End With
Next i
End Sub


'lSteph





On 12 nov, 12:25, Gandalf wrote:
> Bonjour,
>
> J'essaie de copier toutes les feuilles de mon classeur EXCEL vers un nouveau
> mais rencontre un problème : il me copie également les formules et les liens.
>
> Je voudrais simplement copier les données sans les formules.
> Actuellement, j'utilise le code ci-dessous :
>
> ------------------------------------------------------
> Dim F As WorkSheet
> Application.ScreenUpdating = False
> For Each F in Sheets
> Sheets(F.Name).Copy
> Next F
> Application.ScreenUpdating = True
> With ActiveWorkbook
> .SaveAs "c:test.xls"
> .Close
> End With
> ------------------------------------------------------------------
>
> Merci d'avance pour toute aide sur ce sujet.
>
> PS : je suis obligé de faire cela pour réduire la taille de mon fichier
> excel. Actuellement il fait 50 Mo !! Et je regarde qu'en copiant tous les
> onglets "à la main" dans un nouveau fichier, il ne fait plus que 2 Mo !





Bonjour,

J'essaie d'utiliser cette macro mais je ne peux pas car j'ai
systématiquement le message suivant :


"Excel ne peut pas terminer cette tache avec les ressources disponibles.
Sélectionnez moins de données ou fermez des applications."

Je pense que je suis bloqué.

De plus, je suis bloqué car toutes le feuilles sont liées !

Problème insoluble.
Avatar
Gandalf
"Gandalf" wrote:





"Daniel.C" wrote:

> > Merci pour ta réponse mais je ne comprends pas ce que fait le
> > "[A1].PasteSpecial xlValues" ?
> >
> Ca recopie les valeurs des cellules de la feuille source sur la feuille
> cible. Ainsi, plus de formules.
>
> > Donc ce code copie tous mes onglets dans des nouveaux classeurs ?
> > Donc si j'ai 5 onglets j'aurais 5 fichiers excel en sortie ?
> >
>
> Oui.Teste-le pour t'en assurer.
> Daniel
>
>
>

Bonjour,

Merci pour cette réponse.
Il n'y a donc pas d'autre moyen que de faire autant de fichier que d'onglets ?

Je vais déjà tester ainsi.





Bonjour,

En réfléchissant je pourrais procéder autrement mais je le message d'erreur
suivant : "excel ne peut pas terminer sa tâche car pas assez de ressources
disponibles" !

Je pense que cela vient du fait que le fichier excel dont je dispose est
trop volumineux : 50 Mo !
Je ne sais pas comment réduire sa taille.
J'ai le message "excel ne peut pas terminer sa tâche car pas assez de
ressources disponibles" également lorsque je fais des copies de certains
onglets à la main en faisant "clic droit sur onglet" et "copier déplacer".

Voilà si quelqu'un dispose d'idées sur ce sujet.

Merci d'avance.
Avatar
lSteph
> > Ca recopie les valeurs des cellules de la feuille source sur la feuille
> cible. Ainsi, plus de formules.


N'est-ce pas ce que tu demandais?

Il n'y a donc pas d'autre moyen que de faire autant de fichier que d'ongl ets ?


N'est-ce pas ce que tu demandais?
aussi!

Il y en a un

Enregistrer Sous et tu donnes un autre nom et un autre emplacement à
ton classeur
ensuite tu fais un copier coller des feuilles sur elles mêmes

ou
de la même façon par macro

Sub copyShAsWbk()
Dim i As Integer
Application.ScreenUpdating = False
ActiveWorkbook.SaveAs "c:test.xls"
For i = 1 To ActiveWorkbook.Sheets.Count
Sheets(i).Cells.Copy
Sheets(i).[A1].PasteSpecial xlValues
Next i
ActiveWorkbook.Save
End Sub


On 13 nov, 09:40, Gandalf wrote:
"Daniel.C" wrote:
> > Merci pour ta réponse mais je ne comprends pas ce que fait le
> > "[A1].PasteSpecial xlValues" ?

> Ca recopie les valeurs des cellules de la feuille source sur la feuille
> cible. Ainsi, plus de formules.

> > Donc ce code copie tous mes onglets dans des nouveaux classeurs ?
> > Donc si j'ai 5 onglets j'aurais 5 fichiers excel en sortie ?

> Oui.Teste-le pour t'en assurer.
> Daniel

Bonjour,

Merci pour cette réponse.
Il n'y a donc pas d'autre moyen que de faire autant de fichier que d'ongl ets ?

Je vais déjà tester ainsi.


Avatar
Jol
Bonjour,

Voici le code que j'ai obtenu par l'intermédiare de ce forum et modifié pour
mon usage (j'ai égaré le nom du contributeur, mais s'il se reconnait qu'il
en soit encore remercié !!!)

'Construit une boite de dialogue temporaire pour sélectionner
'les feuilles que l'on souhaite copier dans un nouveau classeur

Sub ChoixFeuilles()

Dim i As Integer, Arr(), x&
Dim TopPos As Integer
Dim SheetCount As Integer
Dim PrintDlg As DialogSheet
Dim CurrentSheet As Worksheet
Dim cb As CheckBox

Application.ScreenUpdating = False

If Sheets.Count > 100 Then
MsgBox "Trop de feuilles pour la boite de dialogue..."
Exit Sub
End If

' Ajoute une feuille de dialogue temporaire
If ActiveWindow.SelectedSheets.Count > 1 Then Sheets(1).Activate
Set PrintDlg = ActiveWorkbook.DialogSheets.Add
PrintDlg.Visible = xlSheetHidden

SheetCount = 0

' Ajoute les boutons d'option
TopPos = 50
For i = 1 To ActiveWorkbook.Worksheets.Count
Set CurrentSheet = ActiveWorkbook.Worksheets(i)
' Ne tient pas compte des feuilles vide ou masquées
If Application.CountA(CurrentSheet.Cells) <> 0 And _
CurrentSheet.Visible Then
SheetCount = SheetCount + 1
PrintDlg.CheckBoxes.Add 78, TopPos, 120, 16.5
PrintDlg.CheckBoxes(SheetCount).Text = CurrentSheet.Name
TopPos = TopPos + 13
End If
Next i

' Positionne les boutons OK et Annuler
PrintDlg.Buttons.Left = 200

' Dimensionne la hauteur, la largeur et le titre de la boite de dialogue
With PrintDlg.DialogFrame
.Height = Application.Max _
(68, PrintDlg.DialogFrame.Top + TopPos - 34)
.Width = 200
.Caption = "Copie Feuilles sans formules"
End With

' Change l'ordre de tabulation des boutons OK et Annuler
' afin de donner le focus au premier bouton d'option
PrintDlg.Buttons("Button 2").BringToFront
PrintDlg.Buttons("Button 3").BringToFront

' Affiche la boîte de dialogue
Application.ScreenUpdating = True
If SheetCount <> 0 Then
If PrintDlg.Show = True Then
x = -1
Application.ScreenUpdating = False
For i = 1 To SheetCount
If PrintDlg.CheckBoxes(i).Value = xlOn Then
x = x + 1: ReDim Preserve Arr(x)
Arr(x) = PrintDlg.CheckBoxes(i).Caption
End If
Next i
Else: Exit Sub
End If
Else
MsgBox "Toutes les feuilles sont vides !"
End If

' Supprime la feuille de dialogue temporaire (sans message d'avertissement)
Application.DisplayAlerts = False
PrintDlg.Delete
If x = -1 Then Exit Sub

' Sélectionne les feuilles et les copie dans un nouveau classeur
Sheets(Arr).Copy

' Déprotéger toutes les feuilles du nouveau classeur
Application.ScreenUpdating = False
For i = 1 To Sheets.Count
Sheets(i).Activate
Range("A1").Select
ActiveSheet.Unprotect
Next i
Sheets(1).Activate
Range("A1").Select
Application.ScreenUpdating = True

' Elimine les formules et ne conserve que les valeurs
With ActiveWorkbook
For i = 1 To .Sheets.Count
.Sheets(i).UsedRange.Value = .Sheets(i).UsedRange.Value
Next i
End With

End Sub

"Gandalf" a écrit dans le message de
news:
Bonjour,

J'essaie de copier toutes les feuilles de mon classeur EXCEL vers un
nouveau
mais rencontre un problème : il me copie également les formules et les
liens.

Je voudrais simplement copier les données sans les formules.
Actuellement, j'utilise le code ci-dessous :

------------------------------------------------------
Dim F As WorkSheet
Application.ScreenUpdating = False
For Each F in Sheets
Sheets(F.Name).Copy
Next F
Application.ScreenUpdating = True
With ActiveWorkbook
.SaveAs "c:test.xls"
.Close
End With
------------------------------------------------------------------

Merci d'avance pour toute aide sur ce sujet.

PS : je suis obligé de faire cela pour réduire la taille de mon fichier
excel. Actuellement il fait 50 Mo !! Et je regarde qu'en copiant tous les
onglets "à la main" dans un nouveau fichier, il ne fait plus que 2 Mo !


Avatar
Gandalf
Merci lSteph pour la réponse. La macro citée ci-dessous fonctionne bien.
J'ai un nouveau fichier EXCEL sans formule mais cela ne résout pas mon
problème de copie. Je pensais que sans formule le fichier serait moins lourd.

Mon problème concerne donc le volume du fichier EXCEL.
Il fait 53 Mo ! Lors de la recopie (via la macro) j'obtiens la même taille
de fichier.
Du coup mon autre macro qui fait un traitement de masse plante (recopie de
tous les onglets sur un seul) !

Pourquoi mon fichier EXCEL est trop volumineux ? Je pense que certaines
feuilles ont des problèmes : la copie (clic droit par onglet) de certaines
feuilles vers un nouveau classeur pose problème. Le message est :
Excel ne peut pas terminer cette tache avec les ressources disponibles.
Sélectionnez moins de données ou fermez des applications.

Voyez-vous comment je peux réduire la taille du fichier ou résoudre ce
problème de copie ?

Merci d'avance.

"lSteph" a écrit :

> > Ca recopie les valeurs des cellules de la feuille source sur la feuille
> > cible. Ainsi, plus de formules.
N'est-ce pas ce que tu demandais?

> Il n'y a donc pas d'autre moyen que de faire autant de fichier que d'onglets ?
N'est-ce pas ce que tu demandais?
aussi!

Il y en a un

Enregistrer Sous et tu donnes un autre nom et un autre emplacement à
ton classeur
ensuite tu fais un copier coller des feuilles sur elles mêmes

ou
de la même façon par macro

Sub copyShAsWbk()
Dim i As Integer
Application.ScreenUpdating = False
ActiveWorkbook.SaveAs "c:test.xls"
For i = 1 To ActiveWorkbook.Sheets.Count
Sheets(i).Cells.Copy
Sheets(i).[A1].PasteSpecial xlValues
Next i
ActiveWorkbook.Save
End Sub


On 13 nov, 09:40, Gandalf wrote:
> "Daniel.C" wrote:
> > > Merci pour ta réponse mais je ne comprends pas ce que fait le
> > > "[A1].PasteSpecial xlValues" ?
>
> > Ca recopie les valeurs des cellules de la feuille source sur la feuille
> > cible. Ainsi, plus de formules.
>
> > > Donc ce code copie tous mes onglets dans des nouveaux classeurs ?
> > > Donc si j'ai 5 onglets j'aurais 5 fichiers excel en sortie ?
>
> > Oui.Teste-le pour t'en assurer.
> > Daniel
>
> Bonjour,
>
> Merci pour cette réponse.
> Il n'y a donc pas d'autre moyen que de faire autant de fichier que d'onglets ?
>
> Je vais déjà tester ainsi.




1 2