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 !

6 réponses

1 2
Avatar
Gandalf
Jol,
Merci pour l'info.
Avec cette macro, j'ai une boite de dialogue qui m'affiche tous mes onglets.
Je les coche tous car j'en ai besoin.
La macro me crée un nouveau fichier "Classeur1" mais cela ne me rend pas la
main. Le traitement n'aboutit pas je pense.

Si tu as d'autres pistes, je suis intéressé.
Merci.

"Jol" a écrit :

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
Jol
Ton fichier est toujours présent il suffit d'aller le chercher au pire par
le menu fenêtre ou dans la barre des taches.
Surtout tu devrais renommer et enregistrer ton fichier classeur1.

"Gandalf" a écrit dans le message de
news:
Jol,
Merci pour l'info.
Avec cette macro, j'ai une boite de dialogue qui m'affiche tous mes
onglets.
Je les coche tous car j'en ai besoin.
La macro me crée un nouveau fichier "Classeur1" mais cela ne me rend pas
la
main. Le traitement n'aboutit pas je pense.

Si tu as d'autres pistes, je suis intéressé.
Merci.

"Jol" a écrit :

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
Jol,

Malheureusement le gestionnaire des taches m'indique que EXCEL ne répond pas !
Je suis donc obligé de killer les process EXCEL pour m'en sortir. Je n'ai
donc pas le temps d'enregistrer le fichier et de voir ce qu'il se passe !

J'ai le message d'erreur suivant : la méthode copy de la classe sheets a
échoué !
Erreur d'exécution 1004 -> Débogage ou Fin ?
En faisant Fin, je n'ai plus de visible le classeur 1, je ne sais pas s'il a
été conservé ? Quoiqu'il en soit mon fichier EXCEL d'origine présente des
problèmes.

"Jol" wrote:

Ton fichier est toujours présent il suffit d'aller le chercher au pire par
le menu fenêtre ou dans la barre des taches.
Surtout tu devrais renommer et enregistrer ton fichier classeur1.

"Gandalf" a écrit dans le message de
news:
> Jol,
> Merci pour l'info.
> Avec cette macro, j'ai une boite de dialogue qui m'affiche tous mes
> onglets.
> Je les coche tous car j'en ai besoin.
> La macro me crée un nouveau fichier "Classeur1" mais cela ne me rend pas
> la
> main. Le traitement n'aboutit pas je pense.
>
> Si tu as d'autres pistes, je suis intéressé.
> Merci.
>
> "Jol" a écrit :
>
>> 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
Bon finalement j'ai résolu mon problème en supprimant le format de tous les
onglets de mon fichier EXCEL. Sur chaque onglet Edition->Format.

Ainsi mon fichier passe d'une taille de 54 Mo à une taille de 3 Mo.

Du coup ma macro de traitement refonctionne correctement et je ne suis plus
bloqué.


"Gandalf" wrote:

Jol,

Malheureusement le gestionnaire des taches m'indique que EXCEL ne répond pas !
Je suis donc obligé de killer les process EXCEL pour m'en sortir. Je n'ai
donc pas le temps d'enregistrer le fichier et de voir ce qu'il se passe !

J'ai le message d'erreur suivant : la méthode copy de la classe sheets a
échoué !
Erreur d'exécution 1004 -> Débogage ou Fin ?
En faisant Fin, je n'ai plus de visible le classeur 1, je ne sais pas s'il a
été conservé ? Quoiqu'il en soit mon fichier EXCEL d'origine présente des
problèmes.

"Jol" wrote:

> Ton fichier est toujours présent il suffit d'aller le chercher au pire par
> le menu fenêtre ou dans la barre des taches.
> Surtout tu devrais renommer et enregistrer ton fichier classeur1.
>
> "Gandalf" a écrit dans le message de
> news:
> > Jol,
> > Merci pour l'info.
> > Avec cette macro, j'ai une boite de dialogue qui m'affiche tous mes
> > onglets.
> > Je les coche tous car j'en ai besoin.
> > La macro me crée un nouveau fichier "Classeur1" mais cela ne me rend pas
> > la
> > main. Le traitement n'aboutit pas je pense.
> >
> > Si tu as d'autres pistes, je suis intéressé.
> > Merci.
> >
> > "Jol" a écrit :
> >
> >> 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
Jol
Peux-tu me dire comment tu fais pour trouver Edition - Format ?
"Gandalf" a écrit dans le message de
news:
Bon finalement j'ai résolu mon problème en supprimant le format de tous
les
onglets de mon fichier EXCEL. Sur chaque onglet Edition->Format.

Ainsi mon fichier passe d'une taille de 54 Mo à une taille de 3 Mo.

Du coup ma macro de traitement refonctionne correctement et je ne suis
plus
bloqué.


"Gandalf" wrote:

Jol,

Malheureusement le gestionnaire des taches m'indique que EXCEL ne répond
pas !
Je suis donc obligé de killer les process EXCEL pour m'en sortir. Je n'ai
donc pas le temps d'enregistrer le fichier et de voir ce qu'il se passe !

J'ai le message d'erreur suivant : la méthode copy de la classe sheets a
échoué !
Erreur d'exécution 1004 -> Débogage ou Fin ?
En faisant Fin, je n'ai plus de visible le classeur 1, je ne sais pas
s'il a
été conservé ? Quoiqu'il en soit mon fichier EXCEL d'origine présente des
problèmes.

"Jol" wrote:

> Ton fichier est toujours présent il suffit d'aller le chercher au pire
> par
> le menu fenêtre ou dans la barre des taches.
> Surtout tu devrais renommer et enregistrer ton fichier classeur1.
>
> "Gandalf" a écrit dans le message
> de
> news:
> > Jol,
> > Merci pour l'info.
> > Avec cette macro, j'ai une boite de dialogue qui m'affiche tous mes
> > onglets.
> > Je les coche tous car j'en ai besoin.
> > La macro me crée un nouveau fichier "Classeur1" mais cela ne me rend
> > pas
> > la
> > main. Le traitement n'aboutit pas je pense.
> >
> > Si tu as d'autres pistes, je suis intéressé.
> > Merci.
> >
> > "Jol" a écrit :
> >
> >> 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
Mgr.Abile
Bonsoir,
Menu / Edition / Effacer / Formats ?
Peut être ?
--
News://news.microsoft.com/microsoft.public.fr.excel
Allez en paix
T.Abile
"Jol" a écrit dans le message de
news:%
Peux-tu me dire comment tu fais pour trouver Edition - Format ?
"Gandalf" a écrit dans le message de
news:
Bon finalement j'ai résolu mon problème en supprimant le format de tous
les
onglets de mon fichier EXCEL. Sur chaque onglet Edition->Format.

Ainsi mon fichier passe d'une taille de 54 Mo à une taille de 3 Mo.

Du coup ma macro de traitement refonctionne correctement et je ne suis
plus
bloqué.


"Gandalf" wrote:

Jol,

Malheureusement le gestionnaire des taches m'indique que EXCEL ne répond
pas !
Je suis donc obligé de killer les process EXCEL pour m'en sortir. Je
n'ai
donc pas le temps d'enregistrer le fichier et de voir ce qu'il se passe
!

J'ai le message d'erreur suivant : la méthode copy de la classe sheets a
échoué !
Erreur d'exécution 1004 -> Débogage ou Fin ?
En faisant Fin, je n'ai plus de visible le classeur 1, je ne sais pas
s'il a
été conservé ? Quoiqu'il en soit mon fichier EXCEL d'origine présente
des
problèmes.

"Jol" wrote:

> Ton fichier est toujours présent il suffit d'aller le chercher au pire
> par
> le menu fenêtre ou dans la barre des taches.
> Surtout tu devrais renommer et enregistrer ton fichier classeur1.
>
> "Gandalf" a écrit dans le message
> de
> news:
> > Jol,
> > Merci pour l'info.
> > Avec cette macro, j'ai une boite de dialogue qui m'affiche tous mes
> > onglets.
> > Je les coche tous car j'en ai besoin.
> > La macro me crée un nouveau fichier "Classeur1" mais cela ne me rend
> > pas
> > la
> > main. Le traitement n'aboutit pas je pense.
> >
> > Si tu as d'autres pistes, je suis intéressé.
> > Merci.
> >
> > "Jol" a écrit :
> >
> >> 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 !
> >>
> >>
> >
> >
>
>







1 2