Modification de macro pour enregistement sans lien

LeNainPosteur

XLDnaute Nouveau
Bonjour à tous,

Je suis nouveau sur le forum et je rencontre un petit problème pour modifier une macro déjà existante pour y intégrer une simple modification: la liaison sans lien ! Je m'explique la macro en question permet de sauvegarder une feuille d'un classeur vers un autre classeur. Cependant les liens vers le classeur d'origine sont conservés, chose que je ne souhaite pas.

En fouillant sur le forum j'ai trouvé quelques infos que je n'ai malheureusement pas pu intégrer à mon code... pour cause de non compétence Lol :confused: :D !!

Voici la macro

Sub SauveFeuilleActive()
'''---------------------------------------------------------------
''' Sauvegarde de la feuille active dans un nouveau classeur
'''---------------------------------------------------------------
Dim szNomFichier As Variant

'''Demande nom du fichier (par défaut, le nom de la feuille)
szNomFichier = Application.GetSaveAsFilename( _
InitialFileName:=ActiveSheet.Name, _
FileFilter:="Classeur Excel (*.xls), *.xls")
If szNomFichier <> False Then '''szNomFichier reçoit False si on a cliqué sur Annuler
'''Création du nouveau classeur avec copie de la feuille active
ActiveSheet.Copy
With ActiveWorkbook
'''Sauvegarde
.SaveAs Filename:=szNomFichier, FileFormat:=xlNormal
'''Fermeture
.Close
End With
End If
End Sub

La fonction ActiveSheet.PasteSpecial xlPasteValues semble pas mal mais je ne trouve pas comment l'inclure.

Merci d'avance pour votre aide. :)
 

pierrejean

XLDnaute Barbatruc
Re : Modification de macro pour enregistement sans lien

bonjour LeNainPosteur

vois si cela te convient

c'est peut-etre un peu lourd !!!

Code:
Sub SauveFeuilleActive()
'''---------------------------------------------------------------
''' Sauvegarde de la feuille active dans un nouveau classeur
'''---------------------------------------------------------------
Dim szNomFichier As Variant
Dim acopier As String
acopier = ActiveSheet.Name
ActiveWorkbook.Worksheets.Add
ActiveSheet.Name = "copie"
    Sheets(acopier).Select
    Sheets(acopier).Cells.Copy
 
    Sheets("copie").Select
    Sheets("copie").Cells.Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Application.CutCopyMode = False
'''Demande nom du fichier (par défaut, le nom de la feuille)
szNomFichier = Application.GetSaveAsFilename( _
InitialFileName:=ActiveSheet.Name, _
FileFilter:="Classeur Excel (*.xls), *.xls")
If szNomFichier <> False Then '''szNomFichier reçoit False si on a cliqué sur Annuler
'''Création du nouveau classeur avec copie de la feuille active
ActiveSheet.Copy
With ActiveWorkbook
'''Sauvegarde
.SaveAs Filename:=szNomFichier, FileFormat:=xlNormal
'''Fermeture
.Close
End With
Application.DisplayAlerts = False
Sheets("copie").Delete
Application.DisplayAlerts = True
End If
End Sub
 

LeNainPosteur

XLDnaute Nouveau
Re : Modification de macro pour enregistement sans lien

Le code fonctionne bien, voire très bien, merci :p . Les deux seuls petits points sont la mise en forme qui n'est pas conservée et la non suppression de la feuille 'copie' créée dans le cas d'un annulation de l'enregistrement.

Je cherche aussi de mon côté... sans garantie !

Merci :D
 

Darnel

XLDnaute Impliqué
Re : Modification de macro pour enregistement sans lien

Bonjour

Pour ce qui est de conserver la mise en forme lors de la copie, remplace simplement ActiveSheet.PasteSpecial xlPasteValues par :

Selection.Paste

ça copiera l'integralité de ta selection.
 

pierrejean

XLDnaute Barbatruc
Re : Modification de macro pour enregistement sans lien

re LeNainPosteur

pour supprimer toujours la feuille copie il suffit de deplacer le End if avant la suppression

.Close
End With

End IF

Application.DisplayAlerts = False
Sheets("copie").Delete
Application.DisplayAlerts = True

End Sub

@Darnel

xlPasteValues semble indispensable puisque c'est la raison même de la manip (supprimer les references à d'autres feuilles)
 

LeNainPosteur

XLDnaute Nouveau
Re : Modification de macro pour enregistement sans lien

Juste une petite question: peut on superposer plusieurs arguments pour le Paste.Special, en l'occurence, Paste:=xlValues et Paste:=xlFormat ?

Sinon une autre solution pourrait être d'appliquer un Paste:=xlPasteAll sur les cellules ne nécessitant pas une suppression de lien et d'appliquer un Paste:=xlValues sur les cellules nécessitant une suppression de lien, vous en pensez quoi? :rolleyes: Tout cela en jouant sur les Range du Copy...

Merci :rolleyes:
 

pierrejean

XLDnaute Barbatruc
Re : Modification de macro pour enregistement sans lien

bonjour LeNainPosteur

désolé mais j'ais été pris par ailleurs

veux-tu tester cela:

Code:
Sub SauveFeuilleActive()
'''---------------------------------------------------------------
''' Sauvegarde de la feuille active dans un nouveau classeur
'''---------------------------------------------------------------
Dim szNomFichier As Variant
Dim acopier As String
acopier = ActiveSheet.Name
ActiveWorkbook.Worksheets.Add
ActiveSheet.Name = "copie"
    Sheets(acopier).Select
    Sheets(acopier).Cells.Copy
    
    Sheets("copie").Select
    Sheets("copie").Cells.Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Application.CutCopyMode = False
'''Demande nom du fichier (par défaut, le nom de la feuille)
szNomFichier = Application.GetSaveAsFilename( _
InitialFileName:=ActiveSheet.Name, _
FileFilter:="Classeur Excel (*.xls), *.xls")
If szNomFichier <> False Then '''szNomFichier reçoit False si on a cliqué sur Annuler
'''Création du nouveau classeur avec copie de la feuille active
ActiveSheet.Copy
With ActiveWorkbook
'''Sauvegarde
.SaveAs Filename:=szNomFichier, FileFormat:=xlNormal
'''Fermeture
.Close
End With
End If
Application.DisplayAlerts = False
Sheets("copie").Delete
Application.DisplayAlerts = True

End Sub
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 811
dernier inscrit
caroline29260