Access Importation Excel VBA

Résolu
Al3xandr3 Messages postés 35 Statut Membre -  
 blaster_soft -
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. phil232
     
    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
  2. Matrix
     
    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
  3. blaster_soft
     
    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
  4. phil232
     
    Il y a le Microsoft Common Dialog 6.0 qui contien un File Open Dialog
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Matrix
     
    regarde:
    http://office.microsoft.com/en-gb/access/HP051866541033.aspx
    0
  7. Al3xandr3 Messages postés 35 Statut Membre 2
     
    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
  8. Al3xandr3 Messages postés 35 Statut Membre 2
     
    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. libasse76 Messages postés 7 Date d'inscription   Statut Membre
       
      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
  9. Al3xandr3 Messages postés 35 Statut Membre 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
  10. Al3xandr3 Messages postés 35 Statut Membre 2
     
    Y-a-t-il quelqun qui saurait répondre à ma question je désespère là :-(
    0
  11. Al3xandr3 Messages postés 35 Statut Membre 2
     
    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
  12. Al3xandr3 Messages postés 35 Statut Membre 2
     
    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
  13. Al3xandr3 Messages postés 35 Statut Membre 2
     
    MERCI !!!!!

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

    DoCmd.RunCommand acCmdImport It rocks!
    0
    1. jamcher08 Messages postés 10 Statut Membre
       
      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
      1. libasse76 Messages postés 7 Date d'inscription   Statut Membre > jamcher08 Messages postés 10 Statut Membre
         
        bonjour 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
  14. mya1 Messages postés 352 Statut Membre 42
     
    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