CommonDialog Problème ActiveX

Bonjour,

J'ai créé une base de donnée ACCESS il y a quelque temps avec du code VBa associé. Seulement j'étais en environnement ACCESS 2003, or maintenant à la version 2007 et 2010, mes CommonDialog pour récupérer le chemin d'un fichier par l'intermédiaire d'une boite de dialogue ne fonctionne plus.

Voici le message d'erreur correspondant :

Erreur d'exécution : 429
Un composant ActiveX ne peut pas créer d'objet.


Ce code était fonctionnel quand je l'ai fait.

Mes ligne de code correspondant :

Set CD = CreateObject("MSComDlg.CommonDialog")
With CD
    .MaxFileSize = 400
    .InitDir = "C:\"
    .CancelError = False
    .DialogTitle = "Cherchez votre fichier Parcelle"
    .Filter = "Fichiers Excel Parcelle (*.xls ; *.xlsx)|*.xls;*.xlsx| Tous les fichiers (*)| *.*"
    .FileName = ""
    .FilterIndex = 1
    .ShowOpen
If CD.FileName = "" Then
If MsgBox("Veuillez prendre votre fichier avant de continuer svp!" & Chr(10) & "Voulez-vous annuler l'importation ?", vbYesNo) = vbYes Then
        GoTo fin
    Else
        GoTo debut
    End If
End If
End With
debut3:

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,
    Votre code insere dans de l'ACCESS 2007 fonctionne sans probleme.

    A suivre
    1. Certainement mais il me manque peut être un dll ou autre chose permettant d'ouvrir l'objet CommonDialog, je pense.
      1. Re,
        Est ce que vous voyez le logo du CommonDialog sur votre formulaire?
        1. Modérateur
          Salut,

          lorsque ton code plante et que tu es dans la fenêtre de saisie du code, tu fais arrêter et tu vas ensuite regarder dans le menu outlils/référence pour voir s'il ne manque rien...
          1. Bonjour,
            c'est parce que l'objet n'est pas sur la machine.
            Il vaudrait mieux passer par une API pour utiliser directement la boite de dialogue de Windows :

            
            'Déclarer l'API dans un module 
            Private Type OPENFILENAME 
                lStructSize As Long 
                hwndOwner As Long 
                hInstance As Long 
                lpstrFilter As String 
                lpstrCustomFilter As String 
                nMaxCustFilter 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 
            
            
            ' Dans l'évènement Click d'un bouton btnSearchMyFile par exemple : 
            
            Private Sub btnSearchMyFile_Click() 
            
                Dim OFName As OPENFILENAME 
                OFName.lStructSize = Len(OFName) 
                OFName.hwndOwner = Me.hWnd 
                OFName.hInstance = Application.hWndAccessApp 
                OFName.lpstrFilter = "Fichiers Excel 2003 ou inf (*.xls)" + Chr$(0) + "*.xls" + Chr$(0) + "Fichiers Excel 2007 ou sup (*.xlsx)" + Chr$(0) + "*.xlsx"  
            
                'creer un buffer 
                OFName.lpstrFile = Space$(254) 
            
                'long max du fichier sur 255 
                OFName.nMaxFile = 255 
                 
                OFName.lpstrFileTitle = Space$(254) 
                 
                OFName.nMaxFileTitle = 255 
                'Répertoire par défault 
                OFName.lpstrInitialDir = "C:\" 
                'Le titre 
                OFName.lpstrTitle = "Exemple Olivier" 
                 
                OFName.flags = 0 
            
                'Affiche la boite de dialogue 
                If GetOpenFileName(OFName) Then 
                    MsgBox "File to Open: " + Trim$(OFName.lpstrFile) 
                Else 
                    MsgBox "Cancel " 
                End If 
            End Sub