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 :

importer données Excel sur plusieurs feuilles vers Access


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut importer données Excel sur plusieurs feuilles vers Access
    Bonjour tlm!

    Voilà, j'suis actuellement en stage, et j'ai récupéré plus de 50 feuilles de données sous Excel. Chaque feuille est intitulée de la façon suivante "MMAA"
    avec MM numéro du mois et AA numéro de l'année. Exemple, pour mars 2007, la feuille s'intitule "0307".
    Chacune des feuilles contient le même nombre de colonnes, avec les mêmes données, mais avec un nombre de données différentes (une feuille peut contenir 1500 lignes et un autre 2000). Chaque feuille dispose d'un intitulé (donc le même sur chaque feuille).
    Je souhaite récupérer l'ensemble des données de ces feuilles et les mettre dans une seule et unique table (par exemple "tableDonnees").
    Je ne peux pas créer une seule table sous Excel car l'ensemble des données est supérieur à 66000 lignes. J'ai de plus déjà récupéré plusieurs codes VBA à placer sous Access, mais je n'ai pu récupéré que les données d'une seule feuille ou j'avais une erreur (sûrement parce que j'avais oublié de modifier quelque chose). Si quelqu'un peut m'aider, merci beaucoup (j'suis un peu juste niveau timing!)
    Merci

  2. #2
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Bonjour et bienvenue !

    Je pense qu'avec une boucle et la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.TransferSpreadsheet
    , tu devrais pouvoir t'en sortir.
    Avais-tu déjà essayé cela auparavant ?

    N.B. En regardant rapidement dans la FAQ, j'ai trouvé ceci qui te donne toutes les clés (en utilisant mes propositions ci-dessus) pour résoudre ton challenge
    Nous n'héritons pas la Terre de nos ancêtres, nous l'empruntons à nos enfants, prenons-en soin !
    (proverbe amérindien)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut
    merci bernardmichel!
    Je ne peux pas te garantir que ça marche puisque je ne suis pas en stage(en ce moment même), mais j'enverrai un message demain matin pour dire quoi!
    je n'ai pas encore utilisé de boucle For to Next, et l'autre ne me dit rien. Pourrais-tu me dire à quoi sert la deuxième commande?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut
    Voici le code que j'ai actuellement, il me permet de récupérer l'ensemble des données d'une seule feuille.

    Sub ImportInAccess()
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "tableDonnees", "C:\Documents and Settings\...\divers\essai.xls", True
    End Sub

    Où dois-je insérer la boucle?

  5. #5
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2008
    Messages : 154
    Points : 66
    Points
    66
    Par défaut
    Je ne sais pas si ca peut t'aider, mais je travail aussi actuellement en VBA et j'ai eu un problème similaire. En fait je créer un fichier Excel contenant plusieurs feuilles contenant chacunes les résultats de requètes. Je te donne un exemple :
    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
     
    If requeteCree = 0 Then
        Req = "SELECT ..... AND EMPLOYE.Sexe='F' "
        Set tst = CurrentDb.CreateQueryDef("Femmes", Req)
     
        DoCmd.TransferSpreadsheet acExport, 8, "Femmes", "G:\.....\" & d & "_" & "FicheBilan.xls", True
     
        Req = "SELECT.... AND EMPLOYE.Sexe='M' "
     
        Set tst = CurrentDb.CreateQueryDef("Hommes", Req)
        DoCmd.TransferSpreadsheet acExport, 8, "Hommes", "G:\...\" & d & "_" & "FicheBilan.xls", True
     
        MsgBox "Fichier crée à l'emplacement G:\...\" & d & "_" & "FicheBilan.xls "
     
        requeteCree = 1
    End If
    Sachant que d est la date du jour
    Et bien sur en sortant je supprime :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Exit_Commande..._Click:
    If requeteCree <> 0 Then
        CurrentDb.QueryDefs.Delete "Femmes"
        CurrentDb.QueryDefs.Delete "Hommes"
        requeteCree = 0
    End If
    Ce code va en fait créer un fichier Excel à l'emplacement G:\... Sous le nom "Datedujour"FicheBilan.xls Contenant deux feuilles nommées Hommes et Femmes.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut
    salut, c'est gentil pour le code, mais toi, tu exportes les résultats de tes requêtes vers Excel, alors que moi, je dois importer les données de toutes les feuilles Excel et les insérer dans une seule et unique table

  7. #7
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2008
    Messages : 154
    Points : 66
    Points
    66
    Par défaut
    Ah ok j'avais mal compris ton problème dans ce cas je ne vois pas trop comment faire, désolé...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut
    C'est pas grave

    Est-ce éventuellement il serait possible d'exporter toutes les feuilles Excel dans un même fichier texte, puis d'importer ce fichier texte sous Access, c'est-à-dire en passant donc par un fichier intermédiaire???

  9. #9
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2008
    Messages : 154
    Points : 66
    Points
    66
    Par défaut
    Heu je ne sais pas trop tu veux faire ca avec du code VBA ou avec des clic clic sous Excel?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut
    je préfèrerais avec du VBA, parce que faire des clic clic sous Excel, j'ai fait ça toutes l'après-midi d'hier et sur 50 feuilles Excel passées, c'est TREEEEEEEEES long!

  11. #11
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2008
    Messages : 154
    Points : 66
    Points
    66
    Par défaut
    J'ai peut-être une piste, tu créés un bouton de commande sous access qui permet d'exécuter une application comme chemin tu rentre par exemple C:\Program Files\Notepad++\notepad++.exe
    ou autre chose si tu as un autre blocnote
    Après il ne te reste plus qu'a trouver comment mettre les données d'excel dedans. Je sais il reste le plus gros du travail mais bon..

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut
    je ne sais pas créer d'exécutable...

  13. #13
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2008
    Messages : 154
    Points : 66
    Points
    66
    Par défaut
    Tu te mets en mode création, tu clic sur bouton de commande dans la boite a outil après il te demande ce que tu veux faire tu clic sur exécuter une application tu verra c'est très simple

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Tu peux piloter Excel à partir de Access. Le lien de bernardmichel contient tout ce dont tu auras besoin pour ca.

    Consulte le tranquillement mais surtout essai et revient si tu as des problèmes.
    Amicalement

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut Résolu
    En discutant avec des personnes sur le forum VBA Excel, j'ai obtenu la macro suivante :
    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
    Sub copyyyy()
    Dim sh As Worksheet
    Dim cr As Range
    Dim mySheet As Worksheet
    Dim mdb As DAO.Database
    Dim mtb As DAO.Recordset
     
    Set mdb = DAO.OpenDatabase("chemin absolu base .mdb")
    Set mtb = mdb.OpenRecordset("nom table")
    For Each mySheet In ThisWorkbook.Worksheets
        Set cr = mySheet.Cells(1, 1).CurrentRegion
        If cr.ListHeaderRows > 0 Then
            Set cr = cr.Offset(1, 0).Resize(cr.Rows.Count - 1, cr.Columns.Count)
        End If
        For r = 1 To cr.Rows.Count
            With mtb
                .AddNew
                    For C = 1 To cr.Columns.Count
                        .Fields(C - 1) = cr.Cells(r, C)
                    Next C
                .Update
            End With
        Next r
    Next
    Et il fonctionne

  16. #16
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Bonsoir !

    Mon idée était un peu la suivante :
    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
    Public Function ImportShtExcel(nbSheet As Integer, intMois As Integer, intAnnee As Integer)
        ' nbSheet = Nb d'onglets dans le classeur
        ' numéro du mois du premier onglet
        ' numéro de l'année du premier onglet (5 = 2005, 6 = 2006, etc)
     
    Dim AppExcel    As Excel.Application
    Dim Classeur    As Excel.Workbook
    Dim Onglet      As Excel.Worksheet
    Dim I           As Integer
    Dim strMois     As String
    Dim strAnnee    As String
    Dim strChemin   As String
     
    strChemin = "C:\Documents and Settings\eferez\Bureau\eferez\divers\essai.xls"
     
    Set AppExcel = New Excel.Application
    Set Classeur = AppExcel.Workbooks.Open(strChemin)
     
    For I = 1 To nbSheet ' De 1 au nombre d'onglets à importer
        strMois = Format(intMois, "00")     ' Format 01 pour janvier
        strAnnee = Format(intAnnee, "00")   ' Format 07 pour 2007
     
        Set Onglet = Classeur.Worksheets(strMois & strAnnee)
     
        DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "tableDonnees", strChemin, True
        If intMois < 12 Then
            intMois = intMois + 1
        Else
            intMois = 1
            intAnnee = intAnnee + 1
        End If
     
        Set Onglet = Nothing
    Next I
     
    Set Onglet = Nothing
    Classeur.Close
    AppExcel.Quit
    Set Classeur = Nothing
    Set AppExcel = Nothing
     
    End Function
    A toi de tester cela (je ne l'ai pas fait !) et regardes si tu dois modifier quelques paramètres pour ajuster la fonction à tes besoins.
    Nous n'héritons pas la Terre de nos ancêtres, nous l'empruntons à nos enfants, prenons-en soin !
    (proverbe amérindien)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/01/2010, 17h59
  2. [AC-2003] Import d'un fichier Excel à plusieurs feuilles vers Access
    Par cosmonaute666 dans le forum VBA Access
    Réponses: 3
    Dernier message: 24/06/2009, 18h00
  3. exportation données sur plusieurs feuilles vers Access
    Par meuah dans le forum Macros et VBA Excel
    Réponses: 30
    Dernier message: 15/05/2008, 21h32
  4. Access export vers Excel sur plusieurs feuilles
    Par oceanediana dans le forum Access
    Réponses: 6
    Dernier message: 10/07/2006, 12h15
  5. Validation de données Excel sur plusieurs cellules
    Par Civodul4 dans le forum Excel
    Réponses: 3
    Dernier message: 06/03/2006, 11h56

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