VB sauvergarde si fichier inexistant

VB sauvergarde si fichier inexistant - VB/VBA/VBS - Programmation

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

Reply

Marsh Posté le 04-12-2008 à 13:57:19   

Reply

Marsh Posté le 04-12-2008 à 16:00:58    

help me plz xD

Reply

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 :
  1. Public Function FileExists(ByVal strFileName As String) As Boolean
  2.     Dim dtm As Date
  3. On Error GoTo ErrHandler
  4.     ' FileDateTime seems to be more accurate than GetAttr
  5.     dtm = FileSystem.FileDateTime(strFileName)
  6.     FileExists = True
  7.     Exit Function
  8. ErrHandler:
  9.     FileExists = False
  10. End Function


Message édité par 86vomito33 le 04-12-2008 à 16:08:49
Reply

Marsh Posté le 05-12-2008 à 09:56:29    

Je reconnais ma fonction :D
 
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.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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
 

Reply

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).


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 05-12-2008 à 10:27:58    

je lappel par "FileExists= NomDoc" ?

Reply

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 ! :(

Reply

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 :
  1. If FileExists(NomDoc & ".xls" ) Then


 
Mais ça ne fonctionnera pas si tu ne spécifies pas le répertoire complet où se trouve ton fichier.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 05-12-2008 à 11:05:33    

comme ce ci ?
 
If FileExists(NomDossier & NomDoc & ".xls" ) then
sachant que mon NomDossier= "D:\*****\*****

Reply

Marsh Posté le 05-12-2008 à 11:05:33   

Reply

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
 

Reply

Marsh Posté le 05-12-2008 à 11:14:45    

Oui, comme ça. N'oublie pas un \ entre le chemin et le fichier.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 05-12-2008 à 11:17:56    

tkt pas il y est à tu une idée pour ma question précedente ?

Reply

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.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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

Reply

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.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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...

Reply

Marsh Posté le 05-12-2008 à 13:57:35    

Est-ce que tu es dans Excel? (pour coder ton truc)


Message édité par drasche le 05-12-2008 à 13:58:57

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 05-12-2008 à 14:01:50    

oui ! je code dans le vba d'excel

Reply

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 :o

Reply

Marsh Posté le 05-12-2008 à 14:10:33    

Bon... commence par virer cette ligne:
 

Code :
  1. Set xlApp = CreateObject("Excel.Application" )


 
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.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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

Reply

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 ?

Reply

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.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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

Reply

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.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed