Copier - Coller fichier Excel
Bonjour,
Je me suis pris le temps de parcourir survoler (soyons honnêtes, hein!) le forum via une recherche de mots clés, je n'ai pas trouvé quelque chose qui semblait répondre à ma question :
Je travaille à la réalisation d'un fichier "Devis.xls". Il sera mis à disposition dans un serveur (pour faire simple : "S:\Devis.xls"), accessible à tous. Mais pour travailler convenablement (vu les lenteurs de la connexion à mon boulot), chacun travaille sur une copie locale, "D:\Devis.xls".
Certains administrateurs ont la possibilité de modifier le contenu (les prix...) du fichier distant (S). Ceci fait, une manipulation incrémente un numéro de version.
Lors de l'ouverture du fichier "D:\Devis.xls", il contrôle le numéro de version du S et du D :
if numVersionLocale <> numVersionDistante then miseAJour(jusque là ça marche)
Le problème : le fichier ne peut pas "se réécrire" par dessus. Il faut fermer le fichier sur "D" afin de copier l'autre. Ce faisant, la macro s'arrête (sans blague!
J'ai essayé via un autre fichier :
if numVersionLocale <> numVersionDistante then workbooks.open("Updater.xls")ce dernier exécute la même macro dans le "workbook.open". Sauf qu'à un moment, pour que ça marche, il faut fermer "Devis.xls", ce qui stoppe du coup la macro de "Updater.xls".
Je veux souhaite que ça se fasse automatiquement, de sorte qu'il ne faille pas, pour chaque utilisateur, effectuer une manipulation manuelle (il y a des boulets qui savent moins bien utiliser excel que moi d'expliquer ce que je veux...
Si quelqu'un a une idée...
Note : je joins pas le fichier pour l'instant parce qu'il est l'heure pour moi de rentrer à la maison et qu'il est un peu plus complexe que ça. Par ailleurs, avoir le fichier n'est pas d'une grande utilité. J'utilise ce code pour copier le fichier :
Function copierFichier(ByVal origine As String, destination As String, fichier As String)
Dim fso As Object, Src$, Dest$, Fich$
Set fso = CreateObject("Scripting.FileSystemObject")
Src = origine & "\"
Dest = destination & "\"
Fich$ = fichier
fso.CopyFile Src & Fich, Dest & Fich
End FunctionNote : ça marche pour n'importe quel fichier du moment que le fichier du dossier cible est fermé.
D'avance, merci!
Bonsoir.
Une idée (elle vaut ce qu'elle vaut, je n'ai pas possibilité d'essayer) me trotte la tête.
Ne serait-il pas possible de faire la macro de mise à jour sur le fichier situé dans S:/ ?
Je m'explique :
L'utilisateur ouvre le fichier D:\Devis.xls -> A l'ouverture une macro s’exécute et vérifie la version -> S'il y a besoin de faire une mise à jour, tu lances un Msgbox pour avertir l'utilisateur, le fichier S:\Devis.xls s'ouvre -> La macro, qui se trouverait alors dans S:\Devis.xls se lance et ferme D:\Devis.xls -> Une fois la macro mise à jour terminée, tu envoies un Msgbox du type "La mise à jour est terminée. Vous pouvez réouvrir le fichier" et tu fermes S:\Devis.xls -> Reste plus qu'à demander à l'utilisateur de réouvrir le fichier D:\Devis.xls
J'espère avoir été clair... A tester.
Cordialement.
Bonsoir, et merci d'avoir répondu rapidement.
J'essayerai demain, ou lundi, selon le temps que j'ai de disponible (ce n'est pas ma principale fonction
Je m'explique : la fonction que devrait faire "S:\Devis.xls", je l'ai attribuée au fichier "Updater.xls", et la macro se bloque dès qu'on ferme "D:\Devis.xls". Et ouvrir le fichier directement sur S est impensable, même par le biais d'un raccourci.
Mais ça m'inspire une autre idée qui marcherait : Créer un fichier "Opener" (oui, j'aime les anglicismes pour nommer mes fichiers
Edit : en plus, il faudrait ouvrir deux fichier portant le même nom, il y aurait conflit..
Ceci dit, dans l'absolu, ça ne donne pas de réponse à ma question : est-ce possible de faire ça directement depuis D/Devis?
Du coup, je ne met pas résolu
Bonjour
je propose une autre approche....
puisque qu'il faut ouvrir le fichier du serveur et le fichier local pour vérifié le numéro de version....
pourquoi ne pas récupérer systématiquement le fichier du serveur et copier dans la machine local avant ouverture a partir d'un fichier "oppening" comme tu dis comme cela tu est toujours avec la bonne version
voilà comment je ferrais dans le fichier oppenning :
Private Sub Workbook_Open()
Dim oFSO
Set oFSO = CreateObject("Scripting.FileSystemObject")
'copie du fichier
oFSO.CopyFile ("s:\devis.xls"), ("D:\devis.xls"), True
Workbooks.Open Filename:="d:\devis.xls"
ThisWorkbook.Close False
End Sub fred
Bonjour,
Cette approche est intéressante, sauf que...
La connexion est lente sur certains postes: l'intranet s'étale sur toute la commune et le débit n'y est pas toujours terrible. Il faut en général compter entre 15 et 60 secondes pour télécharger un fichier de 1 à 2 Mo! Donc imaginez, un fichier qu'on peut utiliser plusieurs fois par jour... (c'est d'ailleurs le problème qu'il y avait avec l'ancienne version, qui devait systématiquement télécharger le contenu sur le serveur).
En pratique, j'ai créé un fichier nommé "S:\devis.ini" que je consulte via une macro de requêtes : Lorsque je fais une mise à jour, je modifie le numéro de version sur ce fichier également, ce qui provoque l'exécution de la mise à jour.
Je vais tenter une autre approche : travailler via les feuilles:
- Créer une feuille "mise à jour" qui contient tout ce qu'il faut pour vérifier/effectuer une mise à jour si besoin
- Cette mise à jour supprimerait puis copierait les feuilles présentes sur le serveur.
Reste à savoir si le code VBA suit et si ça marche aussi pour les modules... (je pose subtilement la question, du coup
Merci quand même pour les conseils, je laisse le fil ouvert au cas où quelqu'un apporterait une autre réponse!
bonjour
je ne pensais pas à ce type de réseau....
mais dans ce cas, une autre approche légèrement différente : mettre un fichier TXTou csv avec le num de version comme tu dis
ce fichier txt, beaucoup plus léger qu'un document excel pourra etre ouvert et transferé bcp plus vite.... (1ko) grand max
et donc quand il y a modification d'une version copie du fichier xls et du fichier txt dans la machine cliente.
et dans ce cas le fichier oppenning test le fichier txt et transfert le tout (2 fichiers) dans la machine cliente
sinon oui est possible de copier un module d'un fichier a un autre,.... mais de mémoire faudra passé sur tous les machine cliente pour cliqué sur une option de Excel non faisable par macro (VBA approuvé ..... )
fred
Le week end approche, je vais m'arrêter là...
Oui, le fichier .ini (fichier texte, au fond) que j'ai fait pèse léger et contient le numéro de version ainsi que d'autres infos que j'utiliserai dans mon devis.
Je vais voir pour développer mon truc sans passer par les modules : si je me contente d'exporter des feuilles, le code devrait suivre (en tout cas ça marche lorsqu'on duplique une feuille dans un même fichier). Je verrai selon mes besoins.
Si toutefois il faut déplacer un module, j'ai survolé un peu les forums et ai déjà aperçu des éléments de réponses.
Merci pour les conseils!
et bon week end!