IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

[VBA-A] CommonDialog


Sujet :

VBA Access

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 304
    Points : 348
    Points
    348
    Par défaut [VBA-A] CommonDialog
    Bonjour,

    j'ai repris un programme où dans plusieurs formulaires on peut ouvrir l'explorateur de fichierw Windows en cliquant sur un bouton. Le code est le même partout, mais dans un des formulaires cela ne fonctionne pas. Je clique dans le vide.

    voici le code de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    '----------------------------------------------------------
    '  Manage Inject tab
    '----------------------------------------------------------
    Private Sub btnOpen_Click()
    Dim xlApp As Excel.application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim nbSheet As Integer
    Dim frm As Form
    Dim i As Integer
     
        ' La propriété CancelError a la valeur True.
        On Error GoTo ErrHandler
        ' Définit les filtres.
     
        commonDlg.Filter = "Fichier Excel|*.xls"
     
     
        ' Spécifie le filtre par défaut.
        commonDlg.filterIndex = 2
     
        ' Affiche la boîte de dialogue Ouvrir.
        commonDlg.ShowOpen
        ' Appelle la procédure d'ouverture de fichier.
        txtPathname = commonDlg.fileName
     
       Exit Sub
     
    ErrHandler:
    ' L'utilisateur a sélectionné le bouton Annuler.
        Exit Sub
     
    End Sub
    Si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    On Error GoTo ErrHandler
    en commentaire, il plante de suite systématiquement à la 1ère ligne où il ya d'écrit commonDlg.
    Je remets le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    On Error GoTo ErrHandler
    et dès qu'il arrive sur un commondlg il passe sur le label ErrHandler

    Merci par avance pour votre aide,
    --Miss Gaëlle--

  2. #2
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Es-tu sûr d'avoir un composant CommonDialog nommé commonDlg sur ta form ? et un Button nommé btn_Open ?
    Et quelle est le message d'erreur quand ton code plante ?
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    et lorsqu'il plante, il n'y as pas de message ?

  4. #4
    Membre expert
    Avatar de Faith's Fall
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 740
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 740
    Points : 3 249
    Points
    3 249
    Par défaut
    Bon en fait, j'ai tester son programme (access), et j'ai fait un debugage, en fait dès qu'il va sur une ligne qui appel commonDlg, il se dirige sur le label ErrHandler. Au niveau du débugage il affiche:

    Propriété ou méthode non gérée par cet objet
    Pour commonDlg il y a le composant sur la fiche.

    Le problème est lié a commonDlg, sa je pense qu'il y a aucun doute.

    Je suis même partit du début en mettant simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim cDlg as CommonDialog
     
    cDlg.ShowOpen
    mais la non plus sa marche pas.


  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 304
    Points : 348
    Points
    348
    Par défaut
    Alors en fait, j'ai bien un composant nommé CommonDlg sur ma form oui.
    Quant au bouton, il s'appelle bien btnOpen.

    Quand il plante lorsque que l'étiquette d'erreur est active, il n'y a aucun message, il sort de la procédure juste, i lne se passe strictement rien.

    Si je mets le code comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    '----------------------------------------------------------
    '  Manage Inject tab
    '----------------------------------------------------------
    Private Sub btnOpen_Click()
    Dim xlApp As Excel.application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim nbSheet As Integer
    Dim frm As Form
    Dim i As Integer
     
        ' La propriété CancelError a la valeur True.
        'On Error GoTo ErrHandler
        ' Définit les filtres.
     
        commonDlg.Filter = "Fichier Excel|*.xls"
     
     
        ' Spécifie le filtre par défaut.
        commonDlg.filterIndex = 2
     
        ' Affiche la boîte de dialogue Ouvrir.
        commonDlg.ShowOpen
        ' Appelle la procédure d'ouverture de fichier.
        txtPathname = commonDlg.fileName
     
       Exit Sub
     
    'ErrHandler:
    ' L'utilisateur a sélectionné le bouton Annuler.
        'Exit Sub
     
    End Sub
    J'ai alors l'erreur 438 "Propriété ou méthode non géré par cet objet sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     commonDlg.Filter = "Fichier Excel|*.xls"
    Info supplémentaire : je suis une débutante, on ne m'a pas laisssé le choix

    [edit] Merci BWP pour ta participation Il a passé une bon partie de l'aprem à tester avec moi! [/edit]
    --Miss Gaëlle--

  6. #6
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Comprends pas !
    il semble que ton composant commondialog a un problème !
    Tu ne veux pas le remplacer par une api efficace ? Je te fais ça, si tu veux ...(avec un résultat garanti : même aspect et tout et tout...et, en plus, indépendance totale...)
    Tu dis !

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    si tu clique avec bouton droit sur la variable commonDlg.. de façon à avoir menu contextuel puis tu chois InfoExpress ou InfoParamétre et tu nous dis les résultats..

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Je n'ai pas testé pour provoquer l'erreur mais ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        commonDlg.Filter = "Fichier Excel|*.xls"
        commonDlg.filterIndex = 2
    me tracasse.

    Tu n'as qu'un filtre et tu demandes l'index 2 des filtres...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Membre expert
    Avatar de Faith's Fall
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 740
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 740
    Points : 3 249
    Points
    3 249
    Par défaut
    Citation Envoyé par AlainTech
    Je n'ai pas testé pour provoquer l'erreur mais ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        commonDlg.Filter = "Fichier Excel|*.xls"
        commonDlg.filterIndex = 2
    me tracasse.

    Tu n'as qu'un filtre et tu demandes l'index 2 des filtres...
    Exact, mais ce n'est pas sa qui pose problème car au niveau du debugueur, il s'arrete sur le premier commonDlg, cad commonDlg.Filter = "Fichier Excel|*.xls". Il ne passe pas sur commonDlg.filterIndex ...

  10. #10
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Je reviens avec ma proposition : par API, en parfaite indépendance et sans faille !
    Te fais cela au retour du restaurant si tu veux !

  11. #11
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Oui, en relisant, je m'en suis rendu compte.

    Juste pour être certain qu'on s'adresse au bon composant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.commonDlg.Filter = "Fichier Excel|*.xls"
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  12. #12
    Membre expert
    Avatar de Faith's Fall
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 740
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 740
    Points : 3 249
    Points
    3 249
    Par défaut
    Citation Envoyé par jmfmarques
    Je reviens avec ma proposition : par API, en parfaite indépendance et sans faille !
    Te fais cela au retour du restaurant si tu veux !
    Propose le code on testera

  13. #13
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    OK !
    me voilà de retour (c'était bon)
    Trente minutes de préparation et j'envoie

  14. #14
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Alors voilà !
    (si tu veux, en plus, des commentaires pas à pas, t'as qu'à demander et j'ajoute bien volontiers )

    dans une form : un bouton de commande command1 et le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    Private Sub Command1_Click()
      Dim sFile As String, choisirtitre As String, choisirfiltre As String
      choisirtitre = "Le_titre_qui_te_plait ici"
      choisirfiltre = "fichiers images (.bmp,.jpg,.gif)" + Chr$(0) + "*.bmp;*.jpg*;*.*gif;*.tiff"
      sFile = ShowMODE(Me, choisirtitre, choisirfiltre)
      If sFile = "" Then
        MsgBox "tu n'as pas choisi de fichier ! et alors ?"
        Exit Sub
      Else
       MsgBox sFile '<<<========= sFile  est ce que tu dois récupérer dans ton code
      End If
    End Sub
     
    Public Function ShowMODE(forma As Form, queltitre, quelfiltre) As String
      Dim OFName As OPENFILENAME
      OFName.lStructSize = Len(OFName): OFName.hwndOwner = forma.hWnd
      OFName.hInstance = App.hInstance: OFName.lpstrFilter = quelfiltre
      OFName.lpstrFile = Space$(254)
      OFName.nMaxFile = 255
      OFName.lpstrFileTitle = Space$(254)
      OFName.nMaxFileTitle = 255
      If lastpath = "" Then lastpath = "c:\"
      OFName.lpstrInitialDir = lastpath
      OFName.lpstrTitle = queltitre
      OFName.Flags = 0
      If GetOpenFileName(OFName) Then
          ShowMODE = Trim$(OFName.lpstrFile)
          lastpath = detchemin(ShowMODE)
      End If
    End Function
     
    Public Function detchemin(z0 As String) As String
      'pour extraire d'un nom de chemin complet le nom du seul chemin de répertoire
      Dim i As Integer, j As Integer
      i = 0
      j = 0
      i = InStr(z0, "\")
      Do While i <> 0
        j = i: i = InStr(j + 1, z0, "\")
      Loop
      If j = 0 Then
        detchemin = ""
      Else
        detchemin = Left$(z0, j)
      End If
    End Function
    dans un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Public 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
    Public Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
    Dim OFName As OPEN
    Tu peux mettre Showmode et detchemin dans le module, si tu préfères (j'ai fait comme ça au plus vite, c'est tout !)

    EDIT : maintenant et si tu préfères, je peux également te "concocter" quelque chose avec un DriveList, un Dirlist et un Filelist (mais c'est moins beau, bien que tout aussi efficace !

    bon week-end (oh ! pardon pour mes amis Québécois : bonne fin de semaine !

  15. #15
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par bbil
    si tu clique avec bouton droit sur la variable commonDlg.. de façon à avoir menu contextuel puis tu chois InfoExpress ou InfoParamétre et tu nous dis les résultats..
    juste pour ma culture personelle ... le menu contextuel il n'existe pas sous Access 2000 ..?

  16. #16
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    la y'a un truc qui m'échappe

    Dèjà, est-ce qu'on parle de VB6 ou d'Access ?

    Ensuite le code fonctionne très bien sous VB6

    vous pouvez mettre le code complet en piece jointe, car à mon avis, y'a autre chose qui cloche

    on va pas mettre 2km de fonctions API, parce qu'un commondialog est récalcitrant
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  17. #17
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    (çà ? c'est moi !)

    Je jurerais que le contrôle commondialog n'est tout simplement pas sur la form d'où le code est appelé, mais sur une autre !

  18. #18
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    je te charrie
    Citation Envoyé par jmfmarques
    Je jurerais que le contrôle commondialog n'est tout simplement pas sur la form d'où le code est appelé, mais sur une autre !
    sans le code complet, difficile à voir
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  19. #19
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Voilà pourquoi j'avais écrit:
    Citation Envoyé par AlainTech
    Juste pour être certain qu'on s'adresse au bon composant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.commonDlg.Filter = "Fichier Excel|*.xls"
    Le fait de taper Me. dans l'éditeur permet de voir si le CommonDialog est présent sur le form contenant le code.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 304
    Points : 348
    Points
    348
    Par défaut
    Re à tous,
    tout d'abord merci pour toutes ces réponses! un problème de connexion internet m'a empêché de venir ce week-end, donc désolée pour mon silence.

    Je vais essayer les différentes choses que vous m'avez conseillé. Par contre, de là à changer tout le code du formulaire ... en tout cas jmfmarques merci pour le temps que tu as consacré à mon programme.

    Je reviens vous donner des nouvelles dès que j'ai un café dans l'estomac
    --Miss Gaëlle--

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VBa-E] Problème de "CommonDialog" ?
    Par gootsu dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 10/07/2006, 13h57
  2. [VBA-E] Où se trouve les CommonDialog ?
    Par belfaigore dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/07/2006, 11h55
  3. [VBA-E] [Excel] Tri automatique
    Par bovi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/10/2002, 10h19
  4. [VBA-E] [Excel] Filtrer le donnees d'une sheet
    Par donia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/09/2002, 10h55
  5. problème avec VBA
    Par Delph dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2002, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo