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

Access Discussion :

Importation d'un fichier Excel dans une table Access 2000


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 35
    Points
    35
    Par défaut Importation d'un fichier Excel dans une table Access 2000
    Bonjour !

    J’ai une base de données qui contient une table produits. La ligne ci-dessous me permet d’exporter les données au format Excel et d’enregistrer le fichier à l’endroit choisi sur le disque par l’intermédiaire d’un explorateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OutputTo acTable, "PRODUITS", "", "", False, ""
    Mon problème est d'effectuer l’opération inverse dans la base client pour la mise à jour des données. La ligne de code suivante permet l’importation du fichier mais de façon figée, non du fichier et chemin non modifiables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferSpreadsheet acImport, 5, "PRODUITS", "C:\PRODUITS", True, ""
    J'utilise pour l'instant la méthode suivante qui me permet au moins de choisir le disque ou le lecteur, cependant j'ai toujours une restriction, celle de placer le fichier à la racine du disque.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Lecteur As String
    Dim NomFichier As String
    Dim Chemin As String
     
    Lecteur = InputBox("Entrez la lettre du lecteur ou se trouve le fichier à importer (Le fichier doit se trouver à la racine du lecteur ou du disque)", "Importation du fichier PRODUITS.")
    NomFichier = ":\ PRODUITS "
    Chemin = Lecteur & NomFichier
     
        DoCmd.TransferSpreadsheet acImport, 5, " PRODUITS ", Chemin, True, ""
        Beep
        MsgBox "Importation terminée", vbOKOnly, "Importation du fichier PRODUITS "
    Quelqu'un aurait-il une solution pour sélectionner et importer le fichier en utilisant un explorateur comme pour l'exportation.

    Merci.

  2. #2
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Bonjour,

    T'as tout sur la recherche de répertoire dans :

    http://access.developpez.com/faq/?pa...Rep#select_rep

    Avec ça tu placeras ton fichier où tu veux !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 35
    Points
    35
    Par défaut
    J’ai copié le programme ci-dessous 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
    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
    Ensuite j’appelle la fonction copiée dans le module mais je ne récupère pas le chemin et le nom du fichier sous forme texte mais sous forme numérique ensuite j’obtiens le message d’erreur suivant :
    Le moteur de base de données Microsoft Jet n’a pas pu trouver l’objet ‘C:\1.xls’

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Chemin As String
    Chemin = MsgBox(OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Fichier Excel", "xls", "C:\"))
        DoCmd.TransferSpreadsheet acImport, 5, " PRODUITS ", Chemin, True, ""

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Pourquoi chemin = msgbox(...)


    La syntaxe est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chemin = OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Fichier Excel", "xls", "C:\")

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 35
    Points
    35
    Par défaut
    http://access.developpez.com/faq/?pa...Rep#select_rep
    Le code donné sur le lien de Trini donne pour appeler la fonction la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Exemple pour appeler la fonction depuis le code d'un formulaire : 
    MsgBox OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Fichier Word", "doc")
    J'ai modifié la ligne, je n'obtiens plus le message d'erreur mais l'importation ne se réalise pas malgrès l'affichage du message "importation terminée".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Chemin As String 
    Chemin = OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Fichier Excel", "xls", "C:\")
        DoCmd.TransferSpreadsheet acImport, 5, " PRODUITS ", Chemin, True, ""
        Beep
        MsgBox "Importation terminée", vbOKOnly, "Importation du fichier Produit "

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 35
    Points
    35
    Par défaut
    Une précision sur mon précédent post.
    L'importation du fichier Excel se réalise bien mais à chaque appel de la procédure une nouvelle table est créée dans la base de donnée. Mon problème est de copier uniquement les données du fichier Excel dans une table existante et non d'en créer une nouvelle.

  7. #7
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Citation Envoyé par pegase23
    http://access.developpez.com/faq/?pa...Rep#select_rep
    Le code donné sur le lien de Trini donne pour appeler la fonction la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Exemple pour appeler la fonction depuis le code d'un formulaire : 
    MsgBox OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Fichier Word", "doc")
    Tout à fait ... il s'agit d'un exemple pour afficher le nom du fichier selectionné ... cf l'aide sur la fonction MsgBox ... toi tu ne désires pas afficher le résultat mais l'affecter à une variable ... il faut donc adapter !!!

    Mon problème est de copier uniquement les données du fichier Excel dans une table existante et non d'en créer une nouvelle.
    L'importation se fait dans une nouvelle table. Il te faut donc, prélever les données de cette table pour les envoyer dans la tienne (requête Insert Into .. select), puis supprimer la table temporaire.

    En cherchant sur le forum tu devrais trouver de nombreux exemples

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 35
    Points
    35
    Par défaut
    Petite erreur de ma part, je ne sais par quelle opération le chiffre "5" après acImport avait disparu et depuis tout est rentré dans l'ordre, les données du fichier Excel se copient bien dans la table de destination.
    Merci pour les participants.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferSpreadsheet acImport, 5, " PRODUITS ", Chemin, True, ""

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/02/2014, 14h21
  2. [AC-2002] Importer fichier Excel dans une table Access
    Par Kalymar dans le forum Access
    Réponses: 4
    Dernier message: 28/05/2011, 15h09
  3. [AC-2000] Import fichier Excel dans une table Access déjà existante
    Par icecreams01 dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/05/2010, 15h07
  4. Réponses: 3
    Dernier message: 20/04/2010, 09h31
  5. Importation d'un fichier excel dans une table access
    Par cmaitre dans le forum VBA Access
    Réponses: 11
    Dernier message: 15/04/2008, 16h59

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