IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

[VBA] renommer fichier avec delai avant apparition du fichier


Sujet :

VBA Access

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 52
    Points
    52
    Par défaut [VBA] renommer fichier avec delai avant apparition du fichier
    Bonsoir
    jai une boucle qui me permet de generer des pdf avec pdfcreator.
    Ce que je souhaite faire c'est de renommer a chaque iteration, le
    fichier pdf genere.
    PdfCreator me genere automatiquement un fichier test.pdf et jessaie de le renommer.
    Voici ma boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    While Not rst.EOF
               ' ouverture de l'état par invoice
               Condition = "Invoice.[Invoice Number] = '" & rst![Invoice Number] & "'"
     
               DoCmd.OpenReport strReport, aMode, stFilterName, Condition
               ' impression des pages
               DoCmd.PrintOut aPage, iStart, iEnd, acHigh
               ' fermeture de l'état sans sauvegarde
               DoCmd.Close acReport, strReport, acSaveNo
               ' renommer le fichier
               Name "C:\Temp\test.pdf" As "C:\Temp\" & rst![First Name] & rst![Last Name] & ".pdf"
               rst.MoveNext
    Wend
    Le probleme c'est que au moment de renommer le fichier , il ne trouve pas le fichier qui prend un certain temps pour se creer.
    Jai essaye de creer une fonction pause (avec GetTickCount et une boucle While) mais cette fonction "met aussi en pause" la generation du pdf donc ne resoud pas mon probleme.
    Merci davance

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    et ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Do Until Dir("C:\Temp\test.pdf")<>""
     DoEvents
    Loop
    Name "C:\Temp\test.pdf" As "C:\Temp\" & rst![First Name] & rst![Last Name

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 52
    Points
    52
    Par défaut Salut Helas
    Ben ca ne marche pas il me retourne une erreur:
    erreur 75 Path/File Access Error
    ???

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 064
    Points : 24 673
    Points
    24 673
    Par défaut
    Bonjour,

    As-tu essayé un Doevents après la ligne de commande de génération ?

    Cordialement,

    Hélas j'ai été grillé par Hélas...

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 52
    Points
    52
    Par défaut Pas compris
    Vous suggerez de faire une boucle sur Doevents?
    si oui avec quel condition darret?
    cel aressemble a la solutionde helas mais ne marche pas erreur 75

  6. #6
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    en fait il fait une boucle jusqu'à qd le nom du fichier apparait,
    hors PDFCreator n'a pas forcemment fini de le crée donc le fichier doit être encore verrouillé d'ou l'erreur.

    je lui propose donc de boucler sur jusqu'a qd l'erreur n'est plus mais pas possible l'erreur apparait.

    on cherche à boucler sur l'ouverture du fichier en mode Write mais on n'a encore la synthaxe et obtenir les résultats de l'opération.

  7. #7
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Bonsoir,
    Et pourquoi pas dans ce cas de faire le changement de nom tant que le fichier désigné par le nouveau nom n'existe pas?!
    C'est à dire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    On Error Resume Next
    Do While Dir("C:\Temp\" & rst![First Name] & rst![Last Name] & ".pdf")<>""
       Name "C:\Temp\test.pdf" As "C:\Temp\" & rst![First Name] & rst![Last Name] & ".pdf"
       DoEvents
    Loop
    Dès que test.pdf existe et est disponible, le changement de nom se fait et la boucle se termine. C'est juste un idée ...

    Bon courage et @+

  8. #8
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    parce que Name renvoi une erreur:
    je lui avait suggerer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    On Error Goto suite
    suite:
    Name "AncienNom" As "NouveauNom"
    mais il dit qu'il a un message d'erreur: que le fichier n'existe pas

    On a trouvé une solus d'après le Code de PDFCreator:
    mettre un delai
    c'est un peu mieux que la solus de cafeine d'après le tuto qui se base sur la date de creation du pdf...et ne gère pas le prb de l'envoi succéssif.

    mais je pense que l'idéal c'est l'échec sur l'ouverture en écriture, qu'on a abandonner mais je suis prenant pour ceux qui savent.

    peut être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    On Error Goto suite
    suite:
    Resume Next
    Name "AncienNom" As "NouveauNom"
    Aurait été mieux?

  9. #9
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 52
    Points
    52
    Par défaut Resolution par pdfCreator
    L'ideee etait d'obtenir des fichiers pdf nominatif. En effet il sagit de l'impression de factures client et donc l'on souhaitait nommer chaque fichier par le nom du client: Michel.pdf ...etc
    Au lieu d'essayer de renommer le fichier une fois creer, nous avons utilise les options d'enregistrement automatique de pdfCreator. Avant chaque impression, on dis a pdfCreator d'enregistrer automatiquement le fichier sous le nom de : nomclient.pdf et on change cette propriete avant chaque impression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    While Not rst.EOF
                                pdfFileName = rst![First Name] & rst![Last Name] '& ".pdf"
                                With pdfjob
     
                                .cStart "/NoProcessingAtStartup"
                                .cOption("UseAutosave") = 1
                                .cOption("UseAutosaveDirectory") = 1
                                .cOption("AutosaveDirectory") = "C:\temp\"
                                .cOption("AutosaveFilename") = pdfFileName
                                .cOption("AutosaveFormat") = 0
                                .cClearCache
     
                                End With
    .... 'IMPRESSION
    Ceci ne resolvait pas notre probleme de temp de creation du fichier pdf.Nous avons utilise pour cela la propriete pdfjob.cOutputFilename de pdfCreator, avec une boucle While:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                   C = 0
                    Do While (pdfjob.cOutputFilename = "") And (C < (maxTime * 1000 / sleepTime))
                    C = C + 1
                    Sleep 200
                    Loop
    En plus de cela il faut ensuite attemdre environ 2s pour que pdfCreator ne soit plus en memoire et donc "libere" le fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    ....
     
    Sleep 2000 ' Wait until PDFCreator is removed from memory
    Remarque: declaration de la variable pdfjob
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Dim pdfjob As PDFCreator.clsPDFCreator
        Set pdfjob = New PDFCreator.clsPDFCreator
    MERCI A TOUS ET BONNE SEMAINE

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/03/2011, 13h38
  2. Réponses: 5
    Dernier message: 02/05/2009, 19h10
  3. probleme avec l'envoi d'un fichier avec les socket
    Par yous18 dans le forum Réseau
    Réponses: 8
    Dernier message: 05/02/2009, 10h07
  4. Ouvrier un fichier avec macro depuis un autre fichier avec macro
    Par Jeanvaljean44 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/11/2008, 11h23
  5. [VBA-E] Probleme avec l'ouverture d'un fichier Excel
    Par mennix dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/12/2006, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo