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 :

Comment fermer proprement une fenetre?


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Points : 31
    Points
    31
    Par défaut Comment fermer proprement une fenetre?
    Bonjour à tous

    Voilà j'ai un souci, j'ai créé une fenêtre qui me permet de choisir quel fichier je veux ouvrir.

    Malheureusement lorsque je clique sur annuler ou même sur la croix, l'événement n'est pas gérer.

    Bien qu'ayant chercher sur pas mal de page internet via l'ami Google,
    je n'ai pas réussi à le faire disparaître.

    Avez-vous une solution?

    Code de la fenetre
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
      'Déclaration de l'API
    Private Declare Sub PathStripPath Lib "shlwapi.dll" Alias "PathStripPathA" (ByVal pszPath As String)
    Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
                       "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
     
     'Structure du fichier
    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
     
     'Constantes
    Private Const OFN_READONLY = &H1
    Private Const OFN_OVERWRITEPROMPT = &H2
    Private Const OFN_HIDEREADONLY = &H4
    Private Const OFN_NOCHANGEDIR = &H8
    Private Const OFN_SHOWHELP = &H10
    Private Const OFN_ENABLEHOOK = &H20
    Private Const OFN_ENABLETEMPLATE = &H40
    Private Const OFN_ENABLETEMPLATEHANDLE = &H80
    Private Const OFN_NOVALIDATE = &H100
    Private Const OFN_ALLOWMULTISELECT = &H200
    Private Const OFN_EXTENSIONDIFFERENT = &H400
    Private Const OFN_PATHMUSTEXIST = &H800
    Private Const OFN_FILEMUSTEXIST = &H1000
    Private Const OFN_CREATEPROMPT = &H2000
    Private Const OFN_SHAREAWARE = &H4000
    Private Const OFN_NOREADONLYRETURN = &H8000
    Private Const OFN_NOTESTFILECREATE = &H10000
     
    Private Const OFN_SHAREFALLTHROUGH = 2
    Private Const OFN_SHARENOWARN = 1
    Private Const OFN_SHAREWARN = 0
     
    Public Function OuvrirUnFichier(Handle As Long, _
                                    Titre As String, _
                                    TypeRetour As Byte, _
                                    Optional TitreFiltre As String, _
                                    Optional TypeFichier As String, _
                                    Optional RepParDefaut As String) As String
     'OuvrirUnFichier est la fonction a utiliser dans votre formulaire pour ouvrir _
     'la boîte de dialogue de sélection d'un fichier.
     'Explication des paramètres
        'Handle = le handle de la fenêtre (Me.Hwnd)
        'Titre = Titre de la boîte de dialogue
        'TypeRetour (Définit la valeur, de type String, renvoyée par la fonction)
            '1 = Chemin complet + Nom du fichier
            '2 = Nom fichier seulement
        'TitreFiltre = Titre du filtre
            'Exemple: Fichier Access
            'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
        'TypeFichier = Extention du fichier (Sans le .)
            'Exemple: MDB
            'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
        'RepParDefaut = Répertoire d'ouverture par defaut
            'Exemple: C:\windows\system32
            'Si vous laissé l'argument vide, par defaut il se place dans le répertoire de votre application
     
    Dim StructFile As OPENFILENAME
    Dim sFiltre As String
     
     'Construction du filtre en fonction des arguments spécifiés
    If Len(TitreFiltre) > 0 And Len(TypeFichier) > 0 Then
      sFiltre = TitreFiltre & " (" & TypeFichier & ")" & Chr$(0) & "*." & TypeFichier & Chr$(0)
    End If
    sFiltre = sFiltre & "Tous (*.*)" & Chr$(0) & "*.*" & Chr$(0)
     
     'Configuration de la boîte de dialogue
      With StructFile
        .lStructSize = Len(StructFile) 'Initialisation de la grosseur de la structure
        .hwndOwner = Handle 'Identification du handle de la fenêtre
        .lpstrFilter = sFiltre 'Application du filtre
        .lpstrFile = String$(254, vbNullChar) 'Initialisation du fichier '0' x 254
        .nMaxFile = 254 'Taille maximale du fichier
        .lpstrFileTitle = String$(254, vbNullChar) 'Initialisation du nom du fichier '0' x 254
        .nMaxFileTitle = 254  'Taille maximale du nom du fichier
        .lpstrTitle = Titre 'Titre de la boîte de dialogue
        .flags = OFN_HIDEREADONLY  'Option de la boite de dialogue
        If ((IsNull(RepParDefaut)) Or (RepParDefaut = "")) Then
            RepParDefaut = CurrentDb.Name
            PathStripPath (RepParDefaut)
            .lpstrInitialDir = Left(CurrentDb.Name, Len(CurrentDb.Name) - Len(Mid$(RepParDefaut, 1, _
    InStr(1, RepParDefaut, vbNullChar) - 1)))
            Else: .lpstrInitialDir = RepParDefaut
        End If
      End With
     
    If (GetOpenFileName(StructFile)) Then 'Si un fichier est sélectionné
        Select Case TypeRetour
          Case 1: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFile, InStr(1, StructFile.lpstrFile, vbNullChar) - 1))
          Case 2: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFileTitle, InStr(1, StructFile.lpstrFileTitle, vbNullChar) - 1))
        End Select
      End If
     
    End Function

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 034
    Points : 24 603
    Points
    24 603
    Par défaut
    Bonjour,

    Je viens de tester ton code, chez moi il marche bien.

    Comment tu fais ton appel et à partir d'ou ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Points : 31
    Points
    31
    Par défaut
    La déclaration de la fenêtre est dans un module et pour l'utiliser ( exemple avec un import) je fais cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub Import_Click()
    Dim LaVariable As String
     
    'LaVariable = OuvrirUnFichier(Me.Hwnd, "Parcourir", 2, "Fichier Texte", "txt")'
    LaVariable = OuvrirUnFichier(Me.Hwnd, "Parcourir", 2, "Fichier Excel", "xls")
    'DoCmd.TransferText acImportDelim, "ImportXLS", "tblNouveauxProduits", LaVariable'
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, LaVariable, LaVariable, True, "A1:D45000"
     
    End Sub
    Ça me met erreur d'exécution 2495
    L'action ou la méthode requiert un argument 'Nom Table'

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 034
    Points : 24 603
    Points
    24 603
    Par défaut
    Bizarre car il n'y a pas d'argument de ce nom ?

    Sur quelle ligne il stoppe ?

    As-tu fais un débogage avec exécution pas à pas... des fois qu'il ne passe pas par cette fonction ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Points : 31
    Points
    31
    Par défaut
    Il stoppe sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, LaVariable, LaVariable, True, "A1:D45000"
    Non pas fait de deboguage pas à pas

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 652
    Points : 34 358
    Points
    34 358
    Par défaut
    les deux lavariable doivent remplacer la table et le fichier vers lequel tu copies... je doute qu'ils portent le même nom !

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Points : 31
    Points
    31
    Par défaut
    L'importation s'effectue bien
    C'est juste que quand je ne choisis pas de fichiers ( clic sur Annuler ou alors sur la croix )ça me génère une erreur ?

    Encore une fois l'importation marche niquel donc je ne pense pas que cela vienne de Lavariable....

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 652
    Points : 34 358
    Points
    34 358
    Par défaut
    teste LaVariable avant de faire le docmd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if LaVariable<>False then

  9. #9
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 034
    Points : 24 603
    Points
    24 603
    Par défaut
    Je doute que ce type de test aboutisse.

    Merci de proposer des solutions qui fonctionnent...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if len(mavariable) > 0 then
      docmd....
    else
       msgbox "operation annulée par l'utilisateur"
    endif

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Points : 31
    Points
    31
    Par défaut
    Message d'erreur la boite de dialogue ne s'affiche pas

    Le message d'erreur est en gros il faut que je mette des conditions

    Est-ce qu'il faudrait que je fasse un truc comme ca:

    www.developpez.net/forums/showthread.php?t=2724

    là c'est sous word

  11. #11
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 034
    Points : 24 603
    Points
    24 603
    Par défaut
    Bonjour,

    Soit tu appliques les conseils soit tu ne postes pas...

    Comme ça j'aurais du temps pour aller à la piscine

  12. #12
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Points : 31
    Points
    31
    Par défaut
    Ba vu que l'on a posté en même temps voilà désolé...J'applique ton conseil je test et fais un feedback

  13. #13
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Points : 31
    Points
    31
    Par défaut
    Niquel cela fonctionne parfaitement

    J'applique ton conseil... maintenant tu peux aller à la piscine...

  14. #14
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 034
    Points : 24 603
    Points
    24 603
    Par défaut
    j'y suis déjà, ça sert le portable

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment fermer proprement une application avec map
    Par alex8276 dans le forum Android
    Réponses: 4
    Dernier message: 30/04/2015, 16h09
  2. Réponses: 10
    Dernier message: 25/02/2014, 10h21
  3. Comment fermer proprement une instance d'Excel ouvert avec VB ?
    Par Teddy7 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/04/2012, 16h23
  4. Réponses: 0
    Dernier message: 10/09/2010, 17h30
  5. [wxPython][wxFrame]Comment fermer proprement une frame ?
    Par Screameur dans le forum wxPython
    Réponses: 4
    Dernier message: 12/05/2005, 19h49

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