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 :

Importation avec boite de dialogue


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 Importation avec boite de dialogue
    Bonjour à tous,

    J'ai créé une boite de dialogue qui lors d'un appuye sur un bouton se lance bien.
    Cette boite de dialogue permet de choisir un fichier de type txt.
    Voici le code qui est dans mon 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
    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
    Ce que je voudrai c'est savoir comment récupérer le nom du fichier que je veux importé et le mettre dans une nouvelle table?

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    La fonction OuvrirUnFichier renvoie le chemin du fichier choisi.

    Bon courage,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Salut,

    là où tu as récupérer le code il y a un exemple à la fin :

    http://access.developpez.com/faq/?pa...#AffBoitDialog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox OuvrirUnFichier(Me.Hwnd, "titre", 2, "Fichiers texte", "txt")
    Dolphy

  4. #4
    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
    Dolphy,

    Cela ouvre juste une fenetre mais ca n'inscrit en rien mon fichier excel importer dans une nouvelle table.
    Donc je voudrai juste savoir comment faire cela?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pourtant Dolphy t'a donné la réponse, si tu veux mettre le fichier et son chemin dans une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LaVariable = OuvrirUnFichier(Me.Hwnd, "titre", 2, "Fichiers texte", "txt")
    Lorsque tu auras sélectionné ton fichier, il sera dans ta variable, et ensuite tu en fais ce que tu veux.

    Attention, c'est une boite de sélection, et non d'ouverture, c'est à toi de la gérer cette ouverture.

    Starec

  6. #6
    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
    Ok merci pour ta réponse starec, je n'avais pas bien fais la distinction des deux.
    Donc après pour ouvrir j'utilise la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.TransferSpreadsheet...
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.TransferText...
    C'est bien ça?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour

    As-tu fait le test ?

    Dans un des paramètres de cette instruction, tu mets le nom du fichier avec le chemin, donc ce que tu as récupéré.

    Starec

  8. #8
    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
    J'ai testé mais erreur
    comme code j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Import_Click()
    Dim LaVariable As String
     
    LaVariable = OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Fichier Texte", "txt")
    DoCmd.TransferText acImportDelim, "Import", "tblNouveauxProduits", "LaVariable"
     
    End Sub
    J'ai une erreur :
    Erreur d'éxécution '31519':
    Vous ne pouvez pas importer ce fichier

    Donc je suis un peu pomé
    Fallait-il que je crée ma table? car elle ne doit pas être créer automatiquement?

    Si quelqu'un a des détails ou une solution merci...Beaucoup

  9. #9
    Invité
    Invité(e)
    Par défaut
    Re

    LaVariable est une variable, pas de double-quotes.

    Starec

  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
    Maintenant ça merde au niveau de "Import"
    ça me met comme erreur
    erreur d'éxécution '3625'
    The text file specification 'Import' does not exist. You can Import, Export or link using the specification.

    Faut-il que je commence un apport manuel comme c'est cité dans certains forum et que je renseigne pas mal de chose??
    C'est peut etre pour ça que Import n'existe pas??
    Faudra-t-il que je fasse pour chaque fichier txt diffèrent??

    Merci

  11. #11
    Invité
    Invité(e)
    Par défaut
    Re

    Oui, il faut que tu fasses un import manuel, lorsque tu es sur la boite de dialogue tu as un bouton avancé, et là tu peux le sauvegarder, et c'est ce nom que tu mets dans ton paramètre.

    Tu dois en créer un par type d'import, si plusieurs fichiers ont le même format, tu n'as pas besoin, tu peux utiliser le même nom.

    Starec

  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
    Merci je test ça dans l'apres midi et je reviens vers vous pour vous dire si ca fonctionne... en tout cas merci de votre réactivité

  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
    Ok ca fonctionne enfin presque je voudrai savoir deux choses :
    1) Comment faire pour importer d'autres formats? (au niveau de l'appel de ma fonction)
    2) Comment faire pour que les données importées soient mis dans une table avec un format particulier que je voudrai créer?

    En tout cas merci l'importation se fait presque bien j'ai un petit souci de format mais je devrai regler ca tout seul...Enfin j'espere

  14. #14
    Invité
    Invité(e)
    Par défaut
    Re

    L'aide te donnera les indications nécessaires pour les autres formats possibles avec cette méthode.

    Si tu as un format particulier, il faudra que tu récupéres tes données ligne par ligne pour les transférer dans ta table, pour lire les données d'un fichier tu as ce tuto http://warin.developpez.com/access/fichiers/, et pour les inclure dans ta table utilise DAO avec ce tuto http://warin.developpez.com/access/dao/ du même auteur.

    Access ne prend en charge que les formats standard, il peut permettre quelques aménagements, mais pour le reste il faut créer une routine d'importation.

    Starec

  15. #15
    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
    C'est ma table qui aura un format spécifique enfin 4 colonnes c'est tout et non mon fichier comme cela aurait pu le laisser supposer..

    Désoler du mal entendu..

    Donc??

  16. #16
    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
    J'ai essayé avec une feuille Excel et cette commande mais j'ai une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, NouvelleTable, LaVariable, True, "Feuil1!"
    L'erreur est 2495
    L'action ou la méthode requiert un argument 'NomTable'?

    Pourtant mon NouvelleTable est bien mon nom de ma table?

    Merci de m'aider.

  17. #17
    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
    C'est bon j'ai trouvé.

    Merci c'etait au niveau de la plage des cellules à importer et aussi au niveau de la fueille merci de m'avoir aider pour l'importation au début

    To Be Continue...

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

Discussions similaires

  1. Problème avec boite de dialogue pour fermer JFrame
    Par adn013 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 04/09/2007, 15h37
  2. [VBA-Excel] Bug dans Import de boite de dialogue incompréhensible
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/07/2007, 17h15
  3. Pb avec boite de dialogue
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 26/12/2006, 15h15
  4. [VBA-E] Petit souci avec boites de dialogues
    Par SybVicious dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/09/2006, 21h18
  5. [MFC] DLL avec boite de dialogue
    Par ricky78 dans le forum MFC
    Réponses: 2
    Dernier message: 17/06/2005, 12h06

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