Access Importation Excel VBA

Résolu
Bonjour à toutes et à tous,

Bon mon soucis est simple je n'arrive pas à importer un fichier sur access de manière automatique, je m'explique:

J'ai un code VBA qui fonctionne mais ne m'apporte que partiellement ce que je veux:

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Import Test", "c:\recap.xls", True

En définitive je souhaiterai créer (avec votre aide) un Bouton qui lorsque je clique dessus, m'ouvre une fenetre qui me permet de choisir le fichier que je veux, dans le répertoire que je veux et de l'importer dans une table prévue à cet effet.

En creusant un peu j'ai eu une idée pas si lumineuse qui est la suivante:

Stocker le "path" dans une variable Toto par exemple ensuite de remplace "c:\recap.xls" par Toto, vous pensez bien, ça a foiré, d'où ma présence ici a vous demander votre aide.

En espérant avoir été clair.

D'avance merci.

Alex
Configuration: Windows XP
Internet Explorer 6.0

13 réponses

  1. Le code que tu a copié est plutot pour des gens un peu avancé. Tu auras beaucoup plus facile ave le FileOpenDialog. Là le nom du fichier est une propriété de l'objet.
    3
    1. Re salut,
      voici une solution très simple qui march aussi bien avec une macro Access qu'en VBA. elle te permet de naviger dans tes repertoires pour prendre le fichier voulu et active le wizard d'import.

      DoCmd.RunCommand acCmdImport

      good luck
      1
      1. voila la solution a tous vos problème il suffit de copier coller la formule magique dans une nouveau module et modifier que le nom de la table qui va etre créer après l'importation et le tours et jouer. et surtout ne toucher à rien :d

        Function fOpenFiles() As String

        'Nécessite la référence microsoft office x.x object library

        Dim Dialogue As FileDialog
        Dim Fichier As Variant
        Set Dialogue = FileDialog(msoFileDialogOpen)

        With Dialogue
        .AllowMultiSelect = True
        .ButtonName = "Ouvrir"
        .InitialFileName = "*.xls"
        .Filters.Clear
        .Filters.Add "Tableur Microsoft Excel", "*.xls"
        .InitialView = msoFileDialogViewList
        .Title = "Veuillez sélectionner les fichiers ..."
        If .Show Then
        For Each Fichier In .SelectedItems
        fOpenFiles = fOpenFiles & Fichier & ";"
        Next
        End If
        End With

        If Len(fOpenFiles) > 0 Then
        fOpenFiles = Left(fOpenFiles, Len(fOpenFiles) - 1)
        End If

        Set Dialogue = Nothing

        End Function
        '------------------------------------------------------------
        ' importer_DATA_1_importer
        '
        '------------------------------------------------------------

        Function importer_DATA_1_importer()
        On Error GoTo importer_DATA_1_importer_Err

        DoCmd.TransferSpreadsheet acImport, 8, "Nom de la table", fOpenFiles(), True, ""

        importer_DATA_1_importer_Exit:
        Exit Function

        importer_DATA_1_importer_Err:
        MsgBox Error$
        Resume importer_DATA_1_importer_Exit

        End Function
        1
        1. Il y a le Microsoft Common Dialog 6.0 qui contien un File Open Dialog
          0
          1. regarde:
            http://office.microsoft.com/en-gb/access/HP051866541033.aspx
            0
            1. Bonjour à toutes et à tous,

              Je me retrouve coincé, car je suis obligé de mettre un chemin précis et un nom de fichier prédéfini, je peux avoir à mettre à jour ma base avec un fichier dans c:\toto.xls, ou encore c:\Temp\Boite1\tata.xls, concrètement le nom du fichier excel ainsi que son chemin peuvent varier.
              J'ai trouvé quelque chose qui s'aparente à ce que je recheche, cette fonction VBA me permet d'afficher dans une MSGBOX le chemin avec le fichier, le but est de le stocker dans une variable et d'ouvrir le doc.

              https://access.developpez.com/faq/?page=CheminsRep

              Je pense que vous avez compris que j'étais une belle buse en VBA :)
              0
              1. Voici le code de la fonction que j'ai trouvé:

                '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

                Private Sub Commande1_Click()
                MsgBox OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Fichier Excel", "xls")

                End Sub


                En effet c'est long, mais cette dernière me permet d'afficher le chemin de mon fichier, le problème qui se pose à moi est le suivant maintenant, comment retrouver la variable où est stocké le "chemin" du fichier choisi???

                Je maintiens je suis une buse en VBA :)
                0
                1. BONJOUR Al3xandr3
                  J'ai le meme probleme que tu avais pour inserer des feuilles excels dans ma base de données access j'ai un bouton de commande et à partir de la je veux acceder à mon classeur excel et je veux le faire avec le code vba
                  svp es ce que tu peux m'aider avec le ode c urgent
                  0
              2. Admettons qu'une bonne âme me trouve la variable où est stocké le "chemin" du fichier choisi et que cette dernière s'appelle Tata.
                Est-ce que je peux faire ça:

                DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Import Test", TATA, True

                Au lieu de ça:

                DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Import Test", "c:\recap.xls", True

                Merci :))
                0
                1. Y-a-t-il quelqun qui saurait répondre à ma question je désespère là :-(
                  0
                  1. Bonjour à toutes et à tous,

                    Okiz je vais tenter de tirer quelque de la fonction FileOpenDialog, je vous tiendrai au courant de l'avancement de mon problème.
                    En effet le code j'ai pompé sur developper.com est d'un niveau très avancé pour mes maigres compétences en VBA, mais comme dit le vieil adage aide toi et le ciel t'aidera :p

                    Merci en tout cas de me mettre sur la bonne voie.

                    Bonne journée à vous et peut bon weekend pour les veinards :)

                    Alex
                    0
                    1. Re

                      Quand j'essaie de mettre l'objet Commoni Dialog Control, je me fais jeter par access!!!
                      Il me dit de réinstaller le serveur OLE, je ne comprends pas ce qui se passe sérieusement... C'est vraiment pénible.
                      Bref je continue à farfouiller partout pour trouver une solution.

                      Merci de votre aide.

                      Alex
                      0
                      1. MERCI !!!!!

                        Mon problème est résolu grâce à ta commande!!!!

                        DoCmd.RunCommand acCmdImport It rocks!
                        0
                        1. bonjour alexandre
                          je rencontre le memeprobleme que vous avez recontre pour appliquer une procedure sur un fichier a partir de son chemin
                          je vois que vous etes sevis de la commande "DoCmd.RunCommand acCmdImport It rocks!"
                          je pense que cadoit me servir moi aussi mais leproblem c'est que je vois pas comment l'inserer dans mon code
                          j'espere que tu va pouvoir m'aider Alexandre
                          0
                        2. @jamcher08bonjour jamcher08,
                          on o le meme probleme toi et moi sur l'importation de données si tu as le code es ce que tu peut me passer please
                          c'est très urgent et merci de ta collaboration
                          0
                      2. slt les developpeurs! bah pr ma part g une application à réaliser en VB qui permet d'importer/exporter des fichiers textes resultats issus d'un logiciel CIRPLUS(c1 logiciel ki permet le traitement genre cordination et plannification des fréquences. on px executer des calculs la dessus, le resultat est donc exhibé sous forme de fichiers textes où ya bcp d'information, mais mon but est donc extraire seules les données pertinentes ,ainsi les importer dans un fichier excel.. bah là je cherche à le réaliser mais puisque c'est l a1ère fois que je code av le VB 6.0 bah je ss un peu debordée pr ne po dire trop.. ce que je demande c'est si vous pouvez m'aider à codifier la fonction importer le fichier texte vers un fichier excel..
                        merci d'avance
                        0

                        Discussions similaires

                        Quick Access service

                        4 réponses