IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Pièces-jointes > VBA
        Comment ajouter un fichier dans un champ de type pièce-jointe en VBA ?
        Comment créer un champ de type pièce-jointe en VBA ?
        Comment ouvrir une pièce-jointe en VBA ?
        Comment sauvegarder une pièce-jointe dans un fichier en VBA ?
        Comment savoir si mon champ est de type pièces-jointes ?
        Comment supprimer toutes les pièces-jointes d'un certain type ?
        Comment vider un champ de type pièce-jointe en VBA ?

rechercher
precedent    sommaire    suivant    telecharger


Comment ajouter un fichier dans un champ de type pièce-jointe en VBA ?
auteur :Christophe Warin
Pour ajouter un fichier, il faut utiliser la méthode LoadFromFile des objets Field2 de DAO. Cette méthode est applicable au champ FileData d'une pièce-jointe.

Exemple :
Function AjouterFichier(strchemin As String, inteleve As Integer) As Boolean
On Error GoTo err
Dim oRst As DAO.Recordset
    'Ouvre un recordset sur les fichiers de l'éleve passé en paramètre
    Set oRst = CurrentDb.OpenRecordset("SELECT Fichiers FROM tbl_eleve WHERE [N°]=" & inteleve)
    With oRst.Fields(0).Value
        'Ajoute la pièce jointe
        .AddNew
        'Lit le fichier
        .Fields("FileData").LoadFromFile strchemin
        .Update
    End With
    AjouterFichier = True
    
fin:
    Set oRst = Nothing
    Exit Function

err:
    'Gestion d'erreur
    Select Case err.Number
        Case 3024:
            MsgBox "Fichier inexistant", vbCritical
        Case 3820:
            MsgBox "Une autre pièce-jointe de ce nom existe déjà", vbCritical
        Case Else:
            MsgBox "Erreur inconnue", vbCritical
    End Select
    Resume fin
End Function

Comment créer un champ de type pièce-jointe en VBA ?
auteur :Christophe Warin
Pour créer un champ pièce-jointe dans une table en VBA, vous pouvez utiliser DAO et la méthode CreateField. Dans ce cas, le type du champ sera : dbAttachment.
Sub creerChampPieceJointe()
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
Set oDb = CurrentDb
Set oTbl = oDb.TableDefs("TableClient")
With oTbl
    .Fields.Append .CreateField("PhotoClient", dbAttachment)
End With
End Sub

Comment ouvrir une pièce-jointe en VBA ?
auteur :Christophe Warin
Pour ouvrir une pièce-jointe, il faut procéder en deux étapes :

  1. Enregistrer la pièce-jointe dans un fichier temporaire
  2. Ouvrir le fichier
Pour l'enregistrement, je vous renvoie vers la question : Comment sauvegarder une pièce-jointe dans un fichier en VBA ?

Pour l'ouverture, vous pouvez utiliser l'API ShellExecute.

Dans l'entête d'un module :
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
    ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Puis dans votre code (après l'enregistrement du fichier) :
ShellExecute Me.hwnd, "open", strchemin, "", CurrentProject.Path, 1
strChemin est le nom du fichier.

lien : faq Comment sauvegarder une pièce-jointe dans un fichier en VBA ?

Comment sauvegarder une pièce-jointe dans un fichier en VBA ?
auteur :Christophe Warin
La méthode SaveToFile des objets Field2 de DAO permet d'enregistrer une pièce-jointe dans un fichier dont le nom est passé en paramètre. Il suffit de l'appliquer sur le champ FileData issu du champ pièce-jointe.

Dans l'exemple ci-dessous, le champ Fichier est un champ de type pièce-jointe.
Function EnregistrerFichier(strNomFichier As String, inteleve As Integer, strNomDestination) As Boolean
On Error GoTo err
Dim oRst As DAO.Recordset
    'Ouvre un recordset sur les fichiers de l'éleve passé en paramètre
Set oRst = CurrentDb.OpenRecordset("SELECT Fichiers.FileData FROM tbl_eleve WHERE [N°]=" & _
            inteleve & " AND Fichiers.FileName=" & Chr(34) & strNomFichier & Chr(34))
    If Not oRst.EOF Then
    
        oRst.Fields(0).SaveToFile strNomDestination
        EnregistrerFichier = True
    End If    
fin:
Set oRst = Nothing
Exit Function
    
err:
    Select Case err.Number
    Case 3839:
        MsgBox "Impossible d'écraser le fichier", vbCritical
    Case Else
        MsgBox "Erreur inconnue", vbCritical
    End Select
    Resume fin
End Function
Utilisation :

La ligne suivante sauvegarde la pièce-jointe photo.jpg de l'élève n° 2 dans le fichier c:\essai.jpg
EnregistrerFichier "photo.jpg", 2, "c:\essai.jpg"

Comment savoir si mon champ est de type pièces-jointes ?
auteur :Christophe Warin
Lorsqu'un champ est de type pièces-jointes, la valeur de sa propriété Type avec DAO est égale à dbAttachment (101).
Dim odb As DAO.Database
Dim otbl As DAO.TableDef
'Instancie la base de données
Set odb = CurrentDb
'Accède à la table
Set otbl = odb.TableDefs("Table1")
'Teste la propriété type du champ
If otbl.Fields(0).Type = dbAttachment Then
    MsgBox "Champ de type Pièces-Jointes"
End If

Comment supprimer toutes les pièces-jointes d'un certain type ?
auteur :Christophe Warin
En fait c'est trés simple, il suffit de rechercher les fichiers dont l'extension correspond à celle désirée puis supprimer les éléments trouvés.

Exemple :
Dim oRst As DAO.Recordset
'Accède aux données du client numéro 1
Set oRst = CurrentDb.OpenRecordset("SELECT * FROM tblClient WHERE Num=1")
'Accède à son jeu de pièces-jointes
With oRst.Fields("Photo").Value
  'parcours tous les fichiers texte en faisant une recherche
  .FindFirst "FileType='txt'"
    While Not .NoMatch
      'Supprime et passe au suivant
      .Delete
      .FindNext "FileType='txt'"
    Wend
End With
lien : faq Comment lister les extensions des fichiers en SQL ?

Comment vider un champ de type pièce-jointe en VBA ?
auteur :Christophe Warin
Pour vider un champ de toute ses pièces-jointes, il faut utiliser la méthode Delete du recordset correspondant au champ.

Exemple :
Dim oRst As DAO.Recordset
'Accède aux données du client numéro 1
Set oRst = CurrentDb.OpenRecordset("SELECT * FROM tblClient WHERE Num=1")
'Accède à son jeu de pièces-jointes
With oRst.Fields("Photo").Value
  'parcours tous les fichiers et les supprime
    While Not .EOF
      .Delete
      .MoveNext
    Wend
End With
lien : faq Comment supprimer toutes les pièces-jointes d'un certain type ?
lien : faq Comment supprimer toutes les pièces-jointes d'un enregistrement en SQL
lien : faq Comment supprimer une pièce-jointe en SQL

rechercher
precedent    sommaire    suivant    telecharger

Consultez les autres F.A.Q's


Valid XHTML 1.1!Valid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.