enregistrement spécifique en VBA

p@cm@n

XLDnaute Junior

j'ai créer un fichier (genre formulaire) que d'autre personne devront remplir.
pour rester assez bref, j'ai inclu une barre d'outils spécifique (enregistrer,imprimer,transmettre,?) le ? c'est pour l'acces administrateur (en l'occurence moi), la version du fichier actuel, et l'aide utilisateur (en cours de réalisation).
j'ai protégé le fichier et vérrouillé l'acces de certaine cellule. ainsi que l'acces au code VBA. ca c'est pour la sécurité des futurs utilisateurs.
jusque la pas de problème.

mon soucis, est que lorsque l'utilisateur souhaiteras enregistrer son fichier dument rempli (avec remplissage obligatoire de 3 céllule, Date, type de vacation, et nom du rédacteur), je voudrai dans un premier temps que cela indique un chemin spécifique obligatoire, différent de celui par défaut et sans possibilité d'en changé, et dans un second temps je souhaiterai que le nom de ce fichier soit du genre 'nomfichier010105.xls' la valeur numérique représente une date. évidement tous ceci de façon automatique .
mes éssai on tous échoué.
j'ai pris comme référence de céllule, celle ou l'utilisateur doit saisir la date du jour, je les copier dans une céllule masqué en modifiant sont format date (01/01/05 =010105) seulement au moment de l'enregistrement excel reconverti avec les slash, hors je sais qu'il n'est pas possible d'avoir des slashs dans le nom d'un fichier.
donc comment faire?
si j'arrive à passer ce cap (avec votre aide) je pense encore faire évoluer mon fichier de base.
autre problème, je souhaite aussi que le fichier sauvegarder par l'utilsateur puisse être ré-ouvert quand lecture seul.

voila je pense avoir été assez clair, mais je reste à l'écoute pour plus d'info.

slts :huh:
 

2passage

XLDnaute Impliqué
Bonjour,

Je te recommande plutot de construire le nom du fichier comme ça :

nomfichier = 'nomfichier' & year(now()) & month(now()) & day(now()) & '.xls'

ce qui donne un nom du type nomfichier20050816.xls et le classement alphabétique correspond à l'ordre chronologique

A+
 

p@cm@n

XLDnaute Junior
merci d'avance pour cette réponse aussi rapide.

pour répondre à ta question, le fait de convertir la date en format numérique ne m'aide pas pour autant car le fichier aura une valeur numérique incompréhensible.
si je lis 'nomfichier010105.xls' je sais tout de suite que ce fichier est du 1er janvier 2005, par contre avec une date converti en numérique va savoir à quelle date le fichier fait référence.

pour la deuxième option c'est celle dont j'éssayai le plus de me rapprocher, mais je ne sais pas comment créer la procédure en VBA.

je reste persuadé que je suis pret du but à obtenir, mais je reste coincé dans l'écriture du code VBA.

;)
 

Shining Hawk

XLDnaute Junior
S@lut P@cm@n,

Si tu veux etre libre dans ton formattage, utilise la fonction Fomat:


Dim nom_fic as String

nom_fic = 'C:/TEMP/nomfichier' & Format(Day(Now), '00') & Format(Month(Now), '00') & Right(Year(Now), 2) & '.xls'

En remplacant Now par la valeur de ta cellule, je pense que c'est bon.


Tchô
 

p@cm@n

XLDnaute Junior
Hum!
ton idée m'intéresse beaucoup.

il faut que je l'éssais au plus vite, mais pour cela il faut que je l'inclus dans ma procédure d'enregistrement VBA .

à tout hasard aurait tu aussi une soluce pour indiquer un autre répertoire que celui par défaut, et si possible un code pour empécher l'utilisateur de changer ce repertoire.

avec tous ca, ca devrait marcher du tonnerre.


:)
 

Shining Hawk

XLDnaute Junior
Re,

je pense que ces petits bouts de trucs pourraient te servir....

* Changer le répertoire ou le dossier courant:
ChDir 'nom_du_repertoire'

* Mettre un fichier en lecture seule
Sub lecture_seule()

Dim fso As FileSystemObject
Dim fichier As File

Set fso = CreateObject('Scripting.FileSystemObject')
Set fichier = fso.GetFile('c:\\fichier.xls')
fichier.Attributes = ReadOnly

End Sub

(En cochant Windows Script Host Object Model dans les Références)

Je crois qu'il ne te reste plus qu'à t'engager dans les para ... tonneres. :whistle: ;)

Bonne soirée
 

p@cm@n

XLDnaute Junior
alors là j'ai pas tout compris.

lorsque tu précise En remplacant Now par la valeur de ta cellule.

la céllule (B4) de saisie date ce présente comme ceci: format Date jj/mm/aa

donc tu dis que je remplace Now par B4 ?

ne faut il pas que je déclare ma céllule B4 comme une date.
dim cell = Range('B4')
dim cell as Date(jj-mm-aa)

:eek:
 

p@cm@n

XLDnaute Junior
:sick:
j'ai le cerveau qui va fondre

(En cochant Windows Script Host Object Model dans les Références)
ca encore je veux bien, mais ne faut il pas que les futurs utilisateurs est aussi ca d'activé sur leurs PC ou cela se fait il automatiquement lorsqu'il vont lancer le fichier.


d'autre part pourquoi , il ne te reste plus qu'à t'engager dans les para ... tonneres

:S
 

Shining Hawk

XLDnaute Junior
No stress,

je te le l'ai fait coher pour que tu puisses voir apparaitre les propriétés des objets fso et fichier.

Quand tu voudras le mettre en prod chez les utilisateurs, tu peux mettre en commentaire les déclarations (dim fso ..., dim fichier ...) et décocher Windows Script Host Object Model: tout se fait grace à l'instruction Set. De plus, il me semble que les références sont attachées au projet (classeur) et non au poste...


Pour les paras, c'était juste un jeux de mots pas très réussit... :)
 

p@cm@n

XLDnaute Junior
bon je vais éssayer tous ça et je vous tiens au courant si une des soluces fonctionne, et la quelle me convient le mieux concernant le nom du fichier, pour le choix du repertoire je le ferais dans un deuxieme temps.

merci à tous et as bientôt
;)
 

p@cm@n

XLDnaute Junior
bonjours à tous

j'apporte une bonne nouvelle, la soluce de Shinning Hawk concernant le nom du fichier avec la date, fonctionne parfaitement et correspond exactement à ce que je souhaitais obtenir. donc je n'aiqu'une chose à dire merci à tous, car vous êtes plusieurs à m'avoir aidé et orienté sur cette 'histoire' de Format (dans le VBA), petit plus pour shinning Hawk pour m'avoir pratiquement (même complétement) écrit la ligne de code type.

j'ajouterai une petite correction sur les 'petits bouts de trucs qui pourraient me servir) ;)

puisque dans la ligne de code type:
nom_fic = \\'C:/TEMP/nomfichier\\' & Format(Day(Range(\\'B4\\').Value), \\'00\\') &
Format(Month(Range(\\'B4\\').Value), \\'00\\') & Right(Year(Range(\\'B4\\').Value), 2) & \\'.xls\\'
on fait déja référence à un répertoire, la ligne de code
ChDir 'nom du répertoire' devient caduque (est ce que je me trompe) car je l'ai éffectivement inclus dans ma procédure, seulement elle n'est pas pris en compte, le fichier s'enregistre dans le répertoire ou le fichier modéle est installé.
deuxiéme chose, concernant la petite procédure pour mettre le fichier en lecture seule.
je ne l'ai pas utilisé, car elle est indirectement inclus dans ma procédure:


ActiveWorbook.SaveAs Filename:=Nomfichier,FileFormat:=xlNormal,Password:='',WriteResPassword[/u]:='toto',ReadOnlyRecommended:=False,CreateBackup:=False

par contre comment inclure un méssage (MsgBox) d'érreur pour l'utilisateur qui éssaie quand même d'enregistrer lorsque le fichier est en lecture seule, car pour l'instant je n'ai que le son systeme de windows qui me prévient (sauf que au boulot la plus part des PC n'on pas de HP)
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 520
dernier inscrit
Azise