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

Pb référence pour FileDialog(msoFileDialogFilePicker)

2 réponses
Avatar
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.

Est-ce que qqu'un a une idée ?

Merci d'avance.

Anthony.

2 réponses

Avatar
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.



Avatar
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

strNameDb = Dir(CurrentDb.Name)
strPathDb = VBA.Left(CurrentDb.Name, Len(CurrentDb.Name) - Len(strNameDb))
strNameRef = strPathDb & VBA.Left(strNameDb, Len(strNameDb) - 3) & "ref"

Set objApp = Access.Application

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.