CommonDialog Problème ActiveX

La0o34 Messages postés 14 Statut Membre -  
OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,
    Votre code insere dans de l'ACCESS 2007 fonctionne sans probleme.

    A suivre
    0
  2. La0o34 Messages postés 14 Statut Membre 1
     
    Certainement mais il me manque peut être un dll ou autre chose permettant d'ouvrir l'objet CommonDialog, je pense.
    0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,
    Est ce que vous voyez le logo du CommonDialog sur votre formulaire?
    0
  4. blux Messages postés 2045 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    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...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    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 
    
    
    
    0