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 :

Copier/coller avec barre de progression


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 32
    Points
    32
    Par défaut Copier/coller avec barre de progression
    Bonjour à tous,

    - Je cherche à effectuer via une sub un copier/coller me permettant de suivre uniquement la progression

    - J'ai trouvé ceci sur le forum qui me convient parfaitement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    'Déclaration de l'API
    Private Declare Function DoFileDownload Lib "shdocvw.dll" _
    (ByVal lpszFile As String) As Long
     
    Public Sub TelechargerFichier(Fichier as string)
       DoFileDownload StrConv(Fichier, vbUnicode)
    End Sub
     
    Utilisation : 
    TelechargerFichier("d:\test.mdb")
    Mais je veux definir le répertoire de destination comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileCopy source, destination
    Mais je n'ai pas d'aide sur l'utilisation de "DoFileDownload" (problème de références ? autres ?)

    -> Quelqu'un peut m'aider ?


    Cdlt.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    il s'agit d'une API, ce sont des fonctions internes au système que l'on peut utiliser.

    La documentation sur celle-ci n'est pas évidente à trouver.

    Pour ta fonction, la définition (Anglaise) :
    The DoFileDownload function opens a download dialog.
    En gros, cette fonction ouvre une boite de dialogue pour le téléchargement ou de copier coller.

    Désolé, de ne pouvoir t'en dire plus, mais mes connaissances en API sont limités. Voici cependant un lien : http://www.allapi.net/ en Anglais

    Starec

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 32
    Points
    32
    Par défaut
    Helloo tous le monde,

    Bon ben je n'ai pas réussi à trouver mon bonheur aux travers des API

    L'idée de départétait d'afficher la petite fenetre de copie window avec la barre de progression lorsque je copie un fichier avec du code vba

    -> Si quelqu'un sait comment faire, je suis preneur


    Cdlt.

  4. #4
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Bjr,

    Pour tout traitement de fichier, l'API SHFileOperation rend bien des services.
    Le code en bas de message est à mettre dans un module.

    Il contient la fonction FileCopyProgress :
    - source : répertoire ou fichier source
    - destination : répertoire ou fichier destination
    - hwnd : Optionnel = handle d'un formulaire (=Me.Hwnd) qui sera le parent de la fenêtre de dialogue
    - NoConfirmation : Optionel = mettre à vrai si on ne veut pas de demande de confirmation
    ==> la fonction renvoit Vrai si la copie s'est bien déroulée.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim lRetourCopie as boolean
    lRetourCopie  = FileCopyProgress("C:\MonFichier1","C:\MonFichier2",Me.Hwnd,True)
    If lRetourCopie then
       MsgBox "Copie OK"
    Else
       MsgBox "Copie KO", vbCritical
    End If
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    Option Explicit
     
    Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
    Const FO_DELETE = &H3
    Const FO_COPY = &H2
    Const FO_MOVE = &H1
    Const FO_RENAME = &H4
    Const FOF_CONFIRMMOUSE = &H2
    Const FOF_FILESONLY = &H80
    Const FOF_MULTIDESTFILES = &H1
    Const FOF_NOCONFIRMATION = &H10
    Const FOF_NOCONFIRMMKDIR = &H200
    Const FOF_RENAMEONCOLLISION = &H8
    Const FOF_CREATEPROGRESSDLG = &H0
    Const FOF_SILENT = &H4
    Const FOF_SIMPLEPROGRESS = &H100
    Const FOF_WANTMAPPINGHANDLE = &H20
    Const FOF_ALLOWUNDO = &H40
    Const FOF_NOERRORUI = &H400
    Private Type SHFILEOPSTRUCT
        hwnd As Long
        wFunc As Long
        pFrom As String
        pTo As String
        fFlags As Long
        fAnyOperationsAborted As Boolean
        hNameMappings As Long
        lpszProgressTitle As String
    End Type
     
     
    Public Function FileCopyProgress(source As String, destination As String, Optional hwnd As Long, Optional NoConfirmation As Boolean) As Boolean
    Dim lShFile As SHFILEOPSTRUCT
        lShFile.hwnd = IIf(hwnd = 0, Application.HwndAccessApp, hwnd)
        lShFile.wFunc = FO_COPY
        lShFile.pFrom = source & vbNullChar
        lShFile.pTo = destination & vbNullChar
        lShFile.fFlags = FOF_CREATEPROGRESSDLG Or (FOF_NOCONFIRMATION * -NoConfirmation) _
                                            Or (FOF_NOCONFIRMMKDIR * -NoConfirmation)
        FileCopyProgress = (SHFileOperation(lShFile) = 0)
    End Function

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 32
    Points
    32
    Par défaut
    Hello Arkham46,

    Tout simplement royale !!

    Merci encore

    @ bientôt

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Hello à tous ,

    J'ai tenté d'utiliser les 2 derniers codes, mais ça ne marche pas,
    Je récupère bien le handle de mon userform progress bar avec FindWindow que j'appelle MeHwnd et je transmet à Filecopyprogress.

    Seulement des que la ligne lShFile.hwnd = IIf(hwnd = 0, Application.HwndAccessApp, hwnd) est évaluée, je sors tout se suite apres de la function FileCopyProgress du module...
    Je ne comprend pas trop le fonctionnement de de cette ligne en faite....
    Comment je fais pour utiliser le handle de mon propre userform barre de progression au lieu de celle intégré à windows ?
    Toute aide serait la bienvenu ^^

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

Discussions similaires

  1. Problemes avec copier/coller avec VI
    Par fgalves dans le forum Linux
    Réponses: 7
    Dernier message: 06/01/2009, 15h43
  2. copier-coller avec listbox
    Par LeNeutrino dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/01/2007, 13h06
  3. Copier-coller une barre de menus entre 2 feuilles
    Par mbzhackers dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 27/05/2006, 11h34
  4. Fonction copier/coller avec un menu
    Par avogadro dans le forum Langage
    Réponses: 3
    Dernier message: 16/03/2006, 22h44
  5. copier coller avec Pastespecial en VBA
    Par stormless dans le forum Général VBA
    Réponses: 1
    Dernier message: 06/11/2005, 11h59

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