Copié/collé valeur uniquement et enregistrer

cetipabo

XLDnaute Nouveau
Bonjour a tous !

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 ?
 
Dernière édition:

ERIC S

XLDnaute Barbatruc
Re : Copié/collé valeur uniquement et enregistrer

Bonjour

je n'ai pas testé mais dans l'idée :

tu testes le nom du fichier à l'ouverture, si ce n'est pas l'original tu sors de ta macro

if not thisworkbook.name="monfichier" then exit sub
(je ne sais plus si c'est avec workbook ou activewindow)

Il faut que tu demandes à l'ouverture si tu veux créer ta copie, sinon tu ne pourras plus ouvrir ton original normalement

pour écraser sans msgbox, désactive les alertes, sauve et réactive (application.displayalerts = false puis remise à true)



Autre principe, à la fermeture de ton fichier, tu le sauves puis tu sauves la copie
 

cetipabo

XLDnaute Nouveau
Re : Copié/collé valeur uniquement et enregistrer

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 ?
 
Dernière édition:

ERIC S

XLDnaute Barbatruc
Re : Copié/collé valeur uniquement et enregistrer

re

et la sortie si pas le bon nom ?

Code:
Private Sub Workbook_Open()
'sort si pas classeur1
If Not ActiveWindow.Caption = "Classeur1" Then Exit Sub
'continue si classeur1
End Sub
 

cetipabo

XLDnaute Nouveau
Re : Copié/collé valeur uniquement et enregistrer

je n'ai pas compris...de quel nom parles-tu ?

Edit:
je crois avoir compris, si le fichier est le fichier original donc sortir de la macro :
If Not ActiveWindow.Caption = "Classeur1" Then Exit Sub

en admettant que classeur1 et le nom du fichier original, c'est ca ?
 
Dernière édition:

cetipabo

XLDnaute Nouveau
Re : Copié/collé valeur uniquement et enregistrer

Bonjour à tous


Avec ceci , pas d'écrasement ;)

avec Workbook.SaveCopyAs mon nouveau_fichier.xls affiche un message d'erreur a l'ouverture :
Impossible d'acceder a nouveau_fichier.xls

La macro s'execute a l'ouverture et provoque cette erreur.

Avec ThisWorkbook.SaveAs la macro ne provoque pas d'erreur.

J'ai essayé d'ajouter la ligne suivante tout au début mais la macro s'arrete de suite:

VB:
If Not ActiveWindow.Caption = "[B]nouveau_fichier[/B]" Then Exit Sub
Probleme de syntaxe ?
il faut mettre nouveau_fichier.xls ? "Microsoft Excel - nouveau_fichier.xls" ?
Rien ne marche...
 
Dernière édition:

ERIC S

XLDnaute Barbatruc
Re : Copié/collé valeur uniquement et enregistrer

Bonjour

oui, il faut le ".xls"

pour débugger tes macros, va sur la fenêtre vba correspondante et fais du pas à pas avec F8 (ligne jaune qui se déplace)

cela te permet d'avoir quelques infos, notamment sur le nom du fichier lu quand tu passes la souris sur activewindow.caption
 

cetipabo

XLDnaute Nouveau
Re : Copié/collé valeur uniquement et enregistrer

Nickel ca marche avec ce code:

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

'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
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Copié/collé valeur uniquement et enregistrer

Bonsoir

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
 

cetipabo

XLDnaute Nouveau
Re : Copié/collé valeur uniquement et enregistrer

Bonjour,

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.
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
217
Réponses
16
Affichages
672

Statistiques des forums

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