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 :

Chargement Database Access via Fichier Excel


Sujet :

Access

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 6
    Points
    6
    Par défaut Chargement Database Access via Fichier Excel
    Bonjour a tous-

    J'espere poster dans le bon forum en tout premier lieu car le probleme est relie a Excel et Acces.

    Voila la description de mon probleme:

    J'ai un fichier Excel d'une centaine d'enregistrements constitue comme suis (avec un example):
    Colonne A - Colonne B - Colonne C
    "Pomme" - "Fruit" - "001;002;003"
    "Carotte" - "Legume" - "001;004"

    Je souhaiterai a partir de ce fichier Excel cree une table Access qui pour chaque couplet colonne A et B creera autant d'enregistrement qu'il y a de valeur dans le colonne C

    Example :

    Pomme - Fruit - 001
    Pomme - Fruit - 002
    Pomme - Fruit - 003
    Carotte - Legume - 001
    Carotte - Legume - 004

    A toute fin utile, les valeurs de la colonne C sont toujours sur trois caracteres separes par un point virgule.

    Je pense qu'il me faut developper une macro mais je ne sais par quel bout commencer. Merci pour votre aide.

    Sophie

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    Si tu veux utiliser du VBA tu as la fonction split qui peut convenir.

    @+.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par zoom61 Voir le message
    Salut,

    Si tu veux utiliser du VBA tu as la fonction split qui peut convenir.

    @+.
    Je veux bien ... mais faudraitil encore que je sache me debrouiller avec VBA ... Je ne suis pas non plus malheureusement experte sur le sujet VBA ....

  4. #4
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Question : ton fichier Excel est lié à la base ou tu veux lire le contenu ?

    @+.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Non, mon fichier est a chargement "unique". Je n'ai pas besoin de le lier a la Base de Donnees ... sauf si cela est plus simple ... Je suis prete a tout les amenagements ! ...

  6. #6
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Donc tu veux importer les données du fichier dans ta base, mais cela nécessite de le faire en VBA.

    @+.

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Exactement cela

  8. #8
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Voici une liste de tuto qui te permettront de réaliser ce que tu veux :

    Ne pas oublier la fonction split pour décomposer tont champ...

    @+.

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup mais cela me semble bien trop complique pour moi ...
    Je vais essayer bien sur .... mais je crains de ne devoir ceder devant la complexite ...

  10. #10
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Tu peux essayer, le tout en faisant étape par étape :
    • Etape 1 : importer les données te ton fichier dans une table.
    • Etape 2 : utiliser la fonction split
    • Etape 3 : faire le code pour ce que tu veux


    Tu peux revenir sur le forum avec tes questions !

    @+.

  11. #11
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Voici quelque chose que tu peux essayer.
    Dans ta base de données, crée un nouveau formulaire.
    Ajoute un nouveau bouton et nomme le cmdImporter (propriété «Nom» dans l'onglet «Autres» de la fenêtre de propriétés du bouton).
    Toujours dans la fenêtre des propriétés du bouton, va dans l'onglet «Événements» et en face de «Sur clic» choisi [Procédure événementielle] dans la liste déroulante.
    Clique sur le petit bouton [...] à droite.
    Tu atterris dans le module de code du formulaire, dans la procédure événementielle cmdImporter_Click:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub cmdImporter_Click()
     
    End Sub
    Entre les lignes Private Sub cmdImporter_Click() et End Sub, colle ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim sFichier As String
     
    ' Demander à l'utilisateur de choisir un fichier Excel
    sFichier = GetOpenXLfile()
    ' Quitter si l'utilisateur n'a rien sélectionné
    If Len(sFichier) = 0 Then Exit Sub
    ' Importer et manipuler les données Excel
    ImporterFichierXL sFichier
    Au dessus de la ligne Private Sub cmdImporter_Click(), colle ceci (ce sont des constantes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' Nom de la table d'importation temporaire
    Const CS_TmpTbl = "tblImportTmp"
    ' Nom de la table de destination
    Const CS_TblAcc = "tblImport"
    ' Option vider table de destination
    Const CB_ViderTableAccess = True
    En dessous de la ligne End Sub (qui doit être la dernière ligne), colle ceci :
    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
    Function GetOpenXLfile()
    Dim fdlg As Object  ' Office.FileDialog
    Dim sFichier As String
     
    Set fdlg = Application.FileDialog(1) ' msoFileDialogOpen=1
    ' Mode vue liste
    fdlg.InitialView = 1                 ' msoFileDialogViewList=1
    ' Sélection Multiple
    fdlg.AllowMultiSelect = False
    ' Filtre
    fdlg.Filters.Clear
    fdlg.Filters.Add "Excel", "*.xls;*.xls?"
    ' Afficher boîte de dialogue
    If fdlg.Show Then
       sFichier = fdlg.SelectedItems(1)
    End If
    Set fdlg = Nothing
     
    ' Retourner le nom complet du fichier
    GetOpenXLfile = sFichier
    End Function
     
    Sub ImporterFichierXL(sFichierXL As String)
    Dim db As DAO.Database, tdTmpTbl As DAO.TableDef
    Dim rsXL As DAO.Recordset, rsAcc As DAO.Recordset
    Dim arrCol3() As String, iIdx As Integer
     
    On Error GoTo ErrH
     
    Set db = CurrentDb
    ' Supprimer la table temporaire
    Set tdTmpTbl = db.TableDefs(CS_TmpTbl)
    If Not (tdTmpTbl Is Nothing) Then
       Set tdTmpTbl = Nothing
       db.TableDefs.Delete CS_TmpTbl
    End If
     
    ' Importer la 1ère feuille du fichier Excel dans la table temporaire
    DoCmd.TransferSpreadsheet acImport, , CS_TmpTbl, sFichierXL, False
     
    ' [Optionnel] Vider table Access
    If CB_ViderTableAccess Then
       db.Execute "DELETE FROM [" & CS_TblAcc & "]"
    End If
     
    ' Ouvrir les tables avec des recordsets
    Set rsAcc = db.OpenRecordset(CS_TblAcc)
    Set rsXL = db.OpenRecordset(CS_TmpTbl)
     
    ' Boucler sur les enregistrements de rsXL et les ajouter
    ' dans la table Access de destination
    Do While Not rsXL.EOF
       ' Eclater Colonne 3 en tableau de chaînes de caractères
       arrCol3 = Split(Nz(rsXL(2), ""), ";")
       ' Boucler sur les éléments du tableau
       For iIdx = LBound(arrCol3) To UBound(arrCol3)
           ' Créer un nouvel enregistrement dans la table de destination
           rsAcc.AddNew
           rsAcc(0) = rsXL(0)   ' Colonne 1
           rsAcc(1) = rsXL(1)   ' Colonne 2
           rsAcc(2) = arrCol3(iIdx)
           ' Enregistrer le nouvel enregistrement
           rsAcc.Update
       Next
       ' Passer à l'enregistrement suivant de la table temporaire
       rsXL.MoveNext
    Loop
     
    ExitProc:
        ' Fermer les recordsets
        If Not (rsAcc Is Nothing) Then
           If rsAcc.EditMode <> dbEditNone Then rsAcc.CancelUpdate
           rsAcc.Close
        End If
        If Not (rsXL Is Nothing) Then rsXL.Close
        Exit Sub
     
    ErrH:
        Select Case Err.Number
            Case 3265  ' Element non trouvé dans cette collection
                 Resume Next
        End Select
     
        MsgBox "Erreur No." & Err.Number & " : " & Err.Description, _
                vbExclamation, "Sub ImporterFichierXL"
        Resume ExitProc
    End Sub
    Sauvegarde le formulaire.

    Crée une nouvelle table avec les trois champs de ton fichier Excel, dans le même ordre que dans le fichier Excel.
    Sauve la table sous le nom tblImport.

    Affiche le formulaire en mode «Affichage formulaire».
    Clique sur le bouton.
    Une boîte de dialogue t'invite à sélectionner ton fichier Excel.
    Après sélection, la sub ImporterFichierXL va être exécutée.
    Elle va importer la première feuille du fichier Excel dans la table tblImportTmp, puis elle va recopier son contenu dans la table tblImport en éclatant le contenu de la troisième colonne.

    A+

Discussions similaires

  1. [Access 2007] Fichier excel qui ne s'ouvre pas
    Par enkie dans le forum VBA Access
    Réponses: 5
    Dernier message: 07/08/2008, 10h08
  2. planification en php via fichier excel
    Par Jean-christophe 45 dans le forum Windows
    Réponses: 1
    Dernier message: 10/09/2007, 23h23
  3. exporter requete access vers fichier excel
    Par pmax35 dans le forum ASP
    Réponses: 11
    Dernier message: 07/08/2007, 17h06
  4. Lien entre base access et fichier Excel
    Par Eilat dans le forum VBA Access
    Réponses: 4
    Dernier message: 27/06/2007, 19h55
  5. DTS : update table via fichier excel
    Par jbrasselet dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 19/07/2006, 09h38

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