j'ai un fichier excel avec des formules et des requettes lourdes (car recherche de données sur un reseau) ce fichier ne peut donc pas etre utilisé par tout le monde. j'ai donc décidé de l'ouvrir 1x le matin a 8h00 et 1x a 13h00 pour qu'il se mette a jour. Ensuite on fait un copier/coller valeur et enregistrer le fichier sous un autre nom.
Nous utilisons donc le fichier contenant que les valeurs.
Je souhaiterai faire une macro qui:
- copie le contenu de la feuille et collage valeur uniquement sur la meme feuille (afin de conserver la mise en page, format cellule, colonnes etc...).
- enregistre le fichier sous un autre nom
Il faut bien entendu que la macro s'execute à l'ouverture du fichier mais une fois que le fichier a terminé sa mise a jour. Ensuite je pourrais mettre une tache planifiée qui execute le fichier aux heures indiquées (hereusement ca je sais le faire).
quelqu'un pourrait il m'aiguiller ?
En vous remerciant par avance.
Edit:
pour le moment voici ce que j'ai fait:
Dans ThisWorkBook, j'ai mis:
VB:
Private Sub Workbook_Open()
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWorkbook.SaveAs "C:\blabla\nouveau_fichier.xls"
End Sub
Probleme 1 :
Mon fichier source (qui contient les formules) s'ecrase en version "sans formules"...
Probleme 2:
lorsque le fichier "nouveau_fichier.xls" existe déjà j'ai un message qui me demande si je veux l'ecraser. il faudrait qu'il l'ecrase sans demander...
Probleme 3:
Le nouveau fichier contient lui aussi la macro, comment éviter qu'elle ne se recopie ?
Le probleme1 en fait est normal, ce n'est pas reellement un probleme.
En fait apres execution de la macro le fichie "en cours" n'est plus le fichier source, donc en fait il ne s'est pas écrasé.
J'ai pu le verifier en mettant le niveau de securité des macro sur "elevé" ce qui empeche l'execution de la macro et je retrouve bien mon fichier avec les formules.
j'ai résolu le probleme2 (message de confirmation) comme ceci:
VB:
Private Sub Workbook_Open()
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
With Application
.DisplayAlerts = False
.EnableEvents = False
ThisWorkbook.SaveAs "C:\blabla\nouveau_fichier.xls"
.EnableEvents = True
.DisplayAlerts = True
End With
End Sub
Du coup le probleme3 n'est plus apparant, la macro s'execute sur le nouveau_fichier.xls, mais on ne s'en rend pas compte car il n'y a plus de message.
donc le seul petit soucis c'est que maintenant je dois mettre le niveau de securité macro sur "Elevé" pour ouvrir le fichier original sans que la macro s'execute.
J'ai essayé en appuyant sur SHIFT en lacant le fichier mais j'ai un message : "Impossible d'ouvrir une macro complementaire microsoft office excel pour la modifier. Modifier le document ayant servi a la créer." ?? kezako ?
Private Sub Workbook_Open()
If ActiveWindow.Caption = "test.xls" Then Exit Sub
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
With Application
.DisplayAlerts = False
.EnableEvents = False
ThisWorkbook.SaveAs "S:\navette\informatique\test.xls"
.EnableEvents = True
.DisplayAlerts = True
End With
'ActiveWorkbook.Close
End Sub
Donc le fichier original créer une copie test.xls
si le fichier test.xls est ouvert la macro ne refait pas le copié/collé.
Merci Eric S pour votre aide .
Par contre Je reste sur ma faim concernant la proposition de Staple1600 avec le Workbook.SaveCopyAs, méthode
cetipabo
Pour combler ta faim
(à adapter à tes besoins avant de tester)
VB:
Sub test()
Dim Chemin$, Fichier$
Dim a As Worksheet, b As Workbook
Chemin = "C:\Temp\": Fichier = "test"
Set a = ThisWorkbook.Sheets(1)
a.Copy
Set b = ActiveWorkbook
With b.Sheets(1).UsedRange
.Value = .Value
End With
b.SaveCopyAs Chemin & Fichier & ".xlsx"
b.Close False
End Sub
il semblerait que la macro se lance avant que le fichier excel n'ai calculé le contenu des celulles....
voici mon code actuel :
VB:
Private Sub Workbook_Open()
If ActiveWindow.Caption = "test.xls" Then Exit Sub
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
With Application
.DisplayAlerts = False
.EnableEvents = False
ThisWorkbook.SaveAs "S:\navette\informatique\test.xls"
.EnableEvents = True
.DisplayAlerts = True
End With
Application.quit
End Sub
Comment remedier a ce probleme ???
A l'ouverture le fichier excel doit faire les calculs puis executer la macro...
Le calcul ne se fait que quand je bloque les macros.