Pb référence pour FileDialog(msoFileDialogFilePicker)
2 réponses
AA
Bonjour à tous,
j'ai fait un prog. ds lequel j'utilise le code
FileDialog(msoFileDialogFilePicker) pour ouvrir une boîte de dialogue pour
récupérer le chemin du fichier sélectionné. Le programme est fait sous
Access XP. Aucun pb sur les PC avec Access XP mais dès que je veux
l'utiliser sur des postes qui ont seulement le runtime Access le prog.
plante au lancement du bout de code (clic sur bouton).
J'ai vérifié les références du prog. et la présence des fichiers concernés
sur les postes avec runtime mais tout semble OK.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Raymond [mvp]
Bonjour.
pour une raison de compatibilité entre toutes les versions, je te conseillerais d'utiliser plutôt l'api openfile qui a les mêmes fonctionnalités. voir exemple sur la page : http://officesystem.access.free.fr/apiopenfile.htm
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://OfficeSystem.Access.free.fr/runtime/ http://users.skynet.be/mpfa/ pour débuter sur le forum
"AA" a écrit dans le message de news: 436090d1$0$27410$
Bonjour à tous,
j'ai fait un prog. ds lequel j'utilise le code FileDialog(msoFileDialogFilePicker) pour ouvrir une boîte de dialogue pour récupérer le chemin du fichier sélectionné. Le programme est fait sous Access XP. Aucun pb sur les PC avec Access XP mais dès que je veux l'utiliser sur des postes qui ont seulement le runtime Access le prog. plante au lancement du bout de code (clic sur bouton). J'ai vérifié les références du prog. et la présence des fichiers concernés sur les postes avec runtime mais tout semble OK.
Est-ce que qqu'un a une idée ?
Merci d'avance.
Anthony.
Bonjour.
pour une raison de compatibilité entre toutes les versions, je te
conseillerais d'utiliser plutôt l'api openfile qui a les mêmes
fonctionnalités.
voir exemple sur la page :
http://officesystem.access.free.fr/apiopenfile.htm
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum
"AA" <aa@wanadoo.fr> a écrit dans le message de news:
436090d1$0$27410$8fcfb975@news.wanadoo.fr...
Bonjour à tous,
j'ai fait un prog. ds lequel j'utilise le code
FileDialog(msoFileDialogFilePicker) pour ouvrir une boîte de dialogue pour
récupérer le chemin du fichier sélectionné. Le programme est fait sous
Access XP. Aucun pb sur les PC avec Access XP mais dès que je veux
l'utiliser sur des postes qui ont seulement le runtime Access le prog.
plante au lancement du bout de code (clic sur bouton).
J'ai vérifié les références du prog. et la présence des fichiers concernés
sur les postes avec runtime mais tout semble OK.
pour une raison de compatibilité entre toutes les versions, je te conseillerais d'utiliser plutôt l'api openfile qui a les mêmes fonctionnalités. voir exemple sur la page : http://officesystem.access.free.fr/apiopenfile.htm
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://OfficeSystem.Access.free.fr/runtime/ http://users.skynet.be/mpfa/ pour débuter sur le forum
"AA" a écrit dans le message de news: 436090d1$0$27410$
Bonjour à tous,
j'ai fait un prog. ds lequel j'utilise le code FileDialog(msoFileDialogFilePicker) pour ouvrir une boîte de dialogue pour récupérer le chemin du fichier sélectionné. Le programme est fait sous Access XP. Aucun pb sur les PC avec Access XP mais dès que je veux l'utiliser sur des postes qui ont seulement le runtime Access le prog. plante au lancement du bout de code (clic sur bouton). J'ai vérifié les références du prog. et la présence des fichiers concernés sur les postes avec runtime mais tout semble OK.
Est-ce que qqu'un a une idée ?
Merci d'avance.
Anthony.
Xavier HUE
Bonjour Anthony,
Tu n'as pas pu vérifier l'état des Références dans ta base ouverte sur les PC ne disposant que du RunTime, puisque dans ce contexte d'exécution, on ne peut pas accéder à VBE. Tes références peuvent être bonnes sur le PC de développement, mais pas sur les PC des utilisateurs.
Le fait que les fichiers existent sur le PC utilisateur n'implique pas forcément que: 1) Ces fichiers sont inscrits au registre de Windows 2) Ces fichiers sont correctement trouvés par Access
J'ai, de temps en temps, des problèmes similaires. Copier une base d'un PC à l'autre ne garantie pas son bon fonctionnement sur le PC destination. Il peut être nécessaire d'intégrer la gestion des références dans une procédure VBA, de façon à les rétablir si celles-ci sont rompues.
Voici comment j'ai procédé dans une de mes applications. Inspiré d'idées pêchées sur différents sites, dont certains des principaux contributeurs de ce forum trés riche.
Exécuter la fonction VerifierReference au démarrage de ton appli. Si la fonction retourne False, une référence n'a pas pu être rétablie.
Cette fonction lit un fichier texte contenant la description des Références nécessaires. Ce fichier peut être générée par la fonction ListerReference. Le fichier porte le même nom que la base de données qui exécute ce code, avec l'extension "ref".
Bon courage.
********************************* Function VerifierReference() As Boolean Dim objRef As Reference 'Reference en cours traitement Dim objApp As Application Dim strPathDb As String 'Chemin de la base Programme (Base courante) Dim strNameDb As String 'Nom de la base Programme (Base courante) Dim strNameLstRef As String 'Nom complet du fichier contenant la liste des Références à établir Dim intFileNumber As Integer 'N° de fichier pour OPEN Dim strRefGUID As String 'N° GUID de la Référence à établir Dim intRefMajor As Integer 'N° Major Dim intRefMinor As Integer 'N° Minor Dim strRefFullPath As String 'Chemin complet du fichier correspondant à la Référence à établir Dim strRefName As String 'Nom interne de la Référence à établir Dim booStatus As Boolean 'Vrai si la Référence à établir existe et n'est pas rompue Dim strMsg As String
On Error Resume Next VBA.Err.Number = 0
Access.Application.SysCmd acSysCmdSetStatus, "Vérification des Références..."
'Déterminer le fichier texte contenant les Références à établir strNameDb = VBA.Dir(CurrentDb.Name) strPathDb = VBA.Left(CurrentDb.Name, VBA.Len(CurrentDb.Name) - VBA.Len(strNameDb)) strNameLstRef = strPathDb & VBA.Left(strNameDb, Len(strNameDb) - 3) & "ref"
Access.Application.SysCmd acSysCmdSetStatus, "Recherche la liste des Références..." If VBA.Err.Number <> 0 Then VBA.MsgBox "Impossible de déterminer le nom du fichier des Références." & vbCrLf & vbCrLf & _ Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication GoTo VerifierReference_Fin End If
Set objApp = Access.Application If VBA.Err.Number <> 0 Then VBA.MsgBox "Impossible d'accéder à l'objet Access.Application." & vbCrLf & vbCrLf & _ Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication GoTo VerifierReference_Fin End If
Access.Application.SysCmd acSysCmdSetStatus, "Ouverture de la liste des Références..." intFileNumber = VBA.FreeFile() Open strNameLstRef For Input As intFileNumber If VBA.Err.Number <> 0 Then VBA.MsgBox "Impossible d'ouvrir le fichier des Références '" & strNameLstRef & "'." & vbCrLf & vbCrLf & _ Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication GoTo VerifierReference_Fin End If
If VBA.EOF(intFileNumber) Then VBA.MsgBox "Le fichier des Références '" & strNameLstRef & "' est vide." & vbCrLf & vbCrLf & _ Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication GoTo VerifierReference_Fin End If
Do Until EOF(intFileNumber) 'Lire les Infos de la Référence à établir Input #intFileNumber, strRefGUID, intRefMajor, intRefMinor, strRefFullPath, strRefName If VBA.Err.Number <> 0 Then VBA.MsgBox "Le fichier des Références '" & strNameLstRef & "' est incomplet." & vbCrLf & vbCrLf & _ Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication GoTo VerifierReference_Fin End If
Access.Application.SysCmd acSysCmdSetStatus, "Traitement Référence '" & strRefName & "'..." 'Chercher Référence booStatus = False For Each objRef In objApp.References
If objRef.Guid = strRefGUID Then If Not (objRef.IsBroken) Then booStatus = True Exit For End If
objApp.References.Remove objRef Exit For End If Next objRef
If Not (booStatus) Then objApp.References.AddFromGuid strRefGUID, intRefMajor, intRefMinor End If
Loop
VerifierReference = True
VerifierReference_Fin: Close #intFileNumber Set objApp = Nothing Access.Application.SysCmd acSysCmdClearStatus Exit Function
VerifierReference_Err: VBA.MsgBox "Impossible d'établir la référence:" & _ vbCrLf & strRefGUID & _ vbCrLf & strRefName & _ vbCrLf & strRefFullPath & _ "Impossible de continuer sans cette Référence.", _ vbCritical + vbOKOnly, SMPGM_NomApplication
VerifierReference = False Resume VerifierReference_Fin End Function
Sub ListerReference() Dim objRef As Reference Dim objApp As Application Dim strPathDb As String Dim strNameDb As String Dim strNameRef As String Dim intFileNumber As Integer
intFileNumber = FreeFile() Open strNameRef For Output As intFileNumber
For Each objRef In objApp.References Write #intFileNumber, objRef.Guid, objRef.Major, objRef.Minor, objRef.FullPath, objRef.Name Next
Close #intFileNumber
Set objApp = Nothing End Sub
Bonjour à tous,
j'ai fait un prog. ds lequel j'utilise le code FileDialog(msoFileDialogFilePicker) pour ouvrir une boîte de dialogue pour récupérer le chemin du fichier sélectionné. Le programme est fait sous Access XP. Aucun pb sur les PC avec Access XP mais dès que je veux l'utiliser sur des postes qui ont seulement le runtime Access le prog. plante au lancement du bout de code (clic sur bouton). J'ai vérifié les références du prog. et la présence des fichiers concernés sur les postes avec runtime mais tout semble OK.
Est-ce que qqu'un a une idée ?
Merci d'avance.
Anthony.
Bonjour Anthony,
Tu n'as pas pu vérifier l'état des Références dans ta base ouverte sur les
PC ne disposant que du RunTime, puisque dans ce contexte d'exécution, on ne
peut pas accéder à VBE. Tes références peuvent être bonnes sur le PC de
développement, mais pas sur les PC des utilisateurs.
Le fait que les fichiers existent sur le PC utilisateur n'implique pas
forcément que:
1) Ces fichiers sont inscrits au registre de Windows
2) Ces fichiers sont correctement trouvés par Access
J'ai, de temps en temps, des problèmes similaires.
Copier une base d'un PC à l'autre ne garantie pas son bon fonctionnement sur
le PC destination.
Il peut être nécessaire d'intégrer la gestion des références dans une
procédure VBA, de façon à les rétablir si celles-ci sont rompues.
Voici comment j'ai procédé dans une de mes applications.
Inspiré d'idées pêchées sur différents sites, dont certains des principaux
contributeurs de ce forum trés riche.
Exécuter la fonction VerifierReference au démarrage de ton appli.
Si la fonction retourne False, une référence n'a pas pu être rétablie.
Cette fonction lit un fichier texte contenant la description des Références
nécessaires.
Ce fichier peut être générée par la fonction ListerReference.
Le fichier porte le même nom que la base de données qui exécute ce code,
avec l'extension "ref".
Bon courage.
*********************************
Function VerifierReference() As Boolean
Dim objRef As Reference 'Reference en cours traitement
Dim objApp As Application
Dim strPathDb As String 'Chemin de la base Programme
(Base courante)
Dim strNameDb As String 'Nom de la base Programme
(Base courante)
Dim strNameLstRef As String 'Nom complet du fichier
contenant la liste des Références à établir
Dim intFileNumber As Integer 'N° de fichier pour OPEN
Dim strRefGUID As String 'N° GUID de la Référence à établir
Dim intRefMajor As Integer 'N° Major
Dim intRefMinor As Integer 'N° Minor
Dim strRefFullPath As String 'Chemin complet du fichier
correspondant à la Référence à établir
Dim strRefName As String 'Nom interne de la Référence à
établir
Dim booStatus As Boolean 'Vrai si la Référence à établir
existe et n'est pas rompue
Dim strMsg As String
On Error Resume Next
VBA.Err.Number = 0
Access.Application.SysCmd acSysCmdSetStatus, "Vérification des
Références..."
'Déterminer le fichier texte contenant les Références à établir
strNameDb = VBA.Dir(CurrentDb.Name)
strPathDb = VBA.Left(CurrentDb.Name, VBA.Len(CurrentDb.Name) -
VBA.Len(strNameDb))
strNameLstRef = strPathDb & VBA.Left(strNameDb, Len(strNameDb) - 3) & "ref"
Access.Application.SysCmd acSysCmdSetStatus, "Recherche la liste des
Références..."
If VBA.Err.Number <> 0 Then
VBA.MsgBox "Impossible de déterminer le nom du fichier des Références."
& vbCrLf & vbCrLf & _
Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication
GoTo VerifierReference_Fin
End If
Set objApp = Access.Application
If VBA.Err.Number <> 0 Then
VBA.MsgBox "Impossible d'accéder à l'objet Access.Application." & vbCrLf
& vbCrLf & _
Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication
GoTo VerifierReference_Fin
End If
Access.Application.SysCmd acSysCmdSetStatus, "Ouverture de la liste des
Références..."
intFileNumber = VBA.FreeFile()
Open strNameLstRef For Input As intFileNumber
If VBA.Err.Number <> 0 Then
VBA.MsgBox "Impossible d'ouvrir le fichier des Références '" &
strNameLstRef & "'." & vbCrLf & vbCrLf & _
Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication
GoTo VerifierReference_Fin
End If
If VBA.EOF(intFileNumber) Then
VBA.MsgBox "Le fichier des Références '" & strNameLstRef & "' est vide."
& vbCrLf & vbCrLf & _
Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication
GoTo VerifierReference_Fin
End If
Do Until EOF(intFileNumber)
'Lire les Infos de la Référence à établir
Input #intFileNumber, strRefGUID, intRefMajor, intRefMinor,
strRefFullPath, strRefName
If VBA.Err.Number <> 0 Then
VBA.MsgBox "Le fichier des Références '" & strNameLstRef & "' est
incomplet." & vbCrLf & vbCrLf & _
Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication
GoTo VerifierReference_Fin
End If
Access.Application.SysCmd acSysCmdSetStatus, "Traitement Référence '" &
strRefName & "'..."
'Chercher Référence
booStatus = False
For Each objRef In objApp.References
If objRef.Guid = strRefGUID Then
If Not (objRef.IsBroken) Then
booStatus = True
Exit For
End If
objApp.References.Remove objRef
Exit For
End If
Next objRef
If Not (booStatus) Then
objApp.References.AddFromGuid strRefGUID, intRefMajor, intRefMinor
End If
Loop
VerifierReference = True
VerifierReference_Fin:
Close #intFileNumber
Set objApp = Nothing
Access.Application.SysCmd acSysCmdClearStatus
Exit Function
VerifierReference_Err:
VBA.MsgBox "Impossible d'établir la référence:" & _
vbCrLf & strRefGUID & _
vbCrLf & strRefName & _
vbCrLf & strRefFullPath & _
"Impossible de continuer sans cette Référence.", _
vbCritical + vbOKOnly, SMPGM_NomApplication
VerifierReference = False
Resume VerifierReference_Fin
End Function
Sub ListerReference()
Dim objRef As Reference
Dim objApp As Application
Dim strPathDb As String
Dim strNameDb As String
Dim strNameRef As String
Dim intFileNumber As Integer
intFileNumber = FreeFile()
Open strNameRef For Output As intFileNumber
For Each objRef In objApp.References
Write #intFileNumber, objRef.Guid, objRef.Major, objRef.Minor,
objRef.FullPath, objRef.Name
Next
Close #intFileNumber
Set objApp = Nothing
End Sub
Bonjour à tous,
j'ai fait un prog. ds lequel j'utilise le code
FileDialog(msoFileDialogFilePicker) pour ouvrir une boîte de dialogue pour
récupérer le chemin du fichier sélectionné. Le programme est fait sous
Access XP. Aucun pb sur les PC avec Access XP mais dès que je veux
l'utiliser sur des postes qui ont seulement le runtime Access le prog.
plante au lancement du bout de code (clic sur bouton).
J'ai vérifié les références du prog. et la présence des fichiers concernés
sur les postes avec runtime mais tout semble OK.
Tu n'as pas pu vérifier l'état des Références dans ta base ouverte sur les PC ne disposant que du RunTime, puisque dans ce contexte d'exécution, on ne peut pas accéder à VBE. Tes références peuvent être bonnes sur le PC de développement, mais pas sur les PC des utilisateurs.
Le fait que les fichiers existent sur le PC utilisateur n'implique pas forcément que: 1) Ces fichiers sont inscrits au registre de Windows 2) Ces fichiers sont correctement trouvés par Access
J'ai, de temps en temps, des problèmes similaires. Copier une base d'un PC à l'autre ne garantie pas son bon fonctionnement sur le PC destination. Il peut être nécessaire d'intégrer la gestion des références dans une procédure VBA, de façon à les rétablir si celles-ci sont rompues.
Voici comment j'ai procédé dans une de mes applications. Inspiré d'idées pêchées sur différents sites, dont certains des principaux contributeurs de ce forum trés riche.
Exécuter la fonction VerifierReference au démarrage de ton appli. Si la fonction retourne False, une référence n'a pas pu être rétablie.
Cette fonction lit un fichier texte contenant la description des Références nécessaires. Ce fichier peut être générée par la fonction ListerReference. Le fichier porte le même nom que la base de données qui exécute ce code, avec l'extension "ref".
Bon courage.
********************************* Function VerifierReference() As Boolean Dim objRef As Reference 'Reference en cours traitement Dim objApp As Application Dim strPathDb As String 'Chemin de la base Programme (Base courante) Dim strNameDb As String 'Nom de la base Programme (Base courante) Dim strNameLstRef As String 'Nom complet du fichier contenant la liste des Références à établir Dim intFileNumber As Integer 'N° de fichier pour OPEN Dim strRefGUID As String 'N° GUID de la Référence à établir Dim intRefMajor As Integer 'N° Major Dim intRefMinor As Integer 'N° Minor Dim strRefFullPath As String 'Chemin complet du fichier correspondant à la Référence à établir Dim strRefName As String 'Nom interne de la Référence à établir Dim booStatus As Boolean 'Vrai si la Référence à établir existe et n'est pas rompue Dim strMsg As String
On Error Resume Next VBA.Err.Number = 0
Access.Application.SysCmd acSysCmdSetStatus, "Vérification des Références..."
'Déterminer le fichier texte contenant les Références à établir strNameDb = VBA.Dir(CurrentDb.Name) strPathDb = VBA.Left(CurrentDb.Name, VBA.Len(CurrentDb.Name) - VBA.Len(strNameDb)) strNameLstRef = strPathDb & VBA.Left(strNameDb, Len(strNameDb) - 3) & "ref"
Access.Application.SysCmd acSysCmdSetStatus, "Recherche la liste des Références..." If VBA.Err.Number <> 0 Then VBA.MsgBox "Impossible de déterminer le nom du fichier des Références." & vbCrLf & vbCrLf & _ Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication GoTo VerifierReference_Fin End If
Set objApp = Access.Application If VBA.Err.Number <> 0 Then VBA.MsgBox "Impossible d'accéder à l'objet Access.Application." & vbCrLf & vbCrLf & _ Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication GoTo VerifierReference_Fin End If
Access.Application.SysCmd acSysCmdSetStatus, "Ouverture de la liste des Références..." intFileNumber = VBA.FreeFile() Open strNameLstRef For Input As intFileNumber If VBA.Err.Number <> 0 Then VBA.MsgBox "Impossible d'ouvrir le fichier des Références '" & strNameLstRef & "'." & vbCrLf & vbCrLf & _ Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication GoTo VerifierReference_Fin End If
If VBA.EOF(intFileNumber) Then VBA.MsgBox "Le fichier des Références '" & strNameLstRef & "' est vide." & vbCrLf & vbCrLf & _ Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication GoTo VerifierReference_Fin End If
Do Until EOF(intFileNumber) 'Lire les Infos de la Référence à établir Input #intFileNumber, strRefGUID, intRefMajor, intRefMinor, strRefFullPath, strRefName If VBA.Err.Number <> 0 Then VBA.MsgBox "Le fichier des Références '" & strNameLstRef & "' est incomplet." & vbCrLf & vbCrLf & _ Err.Description, vbCritical + vbOKOnly, SMPGM_NomApplication GoTo VerifierReference_Fin End If
Access.Application.SysCmd acSysCmdSetStatus, "Traitement Référence '" & strRefName & "'..." 'Chercher Référence booStatus = False For Each objRef In objApp.References
If objRef.Guid = strRefGUID Then If Not (objRef.IsBroken) Then booStatus = True Exit For End If
objApp.References.Remove objRef Exit For End If Next objRef
If Not (booStatus) Then objApp.References.AddFromGuid strRefGUID, intRefMajor, intRefMinor End If
Loop
VerifierReference = True
VerifierReference_Fin: Close #intFileNumber Set objApp = Nothing Access.Application.SysCmd acSysCmdClearStatus Exit Function
VerifierReference_Err: VBA.MsgBox "Impossible d'établir la référence:" & _ vbCrLf & strRefGUID & _ vbCrLf & strRefName & _ vbCrLf & strRefFullPath & _ "Impossible de continuer sans cette Référence.", _ vbCritical + vbOKOnly, SMPGM_NomApplication
VerifierReference = False Resume VerifierReference_Fin End Function
Sub ListerReference() Dim objRef As Reference Dim objApp As Application Dim strPathDb As String Dim strNameDb As String Dim strNameRef As String Dim intFileNumber As Integer
intFileNumber = FreeFile() Open strNameRef For Output As intFileNumber
For Each objRef In objApp.References Write #intFileNumber, objRef.Guid, objRef.Major, objRef.Minor, objRef.FullPath, objRef.Name Next
Close #intFileNumber
Set objApp = Nothing End Sub
Bonjour à tous,
j'ai fait un prog. ds lequel j'utilise le code FileDialog(msoFileDialogFilePicker) pour ouvrir une boîte de dialogue pour récupérer le chemin du fichier sélectionné. Le programme est fait sous Access XP. Aucun pb sur les PC avec Access XP mais dès que je veux l'utiliser sur des postes qui ont seulement le runtime Access le prog. plante au lancement du bout de code (clic sur bouton). J'ai vérifié les références du prog. et la présence des fichiers concernés sur les postes avec runtime mais tout semble OK.