Enregistrement d'une copie de sauvegarde sans les liaisons

Patanes

XLDnaute Nouveau
Bonjour,

Je cherche un code vba me permettenat d'enregistrer une copie d'un classeur qui comporte des liaisons avec un autre classeur. Cette copie, elle ne doit pas prendre en compte les liaisons mais seulement les valeurs. J'utilise Excel 2003

Merci d votre aide
 

fredl

XLDnaute Impliqué
Re : Enregistrement d'une copie de sauvegarde sans les liaisons

traiter toutes les cellules avec des liaisons en faisant un copier - collage spécial-valeur : ex sur une cellule ci dessous.
Range("A5").Select 'ta cellule avec une liaison
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

pour traiter plusieurs cellules, les preselectionner et faire un
for each vcell in selection
Application.CutCopyMode = False
vcell.Copy
vcell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
next

nb : attention! apres action, les liaisons sont définitivements perdues
Frédéric
 

Patanes

XLDnaute Nouveau
Re : Enregistrement d'une copie de sauvegarde sans les liaisons

Ce que je cherche c'est enregistrer une copie( actuellement cette copie se fait automatiquement en vb(action sur clic)) de mon classeur sans les liaison mais en gardant intact le classeur d'origine et également les liaisons
 

fredl

XLDnaute Impliqué
Re : Enregistrement d'une copie de sauvegarde sans les liaisons

apres copie auto de ton fichier, il ne te reste plus qu'à lancer ma macro apres avoir paramétré la plage à traiter :

Set Sel = Range("A1:A56") 'ta plage
for each vcell in Sel
Application.CutCopyMode = False
vcell.Copy
vcell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
next

A tester!
dis moi
Cdt
frédéric
 

tototiti2008

XLDnaute Barbatruc
Re : Enregistrement d'une copie de sauvegarde sans les liaisons

Re,

Je ne voudrai pas lancer de macro après la sauvegarde car cette sauvegarde est pour des utilisateur ne connaissant peu ou très peu EXcel
Non, mais ta macro qui enregistre une copie de ton classeur, à la place d'un simple SaveAs (ou SaveCopyAs), pourrait, enregistrer la copie du classeur, supprimer toutes les liaisons dans cette copie puis le réenregistrer ?

Pour supprimer toutes les liaisons (attention à ne pas l'appliquer sur ton classeur original), un truc comme ça devrait le faire

Code:
Sub SupprLiaisons()
Dim ListLiens, i as long
    ListLiens = ActiveWorkbook.LinkSources
    For i = LBound(ListLiens) To UBound(ListLiens)
        ActiveWorkbook.BreakLink ListLiens(i), xlLinkTypeExcelLinks
    Next i
End Sub
 

Patanes

XLDnaute Nouveau
Re : Enregistrement d'une copie de sauvegarde sans les liaisons

Re,

Non, mais ta macro qui enregistre une copie de ton classeur, à la place d'un simple SaveAs (ou SaveCopyAs), pourrait, enregistrer la copie du classeur, supprimer toutes les liaisons dans cette copie puis le réenregistrer ?

Pour supprimer toutes les liaisons (attention à ne pas l'appliquer sur ton classeur original), un truc comme ça devrait le faire

Code:
Sub SupprLiaisons()
Dim ListLiens, i as long
    ListLiens = ActiveWorkbook.LinkSources
    For i = LBound(ListLiens) To UBound(ListLiens)
        ActiveWorkbook.BreakLink ListLiens(i), xlLinkTypeExcelLinks
    Next i
End Sub
Je vois pas trop bien ou le mettre sous le code
je te joins mon code actuel

Private Sub CommandButton1_Click()


' Determination du nom
Dim nom As String
nom = Year(Date) - 1 & "_" & ActiveWorkbook.Name
ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & nom
' Message confirmant la sauvegarde du classeur
rep = MsgBox("Votre classeur est sauvegardé sous le nom : " & nom, vbYes + vbInformation, "Copie sauvegarde classeur")
' Boite de message
If MsgBox("Voulez vous envoyer le classeur..??", vbYesNo, "Demande de confirmation") = vbYes Then
' Action si réponse OUI de la boite de message
' Ouverture de la fenêtre de messagerie
Application.Dialogs(xlDialogSendMail).Show
' Boite de message
rep = MsgBox("Le classeur a été envoyé..!", , "Action de la messagerie")
' Action si réponse NON de la boite de message
Else
' Boite de message
rep = MsgBox("Le classeur n'a pas été envoyé..!", , "Action de la messagerie")
End If
End Sub
 

fredl

XLDnaute Impliqué
Re : Enregistrement d'une copie de sauvegarde sans les liaisons

voir ci dessous!

Sub SupprLiaisons()
Dim ListLiens, i as long
ListLiens = ActiveWorkbook.LinkSources
For i = LBound(ListLiens) To UBound(ListLiens)
ActiveWorkbook.BreakLink ListLiens(i), xlLinkTypeExcelLinks
Next i
End Sub

Private Sub CommandButton1_Click()


' Determination du nom
Dim nom As String
nom = Year(Date) - 1 & "_" & ActiveWorkbook.Name
ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & nom
' Message confirmant la sauvegarde du classeur
rep = MsgBox("Votre classeur est sauvegardé sous le nom : " & nom, vbYes + vbInformation, "Copie sauvegarde classeur")


call SupprLiaisons
activeworkbook.save

' Boite de message
If MsgBox("Voulez vous envoyer le classeur..??", vbYesNo, "Demande de confirmation") = vbYes Then
' Action si réponse OUI de la boite de message
' Ouverture de la fenêtre de messagerie
Application.Dialogs(xlDialogSendMail).Show
' Boite de message
rep = MsgBox("Le classeur a été envoyé..!", , "Action de la messagerie")
' Action si réponse NON de la boite de message
Else
' Boite de message
rep = MsgBox("Le classeur n'a pas été envoyé..!", , "Action de la messagerie")
End If
End Sub
 

Patanes

XLDnaute Nouveau
Re : Enregistrement d'une copie de sauvegarde sans les liaisons

voir ci dessous!

Sub SupprLiaisons()
Dim ListLiens, i as long
ListLiens = ActiveWorkbook.LinkSources
For i = LBound(ListLiens) To UBound(ListLiens)
ActiveWorkbook.BreakLink ListLiens(i), xlLinkTypeExcelLinks
Next i
End Sub

Private Sub CommandButton1_Click()


' Determination du nom
Dim nom As String
nom = Year(Date) - 1 & "_" & ActiveWorkbook.Name
ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & nom
' Message confirmant la sauvegarde du classeur
rep = MsgBox("Votre classeur est sauvegardé sous le nom : " & nom, vbYes + vbInformation, "Copie sauvegarde classeur")


call SupprLiaisons
activeworkbook.save

' Boite de message
If MsgBox("Voulez vous envoyer le classeur..??", vbYesNo, "Demande de confirmation") = vbYes Then
' Action si réponse OUI de la boite de message
' Ouverture de la fenêtre de messagerie
Application.Dialogs(xlDialogSendMail).Show
' Boite de message
rep = MsgBox("Le classeur a été envoyé..!", , "Action de la messagerie")
' Action si réponse NON de la boite de message
Else
' Boite de message
rep = MsgBox("Le classeur n'a pas été envoyé..!", , "Action de la messagerie")
End If
End Sub

ça bug sur "ActiveWorkbook.BreakLink ListLiens(i), xlLinkTypeExcelLinks" lors de l execution du code (à l'appel de la macro)
Mais en ce moment je teste avec une version Excel97 ..(une partie de mes utilisateurs à cette version..eh oui ça date!!!.) là est peut être le problème
 

fredl

XLDnaute Impliqué
Re : Enregistrement d'une copie de sauvegarde sans les liaisons

tototiti 2008, qu'en penses tu?
je viens de tester sous 2003 et ça le fait.
Ca bugge par contre si il n'y a pas de liaisons dans le fichier.
Si tu ne t'en sorts pas il faudra faire avec la méthode du copier coller valeur que je t'avais proposée...
 
Dernière édition:

Patanes

XLDnaute Nouveau
Re : Enregistrement d'une copie de sauvegarde sans les liaisons

J'ai testé la macro directement en la lançant , et j'ai le même bug sur la ligne
"ActiveWorkbook.BreakLink ListLiens(i), xlLinkTypeExcelLinks"
Je vais voir sur Excel 2003 ou 2007 ce que cela donne mais je pense qu'en 97 ça ne peut pas fonctionnner
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz