Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1561 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Enregistrer fichier deja ouvert

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Enregistrer fichier deja ouvert

n°1956735
vedammi
Posté le 11-01-2010 à 11:51:32  profilanswer
 

Bonjour
 
Dans mon programme, j'ai un bouton pour sauvegarder des valeurs dans un fichier
le bouton ouvre un nouveau fichier, ecrit les valeurs, puis demande un nom de fichier a l'utilisateur
 
j'ai un autre bouton pour charger les valeurs d'un fichier enregistre precedemment, ou je demande egalement le nom
 
Mon probleme est que si l'utilisateur selectionne comme nom de fichier un fichier deja ouvert, il me sort que le fichier est deja ouvert et qu'il ne peut pas enregistrer.
Si il selectionne le meme fichier alors que celui ci n'est pas ouvert, ca fonctionne
 
la partie enregistrer de mon code
 
If Datei_gespeichert = False And Datei_geladen = False Then je verifie d'abord que c'est la premiere fois lors de cette session que j'enregistre
    filesavename = Application.GetSaveAsFilename()

    lang = Len(filesavename)
    If Not (Mid(filesavename, (lang - 3), 4) = ".xls" ) Then
        filesavename = filesavename + "xls"
    End If
Cette partie me gene aussi, mais c'est tout ce que j'ai trouvé pour qu'il me l'enregistre avec le bon nom et le bon format
    If filesavename <> False Then
        Werte_Speichertabelle.SaveAs Filename:=filesavename, FileFormat:=xlWorkbookNormal
    End If
    Datei_gespeichert = True
Else
    Werte_Speichertabelle.SaveLa c'est pour enregistrer un fichier precedemment charge ou enregistre
End If
 
 

mood
Publicité
Posté le 11-01-2010 à 11:51:32  profilanswer
 

n°1956793
olivthill
Posté le 11-01-2010 à 13:53:41  profilanswer
 

Ce n'est pas n'importe quel fichier, mais un fichier Excel. C'est important de le préciser, car habituellement, les fichiers ouverts ne sont pas bloqués pour la mise à jour. Mais cela arrive avec Excel pour éviter que les mises à jour faites par un utilisateur ne soient perdues à cause d'un autre utilisateur qui enregsitre une feuille en ne prenant pas en compte les modifications de l'autre utilisateur, puisque ces modif étaient en mémoire et pas encore dans le fichier quand le fichier fut ouvert.
 
Bref, il faut demander à l'utilisateur, qui bloque le fichier Excel, de le fermer.
 
Ou bien ... attendre la prochaine version d'Excel, prévue mi 2010, car elle fera du cloud computing, et permettra donc de travailler à plusieurs sans ces problèmes.
 
Ou encore, choisir un autre logiciel, car il existe déjà certains tableurs qui font du "cloud computing", par exemple Google Spreadsheets.


Message édité par olivthill le 11-01-2010 à 13:54:19
n°1956809
rufo
Pas me confondre avec Lycos!
Posté le 11-01-2010 à 14:11:23  profilanswer
 

1) merci d'utiliser les balises code dans ton post
2) pas cool, le code en allemand :( Quand on développe, c'est plutôt l'anglais qu'on utilise...
 
Sinon, pour ton pb, c'est parfaitement que l'OS t'empêche d'écraser un fichier ouvert. A part utiliser un petit exe qui permet de faire sauter le lock posé sur le fichier par l'OS, y'a rien à faire. Ou alors, proposer à l'utilisateur, si la sauvegarde renvoie false, de sauvegarder sous un autre nom de fichier :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1956867
vedammi
Posté le 11-01-2010 à 15:42:15  profilanswer
 

le fichier n'est pas ouvert par un autre utilisateur, même si c'est ouvert  par moi, il me dit quand même qu'il ne peut pas.
 
pour rufo :
- c'est quoi les balises code ?
- je vois pas en quoi que le nom des variables soit choisi en allemand ou en anglais change quoi que ce soit
 
il n'y a pas moyen qu'il me renvoie la boîte de dialogue habituelle "le fichier existe deja, voulez vous ecrire par dessus ?" et qu'il force l'ecriture ?
 
sinon, je contournerais le probleme en lui disant de le fermer d'abord avant d'enregistrer

n°1956880
rufo
Pas me confondre avec Lycos!
Posté le 11-01-2010 à 16:09:33  profilanswer
 

Le pb du code en allemand, c'est que tout le monde parle pas allemand, donc pourra pas t'aider à débugger. Alors qu'en anglais, n'importe qui qui fait un peu d'info comprendra le code...
 
Sinon, non, pas possible d'écraser le fichier ouvert. Par contre, en testant le code de retour de la fonction save, tu pourras afficher un msg dans une boîte de dialogue.
 
ps : balise [code] de ce forum pour mettre en forme ton code. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1957056
Laoo
Posté le 12-01-2010 à 05:41:45  profilanswer
 

Bonjour
Oui, impossible d'appeler un fichier comme un fichier ouvert, puisque le nouveau remplace l'ancien, que serait alors l'ancien?  
 
Il faut soit le fermer, soit le renommer d'abord, c'est logique, et sécurisant.  (par contre, tu peux faire les deux dans la même macro)
 
A part ça, j'ai testé ta macro, et il me semble que si "filesavename = False" tu as un msg d'erreur pour  
 filesavename = filesavename + "xls"
Il vaudrait donc peut-être mieux mettre le
    If filesavename = False Then
avant, par exemple comme ça:
 

Code :
  1. '''''''''''''''''''''''''''---------------
  2. 1    filesavename = Application.GetSaveAsFilename()
  3.     If filesavename = False Then
  4.     GoTo 1         'remonte à 1 pour avoir un nom
  5.     Else
  6.      If Not (Right(filesavename, 4) = ".xls" ) Then
  7.        filesavename = filesavename + "xls"
  8.     End If


 
le Right(---)  te donne directement la fin du nom
 
D'autre part, chez moi, le "Werte_Speichertabelle" ne fonctionne pas, il vaut mieux mettre "ActiveWorkbook", comme dit Monsieur Rufo, tt le monde comprend....  même Excel!    ;)  
 
A+


Message édité par Laoo le 12-01-2010 à 06:00:27

---------------
Olympus OM-D  EM-5 + 14-42
n°1957114
vedammi
Posté le 12-01-2010 à 10:36:40  profilanswer
 

j'avais pas fait gaffe à ce bug possible, merci
 
et sinon, Excel comprend Werte_Speichertabelle, qui n'est pas toujours le même que Activeworkbook


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Enregistrer fichier deja ouvert

 

Sujets relatifs
Editer un fichier XML sous windowsConstruction d'un fichier
Substitution de texte dans un fichier docx en utilisant Apache POI[SHELL] Ajouter une chaine de caractère particulière dans un fichier
Recharger un fichier javascript à la voléeCréation d'un fichier config a l'aide de tableaux
Template de fichier de confInsertion/Extraction de données formatées d'un fichier texte
Probleme de recuperation dans un fichier textefichier .BAT
Plus de sujets relatifs à : Enregistrer fichier deja ouvert


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR