copie classeur sans formule en vba

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

excel_lence

XLDnaute Nouveau
salut t le monde,
je voudrai modifier le code ci dessous.
ce code me permet de faire des sauvegarde en XLSM et XLS en meme temps avec le meme nom de fichier et le meme emplacement ( adresse) ,le tout automatiquement.
le hic est que des fois, pour diverses raisons, j'ai pas envie de sauvegarder, il le fait quant meme malgré que dans la boite de dialogue je clique sur "non" il sauvegarde quand meme le deux fichier ( XLS & XLSM ).

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n%, chemin$, fichier$
If Val(Application.Version) < 12 Or Right(Me.Name, 4) = ".xls" Then Exit Sub
Me.Save 'sauvegarde
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si le fichier .xls existe déjà
With Application
n = .SheetsInNewWorkbook
.SheetsInNewWorkbook = Me.Worksheets.Count
Workbooks.Add 'nouveau document
.SheetsInNewWorkbook = n
End With
With ActiveWorkbook
For n = 1 To .Worksheets.Count
With .Worksheets(n)
Me.Worksheets(n).Cells.Copy .Cells
.UsedRange = .UsedRange.Value
.Name = Me.Worksheets(n).Name
End With
Next
chemin = ThisWorkbook.Path & "\" 'à adapter
fichier = Left(Me.Name, Len(Me.Name) - 5) & ".xls"
.SaveAs chemin & fichier, 56
.Close
End With
End Sub
 
Dernière édition:
Re : copie classeur sans formule en vba

Hello excel_lence.

Normal que le code s'exécute à chaque fois. Si tu regardes ta macro - qui est de type événementielle - tu constates qu'elle accepte un argument en paramètre : la variable Cancel de type booléen. Cette variable permet de faire des conditions sur la macro lorsque par exemple la boite de dialogue s'affiche (après que l'utilisateur ait demandé à fermer le classeur sans l'avoir enregistré) pour demander à l'utilisateur s'il souhaite enregistrer ou non les modifications apportées au document.

Je pense que pour que ton code fonctionne uniquement quand l'utilisateur a répondu "oui", il faut que tu ajoutes la condition suivante dans ta macro :
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If Cancel = True Then
    ' ....
    ' ton code d'enresgistrement
    ' ....
  End If
End Sub
De cette façon, Excel ne devrait - en théorie - pas enregistrer ton classeur si tu cliques sur "non" dans la boite de dialogue affichée.

{sorry pour le up du sujet}
 
Re : copie classeur sans formule en vba

salut matichoux,
merci pour ta réponse, mais je crois que je me suis mal expliqué ( suis pas pro en vba 😱 ), au fait quant je termine mon travail sur le classeur et que je le ferme, il me sauvegarde automatiquement meme si je clique sur "non", cela me cause des problemes car des fois je ne fait que des simulations et donc je perd le fichier.
milles merci.
 
Re : copie classeur sans formule en vba

Bonjour excel_lence, salut Matichoux,

Vous m'aviez interrogé par MP et je pensais ce problème réglé depuis longtemps !!

Je vous avais dit de mettre au début une MsgBox pour tester :

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n%, chemin$, fichier$
If Val(Application.Version) < 12 Or Right(Me.Name, 4) = ".xls" Then Exit Sub
If MsgBox("Voulez-vous créer un fichier de sauvegarde ?", 4) = 7 Then Exit Sub
'---suite du code---
A+
 
Re : copie classeur sans formule en vba

Re,

Il y a même un peu mieux car s'il y a eu des modifications du fichier on peut éviter qu'Excel demande si l'on veut enregistrer les modifications :

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n%, chemin$, fichier$
If Val(Application.Version) < 12 Or Right(Me.Name, 4) = ".xls" Then Exit Sub
If MsgBox("Voulez-vous créer un fichier de sauvegarde ?", 4) = 7 Then
  Me.Saved = True 'évite l'invite d'Excel
  Exit Sub
End if
 '---suite du code---
A+
 
Re : copie classeur sans formule en vba

au fait job75, encore deux trucs à régler 😱,

1- peut on avoir pour msgbox un OUI ou OUI pour tous, de facon à choisir entre un seul et plusieurs fichier XLS à sauvegarder en meme temps

2- j'ai plusieurs classeurs, tout est parfait, juste que l'un d'eux comporte une vingtaine de feuil et là un probleme se pose pour ce code, que faire.
 
Dernière édition:
Re : copie classeur sans formule en vba

Re,

1 - S'il y a plusieurs classeurs à sauvegarder il faut mettre la macro dans chaque ThisWorkBook de ces classeurs.

Il y aura une MsgBox pour chaque classeur si l'on ferme Excel.

2 - Je ne vois pas quel est le problème s'il y a 20 feuilles, il faudrait le fichier.

A+
 
Re : copie classeur sans formule en vba

Re,

Pour le point 1 il est mieux de préciser le nom du fichier dans la MsgBox :

Code:
If MsgBox("Sauvegarder le fichier '" & Me.Name & "' ?", 4) = 7 Then
  Me.Saved = True 'évite l'invite d'Excel
  Exit Sub
End If
A+
 
Re : copie classeur sans formule en vba

Bonjour Excel_lence,

Oui on peut se passer de la MsgBox, mais alors il faut utiliser une macro BeforeSave au lieu d'une BeforeClose :

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim n%, chemin$, fichier$
If Me.Saved Or Val(Application.Version) < 12 Or Right(Me.Name, 4) = ".xls" Then Exit Sub
With Application
  .ScreenUpdating = False
  .DisplayAlerts = False 'si le fichier .xls existe déjà
  n = .SheetsInNewWorkbook
  .SheetsInNewWorkbook = Me.Worksheets.Count
  Workbooks.Add 'nouveau document
  .SheetsInNewWorkbook = n
End With
With ActiveWorkbook
  For n = 1 To .Worksheets.Count
    With .Worksheets(n)
      Me.Worksheets(n).Cells.Copy .Cells
      .UsedRange = .UsedRange.Value
      .Name = Me.Worksheets(n).Name
    End With
  Next
  chemin = ThisWorkbook.Path & "\" 'à adapter
  fichier = Left(Me.Name, Len(Me.Name) - 5) & ".xls"
  .SaveAs chemin & fichier, 56
  .Close
End With
End Sub
Le fichier de sauvegarde .xls est créé quand on enregistre les modifications, en cours de session ou à la fermeture.

Par ailleurs qu'en est-il de votre fichier des 20 feuilles ??? Déposez-le sur le fil.

A+
 
Re : copie classeur sans formule en vba

merci grandement job75,
c'est ce que je cherchais depuis le debut, j'ai peut etre du mal à exprimer mes besoins.
pour ce qui est du 2eme point j'avoue que j'avais pas voulu encore vous déranger.
je joins le fameux fichier à 20 feuilles, par rapport aux autres fichiers, il a, en plus, des feuilles portant n° et en rouge de plus.
les quatres premieres feuilles sont identiques pour tous les fichiers.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
590
Réponses
5
Affichages
705
  • Question Question
Microsoft 365 CSV en EXCEL
Réponses
1
Affichages
124
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
371
Réponses
3
Affichages
800
  • Question Question
Microsoft 365 Code VBA
Réponses
7
Affichages
908
Retour