Problème d'enregistrement d'un fichier en xlsm en VBA
Fermé
BING02
-
12 mars 2015 à 18:31
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 14 mars 2015 à 10:00
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 14 mars 2015 à 10:00
A voir également:
- Problème d'enregistrement d'un fichier en xlsm en VBA
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier host - Guide
- Ouvrir un fichier .bin - Guide
3 réponses
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
12 mars 2015 à 19:00
12 mars 2015 à 19:00
Bonjour,
voici une sauvegarde en xlsm:
voici une sauvegarde en xlsm:
Sub sauvegarder() Dim extension As String Dim chemin As String Dim nomfichier As String extension = ".xlsm" chemin = "C:\chemin\" nomfichier = ActiveSheet.Range("A1") & extension With ActiveWorkbook .SaveAs Filename:=chemin & nomfichier, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False End With End Sub
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
13 mars 2015 à 17:32
13 mars 2015 à 17:32
comme ceci:
A la place de cela
ceci:
Voilà
A la place de cela
'emplacement choisi par l'utilisateur NomSauve = ActiveWorkbook.Application.GetSaveAsFilename(InitialFileName:=NomDeSauvegarde, _ FileFilter:="Classeur Excel(*.xlsm), *.xlsm") If NomSauve = False Then Exit Sub ActiveWorkbook.SaveAs NomDeSauvegarde = NomSauve
ceci:
'emplacement choisi par l'utilisateur NomSauve = ActiveWorkbook.Application.GetSaveAsFilename(InitialFileName:=NomDeSauvegarde, _ FileFilter:="Classeur Excel(*.xlsm), *.xlsm") ActiveWorkbook.SaveAs Filename:=NomSauve, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Voilà
Bonsoir,
Super !!! Merci beaucoup pour ton aide. J'ai encore un autre petit souci malgré tout. Cette macro m'enregistre bien la copie XLSM mais elle me crée un classeur supplémentaire dont je n'ai pas besoin. Je ne comprends pas d'où sort ce classeur qui lui n'est pas en XLSM (il est en XSLX) et qui n'est pas traité par la macro générale puisqu'il n'est pas fermé à la fin.
Aurais-tu une idée ??? Je pense que c'est dans ma macro d'enregistrement en XLSM d'autant que qu'en j'exécute cette macro toute seule le phénomène se produit bien aussi. Cette macro est donc maintenant comme suit :
Je la lis et je la relis mais je ne comprends pas ??? Mystère.
Merci d'avance et bonne soirée.
Super !!! Merci beaucoup pour ton aide. J'ai encore un autre petit souci malgré tout. Cette macro m'enregistre bien la copie XLSM mais elle me crée un classeur supplémentaire dont je n'ai pas besoin. Je ne comprends pas d'où sort ce classeur qui lui n'est pas en XLSM (il est en XSLX) et qui n'est pas traité par la macro générale puisqu'il n'est pas fermé à la fin.
Aurais-tu une idée ??? Je pense que c'est dans ma macro d'enregistrement en XLSM d'autant que qu'en j'exécute cette macro toute seule le phénomène se produit bien aussi. Cette macro est donc maintenant comme suit :
Je la lis et je la relis mais je ne comprends pas ??? Mystère.
Merci d'avance et bonne soirée.
Bonsoir,
J'ai l'impression que ma macro ne s'est pas insérée dans la carré gris (j'ai tenté pour la première fois car je ne suis pas un grand spécialiste de la chose et çà se confirme !!) alors je l'insère normalement !!
Sub Copier_enregistr_DEVIS_XLSM()
Application.EnableEvents = False
ThisWorkbook.Worksheets("PROPOSITION").Copy
With ActiveWorkboock
'suppression des boutons de commande : ne supprime que les boutons de commande pas les photos
For Each s In ActiveSheet.Shapes
'Bouton "Changer de véhicule"
If s.TopLeftCell.Address = "$J$12" Then
s.Delete
End If
Next s
'Forme BLANCHE masquant "caractéristiques techniques du véhicule" sous les boutons
For Each s In ActiveSheet.Shapes
If s.TopLeftCell.Address = "$I$12" Then
s.Delete
End If
Next s
'Boutons "Enregistrer DEVIS", "NOUVEAU DEVIS", "QUITTER"
For Each s In ActiveSheet.Shapes
If s.TopLeftCell.Address = "$N$12" Then
s.Delete
End If
Next s
For Each s In ActiveSheet.Shapes
' Bouton "NV"
If s.TopLeftCell.Address = "$R$8" Then
s.Delete
End If
Next s
'suppression des macros
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
End With
'Suppression des formules
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Cells(1, 1).Select
'definition du nom du fichier POUR ENREGISTREMENT XLSM
NomDeSauvegarde = ActiveWorkbook.Sheets("PROPOSITION").Range("A1").Text
'efface les données contenues dans les cases "A1","A2","G3", ....
Sheets("PROPOSITION").Range("A1,A2,G3,H3,H7,M3,N1,N3,N4,P7").ClearContents
'enregistre la copie en XLSM sous le nom contenu dans la cellule A1 de la feuille "PROPOSITION" du
'fichier Source à un emplacement choisi par l'utilisateur
NomSauve = ActiveWorkbook.Application.GetSaveAsFilename(InitialFileName:=NomDeSauvegarde, _
FileFilter:="Classeur Excel(*.xlsm), *.xlsm")
ActiveWorkbook.SaveAs Filename:=NomSauve, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End With
Application.EnableEvents = True
Exit Sub
End Sub
Bonsoir et merci encore pour ton aide
BING02
J'ai l'impression que ma macro ne s'est pas insérée dans la carré gris (j'ai tenté pour la première fois car je ne suis pas un grand spécialiste de la chose et çà se confirme !!) alors je l'insère normalement !!
Sub Copier_enregistr_DEVIS_XLSM()
Application.EnableEvents = False
ThisWorkbook.Worksheets("PROPOSITION").Copy
With ActiveWorkboock
'suppression des boutons de commande : ne supprime que les boutons de commande pas les photos
For Each s In ActiveSheet.Shapes
'Bouton "Changer de véhicule"
If s.TopLeftCell.Address = "$J$12" Then
s.Delete
End If
Next s
'Forme BLANCHE masquant "caractéristiques techniques du véhicule" sous les boutons
For Each s In ActiveSheet.Shapes
If s.TopLeftCell.Address = "$I$12" Then
s.Delete
End If
Next s
'Boutons "Enregistrer DEVIS", "NOUVEAU DEVIS", "QUITTER"
For Each s In ActiveSheet.Shapes
If s.TopLeftCell.Address = "$N$12" Then
s.Delete
End If
Next s
For Each s In ActiveSheet.Shapes
' Bouton "NV"
If s.TopLeftCell.Address = "$R$8" Then
s.Delete
End If
Next s
'suppression des macros
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
End With
'Suppression des formules
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Cells(1, 1).Select
'definition du nom du fichier POUR ENREGISTREMENT XLSM
NomDeSauvegarde = ActiveWorkbook.Sheets("PROPOSITION").Range("A1").Text
'efface les données contenues dans les cases "A1","A2","G3", ....
Sheets("PROPOSITION").Range("A1,A2,G3,H3,H7,M3,N1,N3,N4,P7").ClearContents
'enregistre la copie en XLSM sous le nom contenu dans la cellule A1 de la feuille "PROPOSITION" du
'fichier Source à un emplacement choisi par l'utilisateur
NomSauve = ActiveWorkbook.Application.GetSaveAsFilename(InitialFileName:=NomDeSauvegarde, _
FileFilter:="Classeur Excel(*.xlsm), *.xlsm")
ActiveWorkbook.SaveAs Filename:=NomSauve, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End With
Application.EnableEvents = True
Exit Sub
End Sub
Bonsoir et merci encore pour ton aide
BING02
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
14 mars 2015 à 10:00
14 mars 2015 à 10:00
Apprends-toi a mettre Option Explicit au début de ton code, tu verras alors les erreurs que tu as:
With ActiveWorkboock avec un c en trop
NomSauve et NomDeSauvegarde variables qui ne sont pas déclarées
Voici le code qui fonctionne très bien et qui ne m'enregistre aucun autre fichier que le xlsm!
With ActiveWorkboock avec un c en trop
NomSauve et NomDeSauvegarde variables qui ne sont pas déclarées
Voici le code qui fonctionne très bien et qui ne m'enregistre aucun autre fichier que le xlsm!
Option Explicit Private Sub CommandButton1_Click() Copier_enregistr_DEVIS_XLSM End Sub Sub Copier_enregistr_DEVIS_XLSM() Dim NomDeSauvegarde, NomSauve Application.EnableEvents = False ThisWorkbook.Worksheets("PROPOSITION").Copy With ActiveWorkbook 'suppression des macros With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule .DeleteLines 1, .CountOfLines End With 'definition du nom du fichier POUR ENREGISTREMENT XLSM NomDeSauvegarde = ActiveWorkbook.Sheets("PROPOSITION").Range("A1").Text 'efface les données contenues dans les cases "A1","A2","G3", .... 'Sheets("PROPOSITION").Range("A1,A2,G3,H3,H7,M3,N1,N3,N4,P7").ClearContents 'enregistre la copie en XLSM sous le nom contenu dans la cellule A1 de la feuille "PROPOSITION" du 'fichier Source à un emplacement choisi par l'utilisateur NomSauve = ActiveWorkbook.Application.GetSaveAsFilename(InitialFileName:=NomDeSauvegarde, _ FileFilter:="Classeur Excel(*.xlsm), *.xlsm") ActiveWorkbook.SaveAs Filename:=NomSauve, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False End With Application.EnableEvents = True 'Exit Sub'cela n'est pas necessaire puisque l'on est à la fin End Sub
13 mars 2015 à 15:14
Merci beaucoup. Je ne doute pas qu'elle fonctionne mais dans mon cas précis je ne sais pas comment l'intégrer dans ma procédure globale.
Pourrais-tu m'aider ?
D'avance merci
BING02