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 :

Lier plusieurs tables


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 90
    Points : 62
    Points
    62
    Par défaut Lier plusieurs tables
    bonjour
    bon voila j'ai un code qui permet de lié un fichier excel a une base de donné puis elle est importé par des requete pour que soit plus simple je montre le code qui marche bien.
    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
     Sub test()
     
        Dim creation As String
        Dim vider As String
        Dim ajout As String
        Dim rep As String
        Dim nomFic As String
     
        nomFic = CurrentProject.Path & "\" & "test_voiture2.xls"
        creation = ("SELECT voitures.* INTO voiture_table_access FROM voitures")
        vider = ("DELETE voiture_table_access.* FROM voiture_table_access")
        ajout = ("INSERT INTO voiture_table_access SELECT voitures.* FROM voitures")
     
        On Error Resume Next
        DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel8, "voitures", nomFic, True, "A1:E30"
        On Error GoTo 0
     
        On Error Resume Next
        CurrentDb.CreateQueryDef "creation", creation
        CurrentDb.CreateQueryDef "vider", vider
        CurrentDb.CreateQueryDef "ajout", ajout
        On Error GoTo 0
     
        DoCmd.SetWarnings False
     
        DoCmd.OpenQuery "creation"
        DoCmd.OpenQuery "vider"
        DoCmd.OpenQuery "ajout"
     
        DoCmd.SetWarnings True
     
    End Sub
    Le truc il marche si je n'ai qu'un seul fichier xls mais je voudrais qui plusieurs fichier xls. j'ai voulu remplacer le nom.xls par *.xls mais cela ne fonctionne pas.
    Du coup ma question est ce que quelqu'un peut m'aider ou me dire comment on fait svp.
    merci pour aide que vous apporterez

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Salut,
    Ton code me paraît un peu "dégueulasse" si je puis m'exprimer ainsi. En plus, si je lis bien ton code, tu importes un fichier excel dans la table voitures puis tu copies les données de cette table dans une nouvelle table voiture_table_access que tu vides puis que tu re-remplis à nouveau avec les mêmes données....Crées plutôt une fonction d'importation comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function import(nomFichier As String)
        Dim nomFic As String
     
        nomFic = CurrentProject.Path & "\" & nomFichier
     
        DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "voiture_table_access ", nomFic, True
    End Function
    Qui s'utilise comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     import "monFichier.xls"
    Ensuite, dans ta procédure principale, tu parcours tous les fichiers de ton dossier avec une boucle pour déterminer lesquels portent l'extension .xls
    Sur chacun de ces fichiers, tu exécutes la fonction citée plus haut....
    Tu auras des infos sur les fichiers grâce à cet article.
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 90
    Points : 62
    Points
    62
    Par défaut
    tu importes un fichier excel dans la table voitures puis tu copies les données de cette table dans une nouvelle table voiture_table_access que tu vides puis que tu re-remplis à nouveau avec les mêmes données
    c'est exactement ça

    le code correspond a ce qu'on ma demander (je dois faire apparaitre les requêtes).

    sur excel il y a workbooks.open qui permet ouvrir les fichiers mail il ne fonctionne pas pour access.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bah excuses-moi mais c'est un peu débile de supprimer des données pour les remettre ensuite.....Mais si c'est ce qu'on t'a demandé....
    Citation Envoyé par daffy85 Voir le message
    sur excel il y a workbooks.open qui permet ouvrir les fichiers mail il ne fonctionne pas pour access.
    La bibliothèque Excel peut être importée dans le VBE dans le menu outil/références. Puis tu coches Microsoft Excel X.X Object Library où X.X est le numéro de version. Mais ce n'est pas vraiment utile d'aller jusque-là (automation Excel). Si malgré tout l'automation t'intéresse, tu as ce tuto ou encore celui-là
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 90
    Points : 62
    Points
    62
    Par défaut
    Microsoft Excel X.X Object Library
    Après l'avoir cocher il ma reconnu workbooks.open merci a toi paidge.

    j'ai rajouter a mon code une partie qui me permettrai de lire plusieurs fichier mais sa ne marche pas il me met "erreur exécution 3078, le moteur de base de données Microsoft office access ne peut pas trouver la table ou la requête source "voitures" assurez-vous qu'elle existe et qu'elle est correctement orthographiées."
    une idée de quoi sa peut venir?

    PS: je vous donne le code
    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
    Option Compare Database
    Option Explicit
     
     Sub test()
     
        Dim creation As String
        Dim vider As String
        Dim ajout As String
        Dim repCour As String
        Dim nomFic As String
        Dim Wb As Workbook
     
        repCour = CurrentProject.Path
        nomFic = Dir(repCour & "*.xls")
        creation = ("SELECT voitures.* INTO voiture_table_access FROM voitures")
        vider = ("DELETE voiture_table_access.* FROM voiture_table_access")
        ajout = ("INSERT INTO voiture_table_access SELECT voitures.* FROM voitures")
     
        Do While nomFic <> ""
        Set Wb = Workbooks.Open(repCour & nomFic)
        'On Error Resume Next
        DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12, "voitures", CurrentProject.Path & "\" & nomFic, True, "A1:E30"
        'On Error GoTo 0
        Wb.Close True
        Set Wb = Nothing
        nomFic = Dir
        Loop
     
        On Error Resume Next
        CurrentDb.CreateQueryDef "creation", creation
        CurrentDb.CreateQueryDef "vider", vider
        CurrentDb.CreateQueryDef "ajout", ajout
        On Error GoTo 0
     
        DoCmd.SetWarnings False
     
        DoCmd.OpenQuery "creation"
        DoCmd.OpenQuery "vider"
        DoCmd.OpenQuery "ajout"
     
        DoCmd.SetWarnings True
     
    End Sub

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Euh c'est pas du tout comme ça que ça marche...Avec tous les articles que je t'ai donnés, normalement tu as tout ce qu'il faut pour importer plusieurs fichiers Excel dans ta table....
    Tiens c'est cadeau, voilà un exemple d'utilisation de l'utilisation de la bibliothèque Microsoft Scripting Runtime que je viens de faire pour un de mes utilisateurs. Ce script va te lister tous les fichiers d'un dossier :
    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
    Public Sub test()
        On Error GoTo Err_test
     
        Dim rep      As String, dossier As String
        Dim chemin() As String
        Dim i        As Integer
        Dim oFSO     As Scripting.FileSystemObject
        Dim fichier  As Scripting.File
        Dim oDrv     As Scripting.Drive
        Dim oFld     As Scripting.Folder
     
        rep = "G:\monDossier\monSousDossier"
     
        chemin = Split(rep, "\")
        Set oFSO = New Scripting.FileSystemObject
        Set oDrv = oFSO.GetDrive(chemin(0))
        dossier = chemin(0) & "\" & chemin(1)
        Set oFld = oDrv.RootFolder.SubFolders(chemin(1))
     
        For i = 2 To UBound(chemin)
            dossier = dossier & "\" & chemin(i)
            Set oFld = oFld.SubFolders(chemin(i))
        Next i
     
        For Each fichier In oFld.Files
            debug.Print fichier.Name
        Next fichier
     
    Exit_test:
        Set oFld = Nothing
        Set oDrv = Nothing
        Set oFSO = Nothing
        Exit Sub
     
    Err_test:
        Select Case err.Number
            Case 68: MsgBox "Le lecteur " & chemin(0) & " n'est pas disponible"
            Case 76: MsgBox "Le dossier '" & dossier & "' n'existe pas"
            Case Else: MsgBox "Erreur n°" & err.Number & vbCrLf & "Description :" & err.Description & vbCrLf & "Source : " & err.Source
        End Select
     
        Resume Exit_test
    End Sub
    C'est un exemple parmi tant d'autres....Mais un conseil : ici l'utilisation de l'automation Excel est inutile et ne s'utilise pas du tout comme tu l'as fait.
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 90
    Points : 62
    Points
    62
    Par défaut
    je suis désoler
    Mais comme vous l'avez remarquer j'ai beaucoup de mal (surtout paidge) mais avec ce que tu ma donner j'ai fais des modification sa fait a peut prés ce que je veut mais il ne mais toujours pas mes fichier a suivre dans voiture_table_access (trois fichier xls dois s'additionner).voila les ce que j'ai fais
    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
    Option Compare Database
    Option Explicit
     
     Sub test()
     
        Dim creation As String
        Dim vider As String
        Dim ajout As String
        Dim rep As String
        Dim nomFic As String
        Dim appExcel As Excel.Application
        Dim wbExcel As Excel.Workbook
        Dim wsExcel As Excel.Worksheet
     
        rep = CurrentProject.Path
        nomFic = Dir(rep & "\" & "*.xls")
        creation = ("SELECT voitures.* INTO voiture_table_access FROM voitures")
        vider = ("DELETE voiture_table_access.* FROM voiture_table_access")
        ajout = ("INSERT INTO voiture_table_access SELECT voitures.* FROM voitures")
     
        On Error Resume Next
        Set appExcel = CreateObject("Excel.Application")
        Set wbExcel = appExcel.Workbooks.Open(nomFic)
        Set wsExcel = wbExcel.Worksheets(1)
        DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel8, "voitures", nomFic, True, "A1:E30"
        DoCmd.DeleteObject ("voitures")
        nomFic = Dir
        wbExcel.Close
        appExcel.Quit
        On Error GoTo 0
     
        On Error Resume Next
        CurrentDb.CreateQueryDef "creation", creation
        CurrentDb.CreateQueryDef "vider", vider
        CurrentDb.CreateQueryDef "ajout", ajout
        On Error GoTo 0
     
        DoCmd.SetWarnings False
     
        DoCmd.OpenQuery "creation"
        DoCmd.OpenQuery "vider"
        DoCmd.OpenQuery "ajout"
     
        DoCmd.SetWarnings True
     
    End Sub
    soyez indulgent avec svp je suis pas rapide dans la compréhension et je débute en vba du coup je n'arrive pas a tous comprendre je fais du mieux mais les tuto sur le net on une limite et je connais personne qui puisse bien m'expliquer.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 90
    Points : 62
    Points
    62
    Par défaut
    le DIR plante le code et *.xls ne veut plus fonctionner c'est deprimant

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Citation Envoyé par daffy85 Voir le message
    je débute en vba du coup je n'arrive pas a tous comprendre je fais du mieux mais les tuto sur le net on une limite et je connais personne qui puisse bien m'expliquer.
    C'est à ça que sert le forum, les cours, les tutos et les articles J'étais comme toi il y 5 ans et j'ai tout appris ici

    Déjà si tu avais fait : juste après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomFic = Dir(rep & "\" & "*.xls")
    , tu verrais que ça ne te garde qu'un seul nom de fichier

    Je t'ai filé un code pour parcourir les fichiers d'un dossier en particulier, essaie de voir si ça peux pas t'aider. Et si tu n'y connais rien en VBA, essaies d'apprendre déjà les bases. Mais là à mon avis c'est un problème de logique. Il faut revenir exactement à ce que tu veux faire. Cela s'appelle l'algorithmique. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Pour chaque fichier Excel du dossier "C:\monDossier\monSousDossier" {
        Lier ce fichier en tant que table attachée
        Récupérer les données de cette table pour les insérer dans voiture_table_access
        Supprimer la liaison avec le fichier
    }
    Autre exemple, avec l'automation (pourquoi pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Pour chaque fichier Excel du dossier "C:\monDossier\monSousDossier" {
        Ouvrir le fichier
        Pour chaque ligne du fichier {
            Insérer la ligne dans voiture_table_access 
        }FinPour
        Fermer le fichier
    }FinPour
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 90
    Points : 62
    Points
    62
    Par défaut
    c'est encore moi (je sais jsui un ) je voudrais savoir si ce que je fais est correct ou pas du tous.
    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
    Option Compare Database
    Option Explicit
     
     Sub test()
     
        Dim creation As String
        Dim vider As String
        Dim ajout As String
        Dim rep As String
        Dim nomFic As String
        Dim appExcel As Excel.Application
        Dim wbExcel As Excel.Workbook
        Dim wsExcel As Excel.Worksheet
     
        rep = CurrentProject.Path
        nomFic = rep & "\" & "test_voiture.xls"
        creation = ("SELECT voitures.* INTO voiture_table_access FROM voitures")
        vider = ("DELETE voiture_table_access.* FROM voiture_table_access")
        ajout = ("INSERT INTO voiture_table_access SELECT voitures.* FROM voitures")
     
        On Error Resume Next
        Set appExcel = CreateObject("Excel.Application")
        Set wbExcel = appExcel.Workbooks.Open(nomFic)
        Set wsExcel = wbExcel.Worksheets(1)
     
        For Each wsExcel In wbExcel
            DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel8, "voitures", nomFic, True, "A1:E30"
           ' DoCmd.DeleteObject acTable, "voitures"
        Next
     
        wbExcel.Close
        appExcel.Quit
     
        Set wsExcel = Nothing
        Set wbExcel = Nothing
        Set appExcel = Nothing
        On Error GoTo 0
     
        On Error Resume Next
        CurrentDb.CreateQueryDef "creation", creation
        CurrentDb.CreateQueryDef "vider", vider
        CurrentDb.CreateQueryDef "ajout", ajout
        On Error GoTo 0
     
        DoCmd.SetWarnings False
     
        DoCmd.OpenQuery "creation"
        DoCmd.OpenQuery "vider"
        DoCmd.OpenQuery "ajout"
     
        DoCmd.SetWarnings True
     
    End Sub
    le code marche avec fichier nomer mais pas avec tous les fichier du dossier

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Pour le coup l'utilisation de la bibliothèque Excel ici ne sert strictement rien. Tu peux même supprimer les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        On Error Resume Next
        Set appExcel = CreateObject("Excel.Application")
        Set wbExcel = appExcel.Workbooks.Open(nomFic)
        Set wsExcel = wbExcel.Worksheets(1)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        wbExcel.Close
        appExcel.Quit
     
        Set wsExcel = Nothing
        Set wbExcel = Nothing
        Set appExcel = Nothing
    Ainsi que ta boucle, en gardant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel8, "voitures", nomFic, True, "A1:E30"
    Et tu auras le même résultat
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  12. #12
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bon. Voici un exemple d'importation de plusieurs fichiers Excel.
    Copies-colles ce code dans un nouveau 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
    Public Sub importation(dossierAimporter As String)
        ' =========================================================================
        ' Procédure d'importation des fichiers Excel
        ' =========================================================================
     
        ' ===== Déclaration des variables =====
        Dim nomFic          As String
        Dim listeFichiers() As String
        Dim i               As Integer
     
        ' ===== Initialisation des variables =====
        listeFichiers = listeFichiersExcel(dossierAimporter)
     
        ' ===== Pour chaque fichier Excel =====
        For i = 0 To UBound(listeFichiers)
            nomFic = dossierAimporter & "\" & listeFichiers(i)
            DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel8, "voitures", nomFic, True, "A1:E30"
            CurrentDb.Execute "INSERT INTO voiture_table_access SELECT * FROM voitures"
            DoCmd.DeleteObject acTable, "voitures"
        Next i
    End Sub
     
    Public Function listeFichiersExcel(rep As String) As String()
        ' =========================================================================
        ' Fonction qui retourne le nom des fichiers Excel sous forme d'un tableau
        ' à partir du chemin d'un dossier
        ' =========================================================================
     
        On Error GoTo Err_test
     
        ' ===== Déclaration des variables =====
        Dim dossier  As String
        Dim chemin() As String, result() As String ' chemin et result sont des variables tableau
        Dim i        As Integer
        Dim oFSO     As Scripting.FileSystemObject
        Dim oDrv     As Scripting.Drive
        Dim oFld     As Scripting.Folder
        Dim fichier  As Scripting.File
     
        ' ===== Initialisation des variables =====
        chemin = Split(rep, "\")
        Set oFSO = New Scripting.FileSystemObject
        Set oDrv = oFSO.GetDrive(chemin(0))
        dossier = chemin(0) & "\" & chemin(1)
        Set oFld = oDrv.RootFolder.SubFolders(chemin(1))
     
        ' ===== Récupération du dossier final dans l'objet oFld =====
        For i = 2 To UBound(chemin)
            dossier = dossier & "\" & chemin(i)
            Set oFld = oFld.SubFolders(chemin(i))
        Next i
     
        i = 0
     
        ' ===== Pour chaque fichier contenu dans ce dossier =====
        For Each fichier In oFld.Files
            Select Case Mid(fichier.Name, InStrRev(fichier.Name, ".") + 1)
                Case "xls"
                    ' Redimensionne le tableau en conservant les données à l'intérieur
                    ReDim Preserve result(i)
                    ' Insère le nom du fichier dans le tableau
                    result(i) = fichier.Name
                    i = i + 1
                Case "doc"
                    ' Ceci est un exemple : on ne fait rien
                Case "txt"
                    ' Ceci est un exemple : on ne fait rien
                Case Else
                    ' Ceci est un exemple : on ne fait rien
            End Select
        Next fichier
     
        ' La fonction retourne le tableau result()
        listeFichiersExcel = result
     
    Exit_test:
        ' ===== Libération des variables =====
        Set oFld = Nothing
        Set oDrv = Nothing
        Set oFSO = Nothing
        Exit Function
     
    Err_test:
        ' ===== Gestion des erreurs =====
        Select Case Err.Number
            Case 68: MsgBox "Le lecteur " & chemin(0) & " n'est pas disponible"
            Case 76: MsgBox "Le dossier '" & dossier & "' n'existe pas"
            Case Else: MsgBox "Erreur n°" & Err.Number & vbCrLf & "Description :" & Err.Description & vbCrLf & "Source : " & Err.Source
        End Select
     
        Resume Exit_test
    End Function
    Il faut activer la référence Microsoft Scripting Runtime (tu peux décocher la référence Microsoft Excel X.X Object Library ^^)

    Sur l'évnement Click d'un bouton par exemple, tu places ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub monBouton_Click()
        Call importation("C:\monDossier\monSousDossier")
    End Sub
    Ainsi le programme va vérifier tous les fichiers du dossier passé en paramètre. Pour chaque fichier Excel, il va créer une liaison avec le fichier, insérer les données dans ta table puis supprimer la liaison. Mais je persiste : cela ne sert à rien de créer une liaison pour la supprimer ensuite. Autant insérer directement les données Mais a priori il s'agit d'un exercice si on te demande des truks pareils nan ?
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 90
    Points : 62
    Points
    62
    Par défaut
    merci beaucoup pour ta patience et pour ton aide

  14. #14
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Alors ? Tu t'en sors ?
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 90
    Points : 62
    Points
    62
    Par défaut
    oui on intervenu pour m'aider et faire en sorte que le programme marche je te remercie beaucoup pour l'aide que tu ma apporter
    voila le code fini
    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
     
      Sub Test()
        Dim creation As String
        Dim vider As String
        Dim ajout As String
        Dim monFichier As String
        Dim compteur As Integer
        Dim rep As String
        Dim chemin As Boolean
        Dim result() As String
        Dim nbFichier As Integer
     
        'on initialise les requçetes
        creation = "SELECT voiture.* INTO voiture_table_access FROM voiture"
        vider = "DELETE voiture_table_access.* FROM voiture_table_access"
        ajout = "INSERT INTO voiture_table_access SELECT voiture.* FROM voiture"
     
        'on va créer les requêtes
        On Error Resume Next
            CurrentDb.CreateQueryDef "creation", creation
            CurrentDb.CreateQueryDef "vider table acces", vider
            CurrentDb.CreateQueryDef "ajout", ajout
        On Error GoTo 0
     
        'recupere le répertoire courant
        rep = CurrentProject.Path
        Debug.Print rep
     
        If chemin = True Then
            'nous indique que le repertoire est vide
            MsgBox "pas de fichier XLS trouvé"
        Else
            monFichier = Dir(rep & "\*.xls")
            'Debug.Print monFichier
            nbFichier = 0
            'nous permet de compter et  garder les fichiers dans un tableau
            While monFichier <> ""
                Debug.Print monFichier
                nbFichier = nbFichier + 1
                'Debug.Print nbFichier
                ReDim Preserve result(nbFichier)
                result(nbFichier) = monFichier
                monFichier = Dir
            Wend
            'boucle qui traite les fichiers un a un dans le dossier
            For compteur = 1 To nbFichier Step 1
                'on attache le fichier excel à access
                On Error Resume Next
                    DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12, "voiture", rep & "\" & result(compteur), True
                On Error GoTo 0
                If compteur = 1 Then
                'on ouvre les requête en enlevant les messages
                    DoCmd.SetWarnings False
                        DoCmd.OpenQuery "creation"
                        DoCmd.OpenQuery "vider table acces"
                        DoCmd.OpenQuery "ajout"
                    DoCmd.SetWarnings True
                Else
                'on ouvre la requête en enlevant les messages
                    DoCmd.SetWarnings False
                        DoCmd.OpenQuery "ajout"
                    DoCmd.SetWarnings True
                End If
                DoCmd.DeleteObject acTable, "voiture"
            Next
            MsgBox "Tous les fichiers sont traités"
        End If
    End Sub

  16. #16
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Marque le sujet comme résolu alors si le problème est clos
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

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

Discussions similaires

  1. Lier plusieurs tables dans une requete
    Par ConceptInterWEB dans le forum Requêtes
    Réponses: 5
    Dernier message: 26/02/2014, 14h33
  2. [MySQL] Lier plusieurs tables dans une requete
    Par ConceptInterWEB dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/01/2014, 17h41
  3. Réponses: 1
    Dernier message: 21/04/2008, 12h06
  4. Réponses: 2
    Dernier message: 09/07/2006, 17h40
  5. lier 3 tables plusieurs a plusieurs
    Par Chico_Latino dans le forum Access
    Réponses: 16
    Dernier message: 26/01/2006, 09h12

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