Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Enregistrement d'une copie de sauvegarde sans les liaisons
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
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
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
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
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
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
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
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
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...
Re : Enregistrement d'une copie de sauvegarde sans les liaisons
Re,
J'en pense que je n'ai pas d'Excel 97 sous la main, qu'il faudrait tester sur cette version le code généré si on rompt une liaison dans un classeur en enregistrant une macro
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
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.