VB sauvergarde si fichier inexistant - VB/VBA/VBS - Programmation
Marsh Posté le 04-12-2008 à 16:08:09
bonjour,
voir le sujet http://forum.hardware.fr/hfr/Progr [...] 7062_1.htm
et plus particulierement
Code :
|
Marsh Posté le 05-12-2008 à 09:56:29
Je reconnais ma fonction
Contrairement à ce que j'avais dit, c'est 100% fiable sur un fichier mais pas sur un répertoire.
diidy: la fonction FileExists n'est pas un membre de l'objet Excel.Application, mais ton On Error Resume Next t'empêche de t'en rendre compte.
Marsh Posté le 05-12-2008 à 10:14:56
bonjour à vous 2!
merci de bien vouloir m'aider
je suis dsl mais j'arrive pas à intégrer votre fonction à mon code !
j'ai tout d'abord essayer de l'intégrer dans mon code directement sans la mettre en fonction
Dim dtm As Date
' FileDateTime seems to be more accurate than GetAttr
dtm = FileSystem.FileDateTime(NomDoc) <- je met mon nom de doc
if FileExists = True then
'rien
Else ' donc FileExists = False
' un peus de code puis
xlBook.SaveAs NomDossier & NomDoc & ".xls"
end if
Marsh Posté le 05-12-2008 à 10:22:32
Essaie de l'intégrer comme fonction et appelle ensuite la fonction, tu te simplifieras grandement la tâche (même que les fonctions sont faites pour ça).
Marsh Posté le 05-12-2008 à 10:38:13
enfaite le probleme c'est que je voudrais faire un traitement si le fichier n'éxister pas et si il existe passer au suivant!
donc si j'ai bien compris mon traitment à faire si le fichier éxiste je dois l'ajouter dans la fonction ?
désoler je débute dans le vb/ vba !
Marsh Posté le 05-12-2008 à 10:47:32
Je crois que tu devrais lire un tutoriel sur la programmation au minimum...
La fonction, tu l'insères telle quelle, tu n'y touches pas, elle fonctionne très bien. Et tu l'appelles comme ceci:
Code :
|
Mais ça ne fonctionnera pas si tu ne spécifies pas le répertoire complet où se trouve ton fichier.
Marsh Posté le 05-12-2008 à 11:05:33
comme ce ci ?
If FileExists(NomDossier & NomDoc & ".xls" ) then
sachant que mon NomDossier= "D:\*****\*****
Marsh Posté le 05-12-2008 à 11:14:43
ok jte remercie je ne vois plus clairement comment ta fonction doit étre utiliser ! sa marche tout nickel!
j'ais une autre petit question drasche:
à un certain moment j'utilise
Workbooks.Open Filename:= _
NomDossier & NomDoc & ".xls"
et Workbooks(NomDoc & ".xls" ).Activate
ActiveWorkbook.SaveAs Filename:=NomDoc
Workbooks(NomDoc & ".xls" ).Close (False)
à certains moment j'ai une erreur ou ma macros se stop car il dit que mon fichier est ouvert en lecture seul
y'a t'il un moyen de faire un open file avec écriture lecture true ?
je te remercie s'incerement
Marsh Posté le 05-12-2008 à 11:14:45
Oui, comme ça. N'oublie pas un \ entre le chemin et le fichier.
Marsh Posté le 05-12-2008 à 11:17:56
tkt pas il y est à tu une idée pour ma question précedente ?
Marsh Posté le 05-12-2008 à 11:28:47
Si Excel l'a ouvert en lecture seule sans que tu le demandes explicitement, c'est que le fichier est en lecture seule au départ. Je ne sais pas s'il y a moyen de forcer Excel à ouvrir en modification dans ce cas là. Une fois ouvert en lecture seule, c'est certain, tu dois sauvegarder sous un autre nom.
Marsh Posté le 05-12-2008 à 11:40:13
bah c'est le fichier que je créer moi mm ( voir mon premier poste )
et ma macro créer plusieur fichier ! d'autre s'ouvre et et se sauvergarde sans probleme!
quelque un stop la macro! je fais débogage! j'attend quelque seconde!
et j'ai un message d'excel me disant que mon fichier est accessible en lecture écriture! et je fais continuer et c'est partis...
je voudrais juste éviter d'avor ce genre de message qui stop ma macro
Marsh Posté le 05-12-2008 à 11:52:26
Ca c'est le niveau d'interruption interne à Excel qui fait ça, il est probablement réglé pour s'arrêter sur la moindre erreur, par défaut.
Dans la fenêtre VBA, tu vas dans le menu Outils/Options, puis onglet général, puis tu as un cadre avec le niveau d'interception d'erreur (Error trapping, je ne connais pas le terme français exact). Tu choisis la 3è option qui est le niveau le plus bas.
Mais cela ne te dispensera pas de gérer l'erreur elle-même. Une autre raison pour laquelle Excel ouvre le fichier en lecture seule est qu'il est déjà ouvert par une autre application.
Tu codes dans quoi? Excel? Tu peux alors remplacer xlApp par Application et ne pas faire de CreateObject. Si tu es dans Excel, il est bien possible que tu ais créé une seconde instance d'Excel et qu'elle soit responsable de ce problème de lecture seule.
Marsh Posté le 05-12-2008 à 13:46:26
outils >option général> récupération d'erreur > 3eme option Arrêt sur les erreurs non gérées ! c'est déjà cochée! bah oui je pense que c'est ma création de lapplication excel qui m'embete!
je voulais créer un nouveaux fichie excel et lui données le nombres de feuille et l'enregistré un à noms bien précis! j'avais trouvé ce pti bout de code qui suivis plutot bien mon besoin...
Marsh Posté le 05-12-2008 à 13:57:35
Est-ce que tu es dans Excel? (pour coder ton truc)
Marsh Posté le 05-12-2008 à 14:05:11
j'ai un petit probleme que je n'avais pas avant d'aller manger avec
FileExists ! quand je lance ma macro il est dit: argument non facultatif !
donc je créer un dim FileExists as boolean! et une fois fait il me fait erreur de compilation tableau attendus
Marsh Posté le 05-12-2008 à 14:10:33
Bon... commence par virer cette ligne:
Code :
|
car Excel fournit l'objet Application, qui est exactement la même chose que ton xlApp. Donc après tu remplaces tous tes xlApp par Application.
Profites-en aussi pour virer le xlApp.Quit à la fin sinon tu auras des surprises.
Je ne comprends pas ton problème avec FileExists. Tu dois toujours lui passer un argument. Pas besoin de créer une variable du même nom, tu vas te mélanger les pinceaux.
Marsh Posté le 05-12-2008 à 14:43:09
bon bah j'ais tout suivis à la lettre j'ai modifier mon code ! pour ne pas avoir en sorte à ne pas quitté l'appliquation ( xlApp.Quit ) ! je fais mon controle avant! sinon j'ai remplacer
Set xlApp = CreateObject("Excel.Application" )
par
Set xlApp = Excel.Application
ca à l'aire de fonctionner!
je fais 2-3 test et je redonne des nouvelles pour voir si j'ai d'autre probleme
merci encore à toi
Marsh Posté le 05-12-2008 à 15:02:15
bah écoute le fait d'avoir mit Set xlApp = Excel.Application
sa ma régler pas mal de truc! j'ai pus enlever quelque bidouille qui me permetter de contourné les problemes que le creatobjet engendrait!
j'ai juste une derniere petite question un peut plus au dans ma macro je fai un openfile! et il me demande si je veus mettre à jours les liaisons! sa m'ennnuis un peu mm si c'est un message qui saffiche tout au début!
as tu un moyens pour ne plus afficher ce message ?
Marsh Posté le 05-12-2008 à 15:07:32
Je ne sais pas si ça t'aidera dans ton cas précis mais l'objet Application a une propriété DisplayAlerts, qui permet de désactiver certaines alertes tant que sa valeur est à False.
Marsh Posté le 05-12-2008 à 15:20:57
déjà essayer
Application.DisplayAlerts = False
Application.EnableEvents = False
Workbooks.Open Filename:= _
"D:\*****\*****.xls"
Application.DisplayAlerts = True
Application.EnableEvents = True
je m'en servais aussi ! et jusq'à present il focntionnait bien ! m^me pour le mem cas sur une autre macro
Marsh Posté le 05-12-2008 à 15:24:46
Dans ce cas, tu dois regarder l'aide sur Workbooks.Open, il y a sûrement un paramètre pour préciser d'avance une réponse.
Marsh Posté le 04-12-2008 à 13:57:19
Bonjour,
voila comme dit dans e titre je voudrais sauvergarder si le fichier inexistant!
'On créer l'objet Excel
Set xlApp = CreateObject("Excel.Application" )
'On défini le nombre d'onglets
xlApp.SheetsInNewWorkbook = 1
'On ajoute un classeur
Set xlBook = xlApp.Workbooks.Add
'On rend le classeur visible
xlApp.Visible = True
'On créer l'objet onglet dans le nouveau classeur créé
Index = 1
Set xlsheets = xlBook.Worksheets(1)
'On affecte un nom aux l'onglets
xlsheets.Name = NumArticle
'on libère l'objet onglet pour pouvoir en créer un nouveau ... etc
On Error Resume Next ' Permet de ne pas planter si le dossier existe deja
Lecteur = Mid(NomDossier, 1, 2)
ChDrive Lecteur
'On donne un nom au classeur
MkDir NomDossier
If xlApp.fileexists(NomDoc & ".xls" ) Then
'rien
Else
xlBook.SaveAs NomDossier & NomDoc & ".xls"
On Error GoTo 0 ' On rend le control d'erreur à VBA
xlApp.Quit
j'ai donc tester le filexiste
je l'ai essayer une première fois cela fonctionner
puis j'ais effacer mon répertoire! et lorque je relance ma macro il trouve tjr le fichier existant!
si quelqu'un pouvais m'aider merci