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

Access Discussion :

Importation de pièces jointes [AC-2007]


Sujet :

Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Importation de pièces jointes
    Bonjour à toutes et à tous.

    Merci d'avance pour votre aide.
    Ça fait 2 jours que je planche la dessus et je n'y arrive pas.
    Mon but étant de pouvoir importer des fiches techniques en pièces jointes.
    j'ai donc un dossier parent:
    Nom : Doss1.jpg
Affichages : 197
Taille : 6,5 Ko

    avec un certain nombre de fiches à l’intérieur:
    Nom : Doss2.jpg
Affichages : 193
Taille : 12,4 Ko

    J'ai réussi à trouver quelques codes sur le net me permettant de faire le maximum. Pour la première référence l'importation se passe bien, ça bloque à la deuxième. je pense qu'il y a une petite coquille dans le code mais ne suis pas assez à l'aise encore.

    Merci pour votre coopération.
    Fichiers attachés Fichiers attachés

  2. #2
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    En fait ce qu'il se passe c'est que le module repasse dans le dossier autant de fois qu'il y a de fichiers.
    Comment limité ce problème?

    Cordialement.

    PS: Si vous avez un code plus court et plus simple je suis preneur.

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Le type pièce jointe a été effectivement proposé dans les dernières versions d'Access mais il n'est pas très simple à exploiter dès qu'on veut faire quelque chose de plus poussée.
    1- Pour enregistrer un fichier dans un champ de table, on se contente souvent d'un champ texte avec le chemin complet du nom du fichier (quitte à créer effectivement un sous-dossier du dossier de l'application pour les stocker) dont tu as un exemple dans le tuto de Caféine pour la gestion des photos.
    2- Ensuite, tu peux utiliser les instructions dans la discussion ci-jointe à partir d'un évènement de ton formulaire ou ses contrôles pour ouvrir ton fichier.

    Cordialement.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci madefemere mais la fonction: LoadAttachments() fonctionne bien.
    il faudrait que je la lance une fois dans chaque dossier.

    C'est ça que je n'arrive pas à faire, aller de dossier en dossier pour pouvoir lancer ma fonction.

    Je pense que c'est un code tout bête mais je n'ai pas encore trouver la solution.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Voici donc les différents modules nécessaires et fonctionnels pour cette tâche, cela pourra peut être intéressé des personnes.

    Le code pour le bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Admin_Click()
     
        Dossier_Import = BrowseFolder("Choisissez votre répertoire:")
        Marque = "LEGRAND"
        Import (Dossier_Import)
        MsgBox "Terminé !", vbInformation
     
    End Sub
    La fonction BrowseFolder:
    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
    Function BrowseFolder(Title As String, _
            Optional InitialFolder As String = vbNullString, _
            Optional InitialView As Office.MsoFileDialogView = _
                msoFileDialogViewList) As String
        Dim V As Variant
        Dim InitFolder As String
        With Application.FileDialog(msoFileDialogFolderPicker)
            .Title = Title
            .InitialView = InitialView
            If Len(InitialFolder) > 0 Then
                If Dir(InitialFolder, vbDirectory) <> vbNullString Then
                    InitFolder = InitialFolder
                    If Right(InitFolder, 1) <> "\" Then
                        InitFolder = InitFolder & "\"
                    End If
                    .InitialFileName = InitFolder
                End If
            End If
            .Show
            On Error Resume Next
            Err.Clear
            V = .SelectedItems(1)
            If Err.Number <> 0 Then
                V = vbNullString
            End If
        End With
        BrowseFolder = CStr(V)
    End Function
    Le module Import:
    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
     
    Sub Import(Dossier_Import As String)
     
        Dim rst As DAO.Recordset2
        Dim strDossier As String
        Dim varSousDossiers As Variant
        Dim intSousDossiers As Integer
        Dim intI As Integer
        Dim strFichier As String
     
        Set rst = CurrentDb.OpenRecordset("Base", dbOpenDynaset)
     
        strDossier = Dossier_Import
        varSousDossiers = ListerSousDossiers(strDossier)
        intSousDossiers = UBound(varSousDossiers)
     
        If intSousDossiers <= 0 Then
            Debug.Print "Aucun sous-dossier"
        Else
            For intI = 1 To intSousDossiers
            rst.AddNew
            rst("Marque") = "LEGRAND"
            rst("Référence") = Right(varSousDossiers(intI), 6)
            rst.Update
            LoadAttachments (varSousDossiers(intI))
            Next
        End If
     
        rst.Close
        Set rst = Nothing
     
    End Sub
    Et la fonction LoadAttachments (un peu modifiée):
    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
     
    Public Function LoadAttachments(strPath As String, Optional strPattern As String = "*.*") As Long
        Dim dbs As DAO.Database
        Dim rst As DAO.Recordset2
        Dim rsA As DAO.Recordset2
        Dim fld  As DAO.Field2
        Dim strFile As String
     
        'Get the database, recordset, and attachment field
        Set dbs = CurrentDb
        Set rst = dbs.OpenRecordset("Base")
        Set fld = rst("Fiche Technique")
     
        'Navigate through the table
        Do While Not rst.EOF
     
            'Get the recordset for the Attachments field
            Set rsA = fld.Value
     
            'Load all attachments in the specified directory
            strFile = Dir(strPath & "\*.*")
     
            rst.Edit
            Do While Len(strFile) > 0
                'Add a new attachment that matches the pattern.
                'Pass "" to match all files.
                If strFile Like strPattern And rst("Référence") = Right(strPath, 6) And rst("Marque") = "LEGRAND" Then
                    rsA.AddNew
                    rsA("FileData").LoadFromFile strPath & "\" & strFile
                    rsA.Update
     
                    'Increment the number of files added
                    LoadAttachments = LoadAttachments + 1
                End If
                strFile = Dir
            Loop
            rsA.Close
     
            rst.Update
            'Next record
            rst.MoveNext
        Loop
     
        rst.Close
        dbs.Close
     
        Set fld = Nothing
        Set rsA = Nothing
        Set rst = Nothing
        Set dbs = Nothing
    End Function
    Voila

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

Discussions similaires

  1. [OL-2007] Importer et renommer les pièces jointes outllook
    Par redalinho dans le forum VBA Outlook
    Réponses: 6
    Dernier message: 15/02/2016, 16h09
  2. Pièces jointes et Outlook 2000
    Par Nico118 dans le forum Outlook
    Réponses: 15
    Dernier message: 13/01/2011, 17h19
  3. [javamail] envoi mail avec message en pièce jointe
    Par k4eve dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 16/11/2007, 11h17
  4. Privilèges des "Membres du club" : signature, pièces jointes illimitées, etc.
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 0
    Dernier message: 28/07/2004, 11h20
  5. affichage des pièces jointe sous outllook 2000
    Par darkbm dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 29/10/2003, 11h32

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