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 :

Adapter codes: stocker chemin image dans table via selecteur


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    AutoEntrepreneur Photo
    Inscrit en
    Avril 2015
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : AutoEntrepreneur Photo
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 141
    Points : 86
    Points
    86
    Par défaut Adapter codes: stocker chemin image dans table via selecteur
    Bonjour,

    Je souhaite créer un bouton qui me permet de Sélectionner des fichiers (images), et de les "stocker" ("Nom Image","Nom Fichier","Dossier") dans une table tblImages.

    Pour cela, j'ai trouvé un premier code (source: grenier.self-access) qui me permet de sélectionner plusieurs fichiers via la boite dialogue windows:
    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
    ' ---
    ' SELECTION MULTIPLE DE FICHIERS
    ' ---
    '
    Sub SelectionFichier()
      Dim fd As Office.FileDialog
      Dim varFichier As Variant
      Dim strListe As String
     
      ' Créer un objet FileDialog
      Set fd = Application.FileDialog(msoFileDialogOpen)
     
      ' Titre de la boîte de dialogue
      fd.Title = "Sélectionnez un ou plusieurs fichiers..."
     
      ' Autoriser la sélection multiple
      fd.AllowMultiSelect = True
     
      ' Définir les types de fichiers autorisés
      fd.filters.Clear
      fd.filters.Add "Tous les fichiers", "*.*"
      fd.filters.Add "Images", "*.gif; *.jpg; *.jpeg; *.png; *.bmp; *.arw; *.dng"
      fd.filters.Add "Vidéos", "*.mp4; *.mov"
     
      ' Présélectionner le 2ème type de fichier (images)
      fd.FilterIndex = 2
     
      ' Pas de nom par défaut
      fd.InitialFileName = "D:\Gestion Entreprise\Import\"
     
      ' Afficher la boîte de dialogue
      If fd.Show() Then
        ' Lister les chemins de tous les fichiers sélectionnés
            strListe = ""
        For Each varFichier In fd.SelectedItems
          strListe = strListe & varFichier & vbCrLf
        Next
     
        ' Afficher le résultat
        MsgBox "Vous avez sélectionné les fichiers suivants : " _
          & vbCrLf & strListe, vbInformation
      End If
      Set fd = Nothing
    End Sub
    Ce code affiche une liste strListe (via un msgbox) qui reprend le chemin (l'emplacement windows) de chaque fichier sélectionné.
    Ce que je souhaite, c'est ajouter ces chemins sous forme d'enregistrement dans une table.

    Pour ajouter des ces enregistrement dans une table, j'ai trouvé un autre code (source: grenier.self-access) :

    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
    ' ---
    ' CHARGER TOUTES LES IMAGES D'UN DOSSIER DANS LA BASE
    ' ---
    ' Entrée : strDossier   <- Nom du dossier à parcourir.
    '          strExtension <- Extension des fichiers images.
    '
    Sub ChargerImages( _
      ByVal strDossier As String, _
      Optional ByVal strExtension As String = "*.jpg")
     
      Dim rst As DAO.Recordset
      Dim strFichier As String
      Dim intImages As Integer
     
      ' Ajouter un  à la fin du dossier, si nécessaire
      strDossier = AddBackslash(strDossier)
     
      ' Ouvrir la table
      Set rst = CurrentDb.OpenRecordset("tblImages", dbOpenDynaset)
     
      ' Lecture des images du dossier
      intImages = 0
      strFichier = Dir(strDossier & strExtension, vbNormal)
      While strFichier <> ""
        ' Ajouter l'image dans la table
        rst.AddNew
        rst("Nom Image") = FileNameWithoutExt(strFichier)
        rst("Nom Fichier") = strFichier
        rst("Dossier") = strDossier
        rst.Update
        intImages = intImages + 1
     
        ' On passe au fichier suivant
        strFichier = Dir
      Wend
    Donc le problème est que le deuxième code stocke TOUTES les images d'un dossier. Or, je souhaite que ça charge UNIQUEMENT les images sélectionné par le code précédemment en strListe.
    Je pense que c'est plus particulièrement ces lignes qui bouclent sur l'ensemble des fichiers d'un dossier alors qu'il faudrait que ça boucle que sur les fichiers selectionnés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ' Lecture des images du dossier
      intImages = 0
      strFichier = Dir(strDossier & strExtension, vbNormal)
      While strFichier <> ""
    Je ne sais pas trop comment m'y prendre, je vous remercie d'avance pour vos remarques.

    zkunk

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 637
    Points : 14 611
    Points
    14 611
    Par défaut
    Bonsoir,
    le code est facile à adapter selon ton besoin, mais le souci est que le premier code te renvoie la liste des fichiers sélectionnés avec le nom complet et le second utilise le dossier, le fichier et l'extension séparés, correspondant à 3 champs distincts dans la table.
    Si tu as copié les fonctions (ou Sub) FileNameWithoutExt, AddBackslash, FileName, FilePath et FileExt, voici comment l'utiliser :
    d'abord, une nouvelle fonction ChargerUneImage à adapter en fonction des champs de ta table :
    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
    Sub ChargerUneImage(ByVal NomFichier As String)
     
      Dim rst As DAO.Recordset
     
      ' Ouvrir la table des Images
      Set rst = CurrentDb.OpenRecordset("tblImages", dbOpenDynaset)
     
      ' Lecture du fichier entré en paramètre
      If NomFichier <> "" Then
        ' Ajouter l'image dans la table
        rst.AddNew
        rst("Nom Image") = FilenameWithoutExt(NomFichier)
        rst("Nom Fichier") = Filename(NomFichier)
        rst("Dossier") = FilePath(NomFichier)
        rst.Update
      End If
      rst.Close
     
    End Sub
    ensuite le code SelectionFichier modifié :
    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
     
    Sub SelectionFichier()
      Dim fd As Office.FileDialog
      Dim varFichier As Variant
      Dim strListe As String
     
      ' Créer un objet FileDialog
      Set fd = Application.FileDialog(msoFileDialogOpen)
     
      ' Titre de la boîte de dialogue
      fd.Title = "Sélectionnez un ou plusieurs fichiers..."
     
      ' Autoriser la sélection multiple
      fd.AllowMultiSelect = True
     
      ' Définir les types de fichiers autorisés
      fd.filters.Clear
      fd.filters.Add "Tous les fichiers", "*.*"
      fd.filters.Add "Images", "*.gif; *.jpg; *.jpeg; *.png; *.bmp; *.arw; *.dng"
      fd.filters.Add "Vidéos", "*.mp4; *.mov"
     
      ' Présélectionner le 2ème type de fichier (images)
      fd.FilterIndex = 2
     
      ' Pas de nom par défaut
      fd.InitialFileName = "D:\Gestion Entreprise\Import\"
     
      ' Afficher la boîte de dialogue
      If fd.Show() Then
        ' Lister les chemins de tous les fichiers sélectionnés
            strListe = ""
            For Each varFichier In fd.SelectedItems
                strListe = strListe & varFichier & vbCrLf
            Next
     
        ' Afficher le résultat et enregistrer si réponse positive
            If MsgBox("Vous avez sélectionné les fichiers suivants : " & vbCrLf & strListe & "Voulez-vous les ajouter ?", vbQuestion + vbOKCancel) = vbOK Then
                For Each varFichier In fd.SelectedItems
                    Call ChargerUneImage(varFichier)
                Next
            End If
      End If
      Set fd = Nothing
    End Sub
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 637
    Points : 14 611
    Points
    14 611
    Par défaut
    une autre version plus optimisée car elle insère toute la sélection en une fois :
    avec une nouvelle fonction :
    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
     
    Sub ChargerDesImages(ByVal NomFichiers As String)
      Dim varListFic As Variant
      Dim i As Integer
      Dim rst As DAO.Recordset
     
      ' Charger le tableau
       varListFic = Split(NomFichiers, vbCrLf)
     
      ' Ouvrir la table des Images
      Set rst = CurrentDb.OpenRecordset("tblImages", dbOpenDynaset)
     
      ' Lecture du tableau passé en paramètre
      For i = 0 To UBound(varListFic)
        If varListFic(i) <> "" Then
        ' Ajouter l'image dans la table
            rst.AddNew
            rst("Nom Image") = FilenameWithoutExt(varListFic(i))
            rst("Nom Fichier") = Filename(varListFic(i))
            rst("Dossier") = FilePath(varListFic(i))
            rst.Update
        End If
      Next i
     
      rst.Close
     
    End Sub
    et l'utilisation dans la fonction SelectionFichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ' Afficher le résultat et enregistrer si réponse positive
            If MsgBox("Vous avez sélectionné les fichiers suivants : " & vbCrLf & strListe & vbCrLf & "Voulez-vous les ajouter ?", vbQuestion + vbOKCancel) = vbOK Then
               Call ChargerDesImages(strListe)
            End If
    à la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        ' Afficher le résultat et enregistrer si réponse positive
            If MsgBox("Vous avez sélectionné les fichiers suivants : " & vbCrLf & strListe & vbCrLf & "Voulez-vous les ajouter ?", vbQuestion + vbOKCancel) = vbOK Then
                For Each varFichier In fd.SelectedItems
                    Call ChargerUneImage(varFichier)
                Next
            End If
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  4. #4
    Membre régulier
    Homme Profil pro
    AutoEntrepreneur Photo
    Inscrit en
    Avril 2015
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : AutoEntrepreneur Photo
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 141
    Points : 86
    Points
    86
    Par défaut
    Bonjour tee_grandbois,

    C'est exactement ce que je cherchais à faire, et oui j'utilise les fonctions (ou Sub) FileNameWithoutExt, AddBackslash, FileName, FilePath et FileExt donc c'est parfait la solution que tu me proposes est idéale !
    Un grand merci =)

    Bonne journée

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

Discussions similaires

  1. Stocker Image dans Oracle via VB.net
    Par sisiniya dans le forum VB.NET
    Réponses: 20
    Dernier message: 25/06/2010, 20h28
  2. stocker des images dans le champ d'une table
    Par flex@ dans le forum Débuter
    Réponses: 2
    Dernier message: 02/01/2008, 17h23
  3. Réponses: 1
    Dernier message: 27/09/2006, 08h50
  4. Comment stocker des images dans une base de données ?
    Par [Silk] dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/07/2005, 11h29

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