Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Créer un bouton 'Parcourir' pour récupérer un nom de fichier dans l'explorateur

7 réponses
Avatar
fredonnon
Bonjour,

J'aimerais avoir un petit coup de pouce pour un problème que je me
pose.

J'ai une table qui contient des noms de fichiers permettant de pointer
sur des fichiers jpg pour les afficher dans un formulaire.

J'aimerais créer un bouton qui ouvre le répertoire images dédié et
permette à l'utilisateur de choisir une image déjà existante. En la
choisissant, ce nom de fichier s'intégrerait dans l'enregistrement en
cours dans le champ utilisé pour appeler l'image.

Avez-vous des conseils ou des liens vers des URL pouvant me permettre
de comprendre comment faire SVP ?

7 réponses

Avatar
Raymond [mvp]
Bonsoir.

Tu trouveras les liens dans le texte ci-dessous.

je te fais les remarques que nous faisons à tout le monde au
sujet des images insérées et même liées concernant le grossissement de la
base access:

Il ne faut pas insérer une image dans un formulaire car la base augmente à
une vitesse vertigineuse, ni la lier d'ailleurs car la base augmente aussi
mais dans une moindre mesure.
Il faut donc placer le chemin de l'image dans un champ texte et afficher
l'image soi-même au moment opportun.
Pour pouvoir afficher des fichiers jpg, il faut que microsoft photo editor
soit installé.
Tu trouveras une base exemple avec un formulaire permettant l'affichage et
le redimentionnement de l'image ainsi qu'un état permettant d'afficher les
images correspondantes à chaque enregistrement de la table. sur:
http://access.seneque.free.fr/bases_exemples.htm" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://access.seneque.free.fr/bases_exemples.htm N° 38
Tu pourras lire aussi les fiches
ACC2000 : Procédure pour afficher une image à partir d'un dossier dans un
formulaire: http://support.microsoft.com/?id!0100
ACC2000: How to Display an Image from a Folder in a Form or in a Report
http://support.microsoft.com/default.aspx?scid=kb;en-us;210100
ACC : pourquoi les objets OLE font augmenter la taille des bases de données:
http://support.microsoft.com/?id3151
WORD2000 : Le publipostage
http://support.microsoft.com/default.aspx?scid=kb;FR;212329
WORD2000 : Insertion d'une image ou d'un logo dans un état ou étiquettes
http://support.microsoft.com/default.aspx?scid=kb;FR;212078

De plus si tu veux exporter une image access dans word il ne faut pas passer
par un controle image pour afficher l'image mais par un cadre indépendant.
tu trouveras des explications et des exemples sur :
http://access.seneque.free.fr/copie_objets_ole.htm" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://access.seneque.free.fr/copie_objets_ole.htm


--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Fredonnon" a écrit dans le message de
news:
Bonjour,

J'aimerais avoir un petit coup de pouce pour un problème que je me
pose.

J'ai une table qui contient des noms de fichiers permettant de pointer
sur des fichiers jpg pour les afficher dans un formulaire.

J'aimerais créer un bouton qui ouvre le répertoire images dédié et
permette à l'utilisateur de choisir une image déjà existante. En la
choisissant, ce nom de fichier s'intégrerait dans l'enregistrement en
cours dans le champ utilisé pour appeler l'image.

Avez-vous des conseils ou des liens vers des URL pouvant me permettre
de comprendre comment faire SVP ?


Avatar
fredonnon
Bonjour Raymond, gardien du temple du savoir ;o)

Tout d'abord mes meilleurs voeux pour toi (et pour le forum !) en
cette nouvelle année. C'est moi que tu avais aidé pour la base
'Vidéothèque' que je constitue si tu te rappelles.

Tu m'avais bien recommandé de ne pas insérer en OLE les images de
chaque film et j'ai cherché un peu, notamment dans les URL que tu
listes ci-dessous. J'ai résolu le problème.

Pour info, pour ceux qui se creusent la tête sur ce problème de
liaison d'images jpg (ou autre format), voici le code que j'ai
travaillé.

Soit un champ texte NomPhoto dans la table des enregistrements à
afficher dans un formulaire qui contient les noms des images à
afficher ; on utilise NomPhoto pour pointer sur les images présentes
dans le répertoire où se situe la base avec le nom du fichier de
l'image à afficher dans un objet image ayant pour nom image (on doit
mettre un nom d'une photo par défaut dans le formulaire en mode
création) :

Private Sub NomPhoto_AfterUpdate()
Dim strChemin As String, CPF As String, intSlashLoc As String
CPF = CurrentProject.FullName
intSlashLoc = InStrRev(CPF, "", Len(CPF))
On Error Resume Next
If IsNull(Me!NomPhoto) Then
Me!Photo.Picture = ""
Else
strChemin = Left(CPF, intSlashLoc) & Me!NomPhoto
Me!Photo.Picture = strChemin
End If
End Sub

et rajouter dans le formulaire en activation le code :

Private Sub Form_Current()
NomPhoto_AfterUpdate
end sub

L'objet de ma question n'est donc plus de savoir comment traiter les
images dans la base mais de savoir comment faire pour créer un bouton
qui ouvrira l'arborescence du disque dur via la variable strChemin
déjà prête et afficher comme dans l'explorateur (ou en émulant
l'explorateur) les images présentes dans le répertoire strChemin. On
clique sur l'image et hop la chaîne de caractère du nom de fichier va
se mettre dans l'enregistrement en cours dans le champ NomPhoto.

Ca parait simple mais j'ai déjà fouillé un peu dans le forum sans
trouver un bon os à ronger donc demande d'avis à la population !


"Raymond [mvp]" wrote in message news:...
Bonsoir.

Tu trouveras les liens dans le texte ci-dessous.

je te fais les remarques que nous faisons à tout le monde au
sujet des images insérées et même liées concernant le grossissement de la
base access:

Il ne faut pas insérer une image dans un formulaire car la base augmente à
une vitesse vertigineuse, ni la lier d'ailleurs car la base augmente aussi
mais dans une moindre mesure.
Il faut donc placer le chemin de l'image dans un champ texte et afficher
l'image soi-même au moment opportun.
Pour pouvoir afficher des fichiers jpg, il faut que microsoft photo editor
soit installé.
Tu trouveras une base exemple avec un formulaire permettant l'affichage et
le redimentionnement de l'image ainsi qu'un état permettant d'afficher les
images correspondantes à chaque enregistrement de la table. sur:
http://access.seneque.free.fr/bases_exemples.htm" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://access.seneque.free.fr/bases_exemples.htm N° 38
Tu pourras lire aussi les fiches
ACC2000 : Procédure pour afficher une image à partir d'un dossier dans un
formulaire: http://support.microsoft.com/?id!0100
ACC2000: How to Display an Image from a Folder in a Form or in a Report
http://support.microsoft.com/default.aspx?scid=kb;en-us;210100
ACC : pourquoi les objets OLE font augmenter la taille des bases de données:
http://support.microsoft.com/?id3151
WORD2000 : Le publipostage
http://support.microsoft.com/default.aspx?scid=kb;FR;212329
WORD2000 : Insertion d'une image ou d'un logo dans un état ou étiquettes
http://support.microsoft.com/default.aspx?scid=kb;FR;212078

De plus si tu veux exporter une image access dans word il ne faut pas passer
par un controle image pour afficher l'image mais par un cadre indépendant.
tu trouveras des explications et des exemples sur :
http://access.seneque.free.fr/copie_objets_ole.htm" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://access.seneque.free.fr/copie_objets_ole.htm


--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Fredonnon" a écrit dans le message de
news:
Bonjour,

J'aimerais avoir un petit coup de pouce pour un problème que je me
pose.

J'ai une table qui contient des noms de fichiers permettant de pointer
sur des fichiers jpg pour les afficher dans un formulaire.

J'aimerais créer un bouton qui ouvre le répertoire images dédié et
permette à l'utilisateur de choisir une image déjà existante. En la
choisissant, ce nom de fichier s'intégrerait dans l'enregistrement en
cours dans le champ utilisé pour appeler l'image.

Avez-vous des conseils ou des liens vers des URL pouvant me permettre
de comprendre comment faire SVP ?




Avatar
Raymond [mvp]
Bonjour.

L'objet de ma question n'est donc plus de savoir comment traiter les
images dans la base mais de savoir comment faire pour créer un bouton
qui ouvrira l'arborescence du disque dur via la variable strChemin
déjà prête et afficher comme dans l'explorateur (ou en émulant
l'explorateur) les images présentes dans le répertoire strChemin


dans l'api openfile, que tu as dans ma base exemple, tu indiques le chemin
par défaut. dans cette valeur tu indiques la variable au lieu d'une valeur
et le openfile ouvrira le répertoire indiqué.
pour la création du bouton je pense que tu sais faire ?
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Fredonnon" a écrit dans le message de
news:
Bonjour Raymond, gardien du temple du savoir ;o)

Tout d'abord mes meilleurs voeux pour toi (et pour le forum !) en
cette nouvelle année. C'est moi que tu avais aidé pour la base
'Vidéothèque' que je constitue si tu te rappelles.

Tu m'avais bien recommandé de ne pas insérer en OLE les images de
chaque film et j'ai cherché un peu, notamment dans les URL que tu
listes ci-dessous. J'ai résolu le problème.

Pour info, pour ceux qui se creusent la tête sur ce problème de
liaison d'images jpg (ou autre format), voici le code que j'ai
travaillé.

Soit un champ texte NomPhoto dans la table des enregistrements à
afficher dans un formulaire qui contient les noms des images à
afficher ; on utilise NomPhoto pour pointer sur les images présentes
dans le répertoire où se situe la base avec le nom du fichier de
l'image à afficher dans un objet image ayant pour nom image (on doit
mettre un nom d'une photo par défaut dans le formulaire en mode
création) :

Private Sub NomPhoto_AfterUpdate()
Dim strChemin As String, CPF As String, intSlashLoc As String
CPF = CurrentProject.FullName
intSlashLoc = InStrRev(CPF, "", Len(CPF))
On Error Resume Next
If IsNull(Me!NomPhoto) Then
Me!Photo.Picture = ""
Else
strChemin = Left(CPF, intSlashLoc) & Me!NomPhoto
Me!Photo.Picture = strChemin
End If
End Sub

et rajouter dans le formulaire en activation le code :

Private Sub Form_Current()
NomPhoto_AfterUpdate
end sub

L'objet de ma question n'est donc plus de savoir comment traiter les
images dans la base mais de savoir comment faire pour créer un bouton
qui ouvrira l'arborescence du disque dur via la variable strChemin
déjà prête et afficher comme dans l'explorateur (ou en émulant
l'explorateur) les images présentes dans le répertoire strChemin. On
clique sur l'image et hop la chaîne de caractère du nom de fichier va
se mettre dans l'enregistrement en cours dans le champ NomPhoto.

Ca parait simple mais j'ai déjà fouillé un peu dans le forum sans
trouver un bon os à ronger donc demande d'avis à la population !


Avatar
fredonnon
A quelle base exemple fais tu référence stp ?

Pour le bouton, je n'arrive pas non plus à savoir comment récupérer la
sélection d'un fichier dans une émulation de l'explorateur ppur la
transférer dans un champ de l'enregistrement en cours

"Raymond [mvp]" wrote in message news:<#...
Bonjour.

L'objet de ma question n'est donc plus de savoir comment traiter les
images dans la base mais de savoir comment faire pour créer un bouton
qui ouvrira l'arborescence du disque dur via la variable strChemin
déjà prête et afficher comme dans l'explorateur (ou en émulant
l'explorateur) les images présentes dans le répertoire strChemin


dans l'api openfile, que tu as dans ma base exemple, tu indiques le chemin
par défaut. dans cette valeur tu indiques la variable au lieu d'une valeur
et le openfile ouvrira le répertoire indiqué.
pour la création du bouton je pense que tu sais faire ?
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Fredonnon" a écrit dans le message de
news:
Bonjour Raymond, gardien du temple du savoir ;o)

Tout d'abord mes meilleurs voeux pour toi (et pour le forum !) en
cette nouvelle année. C'est moi que tu avais aidé pour la base
'Vidéothèque' que je constitue si tu te rappelles.

Tu m'avais bien recommandé de ne pas insérer en OLE les images de
chaque film et j'ai cherché un peu, notamment dans les URL que tu
listes ci-dessous. J'ai résolu le problème.

Pour info, pour ceux qui se creusent la tête sur ce problème de
liaison d'images jpg (ou autre format), voici le code que j'ai
travaillé.

Soit un champ texte NomPhoto dans la table des enregistrements à
afficher dans un formulaire qui contient les noms des images à
afficher ; on utilise NomPhoto pour pointer sur les images présentes
dans le répertoire où se situe la base avec le nom du fichier de
l'image à afficher dans un objet image ayant pour nom image (on doit
mettre un nom d'une photo par défaut dans le formulaire en mode
création) :

Private Sub NomPhoto_AfterUpdate()
Dim strChemin As String, CPF As String, intSlashLoc As String
CPF = CurrentProject.FullName
intSlashLoc = InStrRev(CPF, "", Len(CPF))
On Error Resume Next
If IsNull(Me!NomPhoto) Then
Me!Photo.Picture = ""
Else
strChemin = Left(CPF, intSlashLoc) & Me!NomPhoto
Me!Photo.Picture = strChemin
End If
End Sub

et rajouter dans le formulaire en activation le code :

Private Sub Form_Current()
NomPhoto_AfterUpdate
end sub

L'objet de ma question n'est donc plus de savoir comment traiter les
images dans la base mais de savoir comment faire pour créer un bouton
qui ouvrira l'arborescence du disque dur via la variable strChemin
déjà prête et afficher comme dans l'explorateur (ou en émulant
l'explorateur) les images présentes dans le répertoire strChemin. On
clique sur l'image et hop la chaîne de caractère du nom de fichier va
se mettre dans l'enregistrement en cours dans le champ NomPhoto.

Ca parait simple mais j'ai déjà fouillé un peu dans le forum sans
trouver un bon os à ronger donc demande d'avis à la population !




Avatar
JJ
Bonjour,
Comme j'ai eu moi même à traiter cette question, voici mon résultat.
Merci à ceux qui m'ont fourni ce code.

Sur clic ou double clic d'un bouton, j'appelle une fonction Openfile que je
traite :
- début de procédure -----------------------
Private Sub Courrier_DblClick(Cancel As Integer)
Dim X, I, J
X = OpenFile(REPERT & "Modeles")
If Len(X) > 0 Then
I = InStr(1, X, "")
Do Until I = 0
J = I: I = InStr(I + 1, X, "")
Loop
X = Right(X, Len(X) - J): X = Left(X, InStr(1, X, ".") - 1)
End If
Courrier = IIf(Len(X) > 0, X, Courrier)
End Sub
- fin de procédure -----------------------

Ensuite je crée un nouveau module (qu'il faut impérativement nommer
modApiOpenFile)
dans lequel je colle le code suivant :

- début de module -----------------------
Option Compare Database
Option Explicit

Public Type OpenFileName
lStructSize As Long
hwndOwner As Long
Instance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustomFilter 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

Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias
"GetOpenFileNameA" (pOpenfilename As OpenFileName) As Long

Public Const OFN_AllowMultiSelect = &H200
Public Const OFN_CreatePrompt = &H2000
Public Const OFN_EnableHook = &H20
Public Const OFN_EnableTemplate = &H40
Public Const OFN_EnableTemplateHandle = &H80
Public Const OFN_EXPLORER = &H80000
Public Const OFN_ExtensionDifferent = &H400
Public Const OFN_FileMustExist = &H1000
Public Const OFN_HideReadOnly = &H4
Public Const OFN_LongNames = &H200000
Public Const OFN_NoChangeDir = &H8
Public Const OFN_NoDeReferenceLinks = &H100000
Public Const OFN_NoLongNames = &H40000
Public Const OFN_NoNetWorkButton = &H20000
Public Const OFN_NoReadOnlyReturn = &H8000
Public Const OFN_NoTestFileCreate = &H10000
Public Const OFN_NoValiDate = &H100
Public Const OFN_OverWritePrompt = &H2
Public Const OFN_PathMustExist = &H800
Public Const OFN_ReadOnly = &H1
Public Const OFN_ShareAware = &H4000
Public Const OFN_ShareFallThrough = 2
Public Const OFN_ShareNoWarn = 1
Public Const OFN_ShareWarn = 0
Public Const OFN_ShowHelp = &H10

Global Dialogue As OpenFileName

Public strFiltre As String
Public strFile As String
Public strNomFile As String
Public RetVal As Long

Public Function OpenFile(strInitialDir As String) As String
OpenFile = ""
strFiltre = "Fichiers Word" & Chr$(0) & "*.doc;*txt" & Chr$(0) & _
"Fichiers Access" & Chr$(0) & "*.mdb" & Chr$(0) & _
"Fichiers Excel" & Chr$(0) & "*.xls" & Chr$(0) & _
"Tous les fichiers" & Chr$(0) & "*.*"
With Dialogue
.lStructSize = Len(Dialogue)
.lpstrFilter = strFiltre
.lpstrFile = Space(254)
.nMaxFile = 255
.lpstrFileTitle = Space(254)
.nMaxFileTitle = 255
.lpstrInitialDir = strInitialDir
.lpstrTitle = "Recherche d'un fichier"
.Flags = 6148 Or OFN_AllowMultiSelect Or OFN_LongNames Or
OFN_EXPLORER
End With

RetVal = GetOpenFileName(Dialogue)

If RetVal >= 1 Then
OpenFile = Dialogue.lpstrFile
Else
OpenFile = ""
Exit Function
End If
End Function
- début de module -----------------------

Ca peut être complété avec une fonction SaveFile que je ne retrouve pas pour
l'instant

voir aussi le lien
http://www.mvps.org/accessfr/apis/api0001.htm

JJ
Avatar
Raymond [mvp]
Bonsoir.

télécharge la base : http://access.seneque.free.fr/bases_exemples.htm" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://access.seneque.free.fr/bases_exemples.htm N° 38
tu trouveras l'openfile, la mise dans la table du nom de l'image, son
affichage et son redimentionnement.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Fredonnon" a écrit dans le message de
news:
A quelle base exemple fais tu référence stp ?

Pour le bouton, je n'arrive pas non plus à savoir comment récupérer la
sélection d'un fichier dans une émulation de l'explorateur ppur la
transférer dans un champ de l'enregistrement en cours
!


Avatar
fredonnon
Merci je vais essayer !

"JJ" wrote in message news:<#...
Bonjour,
Comme j'ai eu moi même à traiter cette question, voici mon résultat.
Merci à ceux qui m'ont fourni ce code.

Sur clic ou double clic d'un bouton, j'appelle une fonction Openfile que je
traite :
- début de procédure -----------------------
Private Sub Courrier_DblClick(Cancel As Integer)
Dim X, I, J
X = OpenFile(REPERT & "Modeles")
If Len(X) > 0 Then
I = InStr(1, X, "")
Do Until I = 0
J = I: I = InStr(I + 1, X, "")
Loop
X = Right(X, Len(X) - J): X = Left(X, InStr(1, X, ".") - 1)
End If
Courrier = IIf(Len(X) > 0, X, Courrier)
End Sub
- fin de procédure -----------------------

Ensuite je crée un nouveau module (qu'il faut impérativement nommer
modApiOpenFile)
dans lequel je colle le code suivant :

- début de module -----------------------
Option Compare Database
Option Explicit

Public Type OpenFileName
lStructSize As Long
hwndOwner As Long
Instance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustomFilter 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

Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias
"GetOpenFileNameA" (pOpenfilename As OpenFileName) As Long

Public Const OFN_AllowMultiSelect = &H200
Public Const OFN_CreatePrompt = &H2000
Public Const OFN_EnableHook = &H20
Public Const OFN_EnableTemplate = &H40
Public Const OFN_EnableTemplateHandle = &H80
Public Const OFN_EXPLORER = &H80000
Public Const OFN_ExtensionDifferent = &H400
Public Const OFN_FileMustExist = &H1000
Public Const OFN_HideReadOnly = &H4
Public Const OFN_LongNames = &H200000
Public Const OFN_NoChangeDir = &H8
Public Const OFN_NoDeReferenceLinks = &H100000
Public Const OFN_NoLongNames = &H40000
Public Const OFN_NoNetWorkButton = &H20000
Public Const OFN_NoReadOnlyReturn = &H8000
Public Const OFN_NoTestFileCreate = &H10000
Public Const OFN_NoValiDate = &H100
Public Const OFN_OverWritePrompt = &H2
Public Const OFN_PathMustExist = &H800
Public Const OFN_ReadOnly = &H1
Public Const OFN_ShareAware = &H4000
Public Const OFN_ShareFallThrough = 2
Public Const OFN_ShareNoWarn = 1
Public Const OFN_ShareWarn = 0
Public Const OFN_ShowHelp = &H10

Global Dialogue As OpenFileName

Public strFiltre As String
Public strFile As String
Public strNomFile As String
Public RetVal As Long

Public Function OpenFile(strInitialDir As String) As String
OpenFile = ""
strFiltre = "Fichiers Word" & Chr$(0) & "*.doc;*txt" & Chr$(0) & _
"Fichiers Access" & Chr$(0) & "*.mdb" & Chr$(0) & _
"Fichiers Excel" & Chr$(0) & "*.xls" & Chr$(0) & _
"Tous les fichiers" & Chr$(0) & "*.*"
With Dialogue
.lStructSize = Len(Dialogue)
.lpstrFilter = strFiltre
.lpstrFile = Space(254)
.nMaxFile = 255
.lpstrFileTitle = Space(254)
.nMaxFileTitle = 255
.lpstrInitialDir = strInitialDir
.lpstrTitle = "Recherche d'un fichier"
.Flags = 6148 Or OFN_AllowMultiSelect Or OFN_LongNames Or
OFN_EXPLORER
End With

RetVal = GetOpenFileName(Dialogue)

If RetVal >= 1 Then
OpenFile = Dialogue.lpstrFile
Else
OpenFile = ""
Exit Function
End If
End Function
- début de module -----------------------

Ca peut être complété avec une fonction SaveFile que je ne retrouve pas pour
l'instant

voir aussi le lien
http://www.mvps.org/accessfr/apis/api0001.htm

JJ