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 un fichier et le renomer


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Par défaut Copier un fichier et le renomer
    Bonjour,

    Je souhaite en fait réaliser un bouton qui une fois que l'on clique dessus, permette de sélectionner un fichier, puis en faisant OK, de le copier dans un répertoire annexe en le renommant, et récupérer le chemin dans la base.

    J'utilise le code suivant, mais que je n'arrive pas a faire marcher (il est incomplet a la fin, c normal, j'y arrive pas ^^)

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    Option Compare Database
    
     'Déclaration de l'API
    Private Declare Sub PathStripPath Lib "shlwapi.dll" Alias "PathStripPathA" (ByVal pszPath As String)
    Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
                       "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
    
     'Structure du fichier
    Private Type OPENFILENAME
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
    End Type
    
     'Constantes
    Private Const OFN_READONLY = &H1
    Private Const OFN_OVERWRITEPROMPT = &H2
    Private Const OFN_HIDEREADONLY = &H4
    Private Const OFN_NOCHANGEDIR = &H8
    Private Const OFN_SHOWHELP = &H10
    Private Const OFN_ENABLEHOOK = &H20
    Private Const OFN_ENABLETEMPLATE = &H40
    Private Const OFN_ENABLETEMPLATEHANDLE = &H80
    Private Const OFN_NOVALIDATE = &H100
    Private Const OFN_ALLOWMULTISELECT = &H200
    Private Const OFN_EXTENSIONDIFFERENT = &H400
    Private Const OFN_PATHMUSTEXIST = &H800
    Private Const OFN_FILEMUSTEXIST = &H1000
    Private Const OFN_CREATEPROMPT = &H2000
    Private Const OFN_SHAREAWARE = &H4000
    Private Const OFN_NOREADONLYRETURN = &H8000
    Private Const OFN_NOTESTFILECREATE = &H10000
    
    Private Const OFN_SHAREFALLTHROUGH = 2
    Private Const OFN_SHARENOWARN = 1
    Private Const OFN_SHAREWARN = 0
    
    
    Public Function OuvrirUnFichier(Handle As Long, _
                                    Titre As String, _
                                    TypeRetour As Byte, _
                                    Optional TitreFiltre As String, _
                                    Optional TypeFichier As String, _
                                    Optional RepParDefaut As String) As String
     'OuvrirUnFichier est la fonction a utiliser dans votre formulaire pour ouvrir _
     'la boîte de dialogue de sélection d'un fichier.
     'Explication des paramètres
        'Handle = le handle de la fenêtre (Me.Hwnd)
        'Titre = Titre de la boîte de dialogue
        'TypeRetour (Définit la valeur, de type String, renvoyée par la fonction)
            '1 = Chemin complet + Nom du fichier
            '2 = Nom fichier seulement
        'TitreFiltre = Titre du filtre
            'Exemple: Fichier Access
            'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
        'TypeFichier = Extention du fichier (Sans le .)
            'Exemple: MDB
            'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
        'RepParDefaut = Répertoire d'ouverture par defaut
            'Exemple: C:\windows\system32
            'Si vous laissé l'argument vide, par defaut il se place dans le répertoire de votre application
    
    Dim StructFile As OPENFILENAME
    Dim sFiltre As String
    
     'Construction du filtre en fonction des arguments spécifiés
    If Len(TitreFiltre) > 0 And Len(TypeFichier) > 0 Then
      sFiltre = TitreFiltre & " (" & TypeFichier & ")" & Chr$(0) & "*." & TypeFichier & Chr$(0)
    End If
    sFiltre = sFiltre & "Tous (*.*)" & Chr$(0) & "*.*" & Chr$(0)
    
    
     'Configuration de la boîte de dialogue
      With StructFile
        .lStructSize = Len(StructFile) 'Initialisation de la grosseur de la structure
        .hwndOwner = Handle 'Identification du handle de la fenêtre
        .lpstrFilter = sFiltre 'Application du filtre
        .lpstrFile = String$(254, vbNullChar) 'Initialisation du fichier '0' x 254
        .nMaxFile = 254 'Taille maximale du fichier
        .lpstrFileTitle = String$(254, vbNullChar) 'Initialisation du nom du fichier '0' x 254
        .nMaxFileTitle = 254  'Taille maximale du nom du fichier
        .lpstrTitle = Titre 'Titre de la boîte de dialogue
        .flags = OFN_HIDEREADONLY  'Option de la boite de dialogue
        If ((IsNull(RepParDefaut)) Or (RepParDefaut = "")) Then
            RepParDefaut = CurrentDb.Name
            PathStripPath (RepParDefaut)
            .lpstrInitialDir = Left(CurrentDb.Name, Len(CurrentDb.Name) - Len(Mid$(RepParDefaut, 1, _
    InStr(1, RepParDefaut, vbNullChar) - 1)))
            Else: .lpstrInitialDir = RepParDefaut
        End If
      End With
       
    If (GetOpenFileName(StructFile)) Then 'Si un fichier est sélectionné
        Select Case TypeRetour
          Case 1: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFile, InStr(1, StructFile.lpstrFile, vbNullChar) - 1))
          Case 2: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFileTitle, InStr(1, StructFile.lpstrFileTitle, vbNullChar) - 1))
        End Select
      End If
    
     
    Dim SourceFile, DestinationFile, chemin
     
    chemin = CurrentProject.Path
     
    SourceFile = " & Trim$(Left(StructFile.lpstrFile, InStr(1, StructFile.lpstrFile, vbNullChar) - 1)) & " 'fichier source.
     
    DestinationFile = "" & chemin & "\Drawings_Archive\?????"  ' Définit le nom du fichier cible.
     
    ' Copie le fichier source dans le fichier cible.
    FileCopy SourceFile, DestinationFile
     
    MsgBox ("La base " & DestinationFile & " a bien été ajoutée")
     
    End Function

    Il faudrait que le chemin de destination soit relatif pour que la base soit déplacable.
    Par ailleurs il faut noter que le code doit être valable pour n'importe quel type de fichier.
    Il faudrait que le fichier soit renommer en fonction d'une entrée du formulaire et de la date du jour.


    Ça fait beaucoup d'un coup, donc merci d'avance

  2. #2
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Par défaut
    Alors j'ai réussi a trouver la réponse a certaine de mes question mais il me reste encore un dernier problème:

    Comment importer le une variable du code VBA dans une table ?

    Une fois que j'ai copié mon fichier, j'aimerai enregistrer le chemin de destination dans une table via mon formulaire mais j'y arrive pas.

    Vous auriez une idée ??

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Par défaut
    bonjour,

    Personnelement j'utilise une Table Parametre avec 4 champs
    Clé
    Annee
    Prochain
    Commentaires

    et 2 functions
    pour stocker le paramètre (EcrParam)
    pour relire le paramètre (LecParam)

    à toi de l'adapter (notamment (Forms!passage!String) où tu dois mentionner le nom de ta base de données

    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
     
    Public Function LecParam(Cle, Annee, prochain, Commentaire)
    On Error Resume Next
             Dim madb As Database, TableParam As Recordset
             Set madb = DBEngine.Workspaces(0).OpenDatabase(Forms!passage!String)
             Set TableParam = madb.OpenRecordset("Parametres", DB_OPEN_TABLE)
             TableParam.Index = "PrimaryKey"
             TableParam.Seek "=", Cle
             If TableParam.NoMatch Then
               Else
                Annee = TableParam!Annee
                prochain = TableParam!prochain
                Commentaire = TableParam!Commentaire
             End If
             TableParam.Close
             madb.Close
             Set madb = Nothing  '  27/04/07
    End Function
    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
     
    Public Function EcrParam(Cle, Annee, prochain, Commentaire)
    ' 16/08/2007 :  création du paramètre manquant
             Dim madb As Database, TableParam As Recordset
             Set madb = DBEngine.Workspaces(0).OpenDatabase(Forms!passage!String)
             Set TableParam = madb.OpenRecordset("Parametres", DB_OPEN_TABLE)
             TableParam.Index = "PrimaryKey"
             TableParam.Seek "=", Cle
             If TableParam.NoMatch Then
                MsgBox "Table: PARAMETRES" & Chr$(13) & "Il Manque le paramêtre : " & Cle
                ' si le paramètre n'existe pas = il est crée  16/08/2007
                TableParam.AddNew
                TableParam!Cle = Cle
                TableParam!Annee = Annee
                TableParam!prochain = prochain
                TableParam!Commentaire = Commentaire
                TableParam.Update
               ' fin 16/08/2007
               Else
                TableParam.Edit
                If Annee = "*" Then
                   TableParam!Commentaire = Commentaire
                End If
                If IsNull(Annee) Then
                   Else
                   TableParam!Annee = Annee
                End If
                TableParam!prochain = prochain
                TableParam.Update
             End If
             TableParam.Close
    End Function
    utilisation pour enregistrer le nom du fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim Annee as variant, prochain as single, Commentaire as String 
     
    Call EcrParam("NomFichier", "*", prochain, "lenomdetonfichier")

    voilà si cela peut t'aider.

    Cordialement,

    fevec

  4. #4
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Par défaut
    Merci, je vais essayer ca

  5. #5
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Par défaut
    Je dois malheureusement avouer que je n'y arrive pas. Étant donné que je ne connais quasiment pas le code VBA, je n'arrive pas a l'adapter

    Je ne comprend pas ce que tu prend comme variable dans ce code pour la rentrer dans une table.

    Il n'existerai pas un moyen simple du genre:

    Table.Champs = variable

    sachant que variable contiendrai une chaine de caractères ?

    Merci

Discussions similaires

  1. copier des fichiers
    Par Daeron dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/11/2004, 14h45
  2. Copier certains fichiers d'une arborescence ?
    Par narmataru dans le forum Linux
    Réponses: 4
    Dernier message: 27/04/2004, 12h15
  3. Copier coller Fichier windows
    Par KPitN dans le forum Windows
    Réponses: 8
    Dernier message: 20/04/2004, 17h32
  4. Batch pour copier des fichier
    Par borgfabr dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 09/03/2004, 07h55
  5. Détourner une fonction pour copier un fichier en mémoire
    Par Rodrigue dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/11/2003, 08h29

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