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 :

Récupérer les fichiers joints d’une table


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut Récupérer les fichiers joints d’une table
    Bonjour,

    J’ai une table [DOCUMENTS_01] contenant plusieurs champs :

    • [CLE],
    • [NOM-PRENOM],
    • [FICHIERS JOINTS], ‘ icône - Trombone
    • ...

    J’aimerais récupérer en une fois TOUS les fichiers insérés dans la table en gardant évidement les mêmes noms.

    À savoir qu’il peut y avoir plusieurs fichiers dans un même enregistrement.

    Auriez-vous une solution, un code VBA pour moi qui par exemple :

    1. Créerait un répertoire avec le [NOM-PRENOM] du 1er enregistrement,
    2. Copierait tous les fichiers joints de ce 1er enregistrement [FICHIERS JOINTS],
    3. Ainsi de suite pour les autres enregistrements.


    Merci d’avance pour la suite :-)

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    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 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Il y a un tuto qui traite intégralement ce sujet.
    https://warin.developpez.com/access/piecejointe/

    Cordialement
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 118
    Points : 1 641
    Points
    1 641
    Par défaut
    Salut,

    Les champs de type Piece jointe ont 3 champs fils en interne: FileData, FileName et FileType.
    Il suffit d'interroger le bon champ fils.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Table1.Fichier.FileName
    FROM Table1;
    Note: Les champs sont visibles dans le requêteur.

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    En complément, on peut aussi conseiller de conserver les pièces-jointes à l'extérieur de la base.

    Alors est-ce que c'est aussi le but recherché ici ?

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    Bonjour,

    Merci pour le lien, je vais regarder à ça.

    Bonne journée :-)

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    Bonjour,

    deedolith : il existe une solution pour ne pas intégrer les pièces jointes directement dans le fichier *.accdb ?

    Pour ce qui est de l'enregistrement en une fois de toutes mes pièces jointe d'une table, je n'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
    Private Sub cmdEnregistrer_Click()
    Dim strchemin As String
    Dim strNomFichier As String
    Dim oFD As Object
    strNomFichier = Nz(SFormFichier.Form.txtfichier)
    If strNomFichier <> "" Then
     
        'Paramètre la fenêtre Enregistrer
        Set oFD = Application.FileDialog(msoFileDialogSaveAs)
        With oFD
            'Affiche la fenêtre et vérifie qu'un fichier a bien été choisi
            .InitialFileName = strNomFichier
            If .Show Then
                strchemin = .SelectedItems(1)
                If EnregistrerFichier(strNomFichier, Me.N°, strchemin) Then
                    If MsgBox("Voulez-vous ouvrir le fichier ?", vbQuestion + vbYesNo, "Enregistrement d'une pièce jointe") = vbYes Then
                        ShellExecute Me.hwnd, "open", strchemin, "", CurrentProject.Path, 1
                    Else
                        MsgBox "Enregistrement réussi", vbInformation, "Enregistrement d'une pièce jointe"
                    End If
                End If
            End If
        End With
    End If
    End Sub
     
    La méthode ShellExecute est une fonction de l'API Windows. Elle permet d'ouvrir un fichier. Pour l'utiliser vous devez rajouter sa déclaration dans l'entête d'un module nommé mduAPI :
     
    Sélectionnez
     
    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
    Mon fichier [fichierjp.accdb] :
    • Une table : table01
    • champ1 - pièce jointe : champpj
    • champ2 : nomj
    • champ3 : id
    • champ4 : userj


    Ps : il peut y avoir plusieurs pièces jointes sur un enregistrement (ligne)

    J'aimerais un code qui me prendrais chaque ligne est exporterait les enregistrements du champ1 en : id + nom + nom de la pièce jointe + extension du fichier dans un répertoire du nom du champ4

    Une solution pour moi ?

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    J'ai trouvé ce lien, est-ce le même site ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    https://denishulo.developpez.com/tutoriels/access/extraire-pieces-jointes/#LVI

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    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 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    il existe une solution pour ne pas intégrer les pièces jointes directement dans le fichier *.accdb ?

    Oui c'est la solution conseillé.
    Stocker les fichiers sur le disque, dans la base ne stocker que le nom du fichier, et dans une table paramètre stocker le chemin.

    PAr exemple Sql Server intègre un module pour gérer ça.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    C'est exactement ce que j'aimerais faire, mais pour ça, je dois tout récupérer (pièces jointes) :-)

    Auriez-vous un exemple ? Une base ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PAr exemple Sql Server intègre un module pour gérer ça.

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 118
    Points : 1 641
    Points
    1 641
    Par défaut
    Il te faut ouvrir 2 recordsets pour cela.
    Un sur les données (table ou requête), et un sur la colonne contenant les pièces jointes.
    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
    Dim Db As DAO.Database
    Set Db = CurrentDb
     
    Dim Rs As DAO.Recordset
    Set Rs = De.OpenRecordset("SELECT [FICHIERS JOINTS] FROM DOCUMENTS_01;")
     
    While Not Rs.Eof
        Dim RsAttachment As DAO.Recordset2    '// Attention au type de recordset: Recordset2 et pas Recordset
        Set Rsattachment = Rs("FICHIERS JOINTS").Value
     
        While Not RsAttachment.EOF
            RsAttachment("FileData").SaveToFile "C:\........"
            RsAttachment.MoveNext
        Wend
        Rs.MoveNext
    Wend

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    Bonjour,

    Mon fichier [fichierjp.accdb] :

    • Une table : table01
    • champ1 - pièce jointe : champpj
    • champ2 : nomj
    • champ3 : id
    • champ4 : userj


    Le code fonctionne très bien, mais j'aimerais par enregistrement/ligne :

    • créer un répertoire [champ4] si il n'existe pas
    • dans ce répertoire, créer un répertoire [champ2] si il n'existe pas
    • enregistrer dans ce répertoire les pièces jointes et les renommant : [champ 3] & " - " & nom du fichier
    • faire cela pour toutes les lignes...

    Créer des répertoires et renommer les noms évitera les problèmes des fichiers portants les mêmes noms dans les différents enregistrements ainsi qu'un rangement automatique...

    Pouvez-vous m'aider ?

    Merci d'avance :-)

    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
    Private Sub Commande0_Click()
    Dim Db As DAO.Database
    Set Db = CurrentDb
     
    Dim Rs As DAO.Recordset
    Set Rs = Db.OpenRecordset("SELECT [CHAMPPJ] FROM table01;")
     
    While Not Rs.EOF
        Dim RsAttachment As DAO.Recordset2    '// Attention au type de recordset: Recordset2 et pas Recordset
        Set RsAttachment = Rs("CHAMPPJ").Value
     
        While Not RsAttachment.EOF
            RsAttachment("FileData").SaveToFile "C:\Users\Propriétaire\Desktop\ACCESS TEST PIECES JOINTES EXPORTATION\EXPORTATIONS\"
            RsAttachment.MoveNext
        Wend
        Rs.MoveNext
    Wend
    End Sub

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 118
    Points : 1 641
    Points
    1 641
    Par défaut
    Une fonction qui crée une dossier s'il n'existe pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub CreateFolder(ByVal Path As String)
        Dim Fso As Object       '// Scripting.FileSystemObject
        Set Fso = CreateObject("Scripting.FileSystemObject")
     
        If Not (Fso.FolderExists(Path)) Then
            Fso.CreateFolder Path
        End If
    End Sub
    Note:
    Ne fonctionne que si le dossier parent existe.

  13. #13
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    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 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Quand vous partez de chez vous, vous laissez la porte grande ouverte ?

    Pour les objets c'est pareil ; Quand on les ouvre, on les ferme en partant.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 118
    Points : 1 641
    Points
    1 641
    Par défaut
    Je me permet d'objecter.

    Dans le cas de variables locales, et s'il n'y a pas de références croisées impliquées, la destruction explicite des instances n'est pas obligatoire, grâce à la simple mécanique de résolution de portée des variables:
    Lorsqu'une variable sort de la portée courante, elle est automatiquement détruite.

    Il n'y a qu'a écrire une simple classe pour s'en rendre compte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    '// Class module: Foo
    Option Explicit
     
    Private Sub Class_Initialize()
        Debug.Print "Foo instanciated."
    End Sub
     
    Private Sub Class_Terminate()
        Debug.Print "Foo detroyed."
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    '// Standard module: Tests
    Option Explicit
     
    Public Sub test()
        Dim Foo As Foo
        Set Foo = New Foo
    End Sub
    L'execution de la fonction test produit la sortie suivante dans le fenêtre d'execution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Foo instanciated.
    Foo detroyed.

  15. #15
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    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 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Oui mais nous ne sommes pas dans le cas que tu décris dans ton objection. Tu proposes un code avec des objets complexes et externes (fso et recordset) et tu étayes ton objection avec une classe simple, inconsistante et sans objet.

    Pour info :
    Le "garbage collector" de VBA fonctionne bien avec les types de variables internes (String, Long...) ou les classes.

    Avec des types complexes et externes de surcroits, comme le code que tu as posté, ce n'est pas la même musique.

    Tant que le Nothing n'est pas explicitement invoqué (et un quit/close si l'objet le propose), il est très fréquent que l'objet ne soit pas libéré, il reste en mémoire jusqu'à la fermeture d'Access, il peut empêcher Access de se fermer ou bien provoquer des problèmes sur l'objet invoqué.

    Donc mon conseil est de prendre l'habitude de fermer les objets quand la méthode existe (close/quit) et de libérer l'objet (Nothing).
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 118
    Points : 1 641
    Points
    1 641
    Par défaut
    Attention aux amalgames.
    Complexe n'implique pas obligation de détruire manuellement.

    Une classe bien écrite (qui respecte les principes SOLID, ce dont les équipes de Microsoft sont tout à fait capable) se suffit à elle même, elle instancie et détruit ses dépendances sans intervention supplémentaire.

    Tu peux écrire un code tout aussi simple pour t'en convaincre, avec une connection (ADO ou DAO) vers access.
    Tu t'apercevra une fois la fonction terminée, que la connection à la base de donnée est bien fermée(absence du fichier .laccdb).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub Test
        Const Path As String = "c:\.......\myDatabase.accdb"
        Dim Db as DAO.Database
        Set Db  = DAO.OpenDatabase(Path)
     
        Dim Rs As DAO.Recordset
        Set Rs = Db.OpenRecordset("SELECT MyColumn FROM MyTable;")
    Exit Sub    '// Fin de la fonction
                '// L'objet Rs est fermé et détruit
                '// L'objet Db est fermé et détruit
    Détruire manuellement les objets, ce n'est pas faux.
    Mais, sauf exception, ce n'est pas utile (faisons un minimum confiance au garbage collector), et ne fait qu'ajouter du code inutile justement qui a plus tendance à détourner le programmeur de sa tâche (se focaliser sur le comportement recherché plutôt que la gestion des ressources).

    Jusqu'à preuve du contraire, les librairies ont été testées et éprouvées dans tous les sens.
    J'assume qu'il est correcte de laisser le garbage collector faire son travail, inutile de se substituer à ce dernier.

  17. #17
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    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 006
    Points : 24 598
    Points
    24 598
    Par défaut
    "ADO vers Access", "un recordset SELECT", c'est sûr qu'avec des exemples comme ça tu ne dois pas avoir de problème de GC. :ptdr
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  18. #18
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 118
    Points : 1 641
    Points
    1 641
    Par défaut
    Il ne te reste plus qu'a prouver que l'instanciation d'objets issus de librairies externes nécessitent une destruction manuelle et systématique des instances.

  19. #19
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    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 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Je pense que tu n'as franchement pas le niveau pour comprendre ça.
    Repasse dans 2 ou 3 ans on verra ce qu'on peut faire pour toi.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  20. #20
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 118
    Points : 1 641
    Points
    1 641
    Par défaut
    Au risque de te déplaire:

    J'ai donné des arguments, ainsi que des preuves.

    De ton côté, tu as donné des arguments d'autorité, sans preuve, ce qu'on peut rejeter.

    Quand à mon niveau, il n'est pas ce que tu croit.
    Ta date d'inscription et nombre de messages indiquent ton temps de présence et ta participation à l'activité du forum.
    Rien à voir avec l'expérience.

Discussions similaires

  1. [MySQL] Affichage Fichier JOINT (depuis table MySQL type BLOB) header content
    Par encore_php dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/04/2008, 16h57
  2. Réponses: 8
    Dernier message: 30/04/2007, 19h48
  3. Impossible de Télécharger les fichiers joints
    Par Rabie de OLEP dans le forum Internet
    Réponses: 1
    Dernier message: 27/04/2007, 10h17
  4. Réponses: 2
    Dernier message: 23/11/2005, 16h30

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