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 :

Importer une plage d'une feuille de plusieurs fichiers Excel


Sujet :

Access

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Mai 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Suriname

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mai 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Importer une plage d'une feuille de plusieurs fichiers Excel
    Bonjour,

    Novice en la matière, j'ai grandement besoin de votre aide afin de réaliser la manipulation suivante:

    J'ai des centaines de fichiers Excel (intitulés NOR140_8830751_130923_0001_PROFILE.xlsx; NOR140_8830751_130923_0002_PROFILE.xlsx; NOR118_8830751_130924_0001_PROFILE.xlsx, etc.) qui ont tous les mêmes feuilles. De tous ces fichiers je veux importer dans une table Access uniquement la plage A4:BE(jusqu'à la fin des données, première ligne vide) de la feuille "Summary" (la feuille Summary à le même formattage pour tous les fichiers).

    J'aimerais de plus coller devant tous les enregistrements (plus de 50'000 par fichier) le nom de fichier d'où proviennent les enregistrements.

    J'espère que c'est à peu près compréhensible ;-) Et je vous remercie pour toute l'aide que vous pouvez m'apporter.

    PS: peut être que le fichier en source est plus parlant.NOR140_8201607_140402_0005_PROFILE.xlsx

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Il y a plusieurs façons de faire je pense, tout dépend de ta capacité à utiliser Access.
    En gros, le principe serait de :
    - Parcourir ton répertoire (retenir le nom quelque part)
    - Importer la plage de valeurs dans une table provisoire.
    - Faire une requête ajout dans ta table définitive.
    - Vider la table provisoire.

    Pour cela tu as :

    Un premier tuto pour manipuler les fichiers sous vba, un deuxième avec une fonction pour parcourir un répertoire

    Deux tutos pour interagir avec Excel à partir de ACCESS ici et . Tu peux aussi t'intéresser à la méthode Docmd.TransferSpreadSheeet en utilisant la touche F1 pour les transfert de données d'Excell vers Access.

    Bonne continuation
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour Yannto, madefemere,

    Voici un code qui va importer une feuille Excel selon la table de destination. Le principe est de débuter sur la ligne désiré dans Excel, c'est la variable i qui fait ce choix. Ensuite on importe les colonnes selon les champs de la table. Donc si on a 10 champs dans la table on va importer les 9 premières colonnes du fichier Excel (pour ton cas ce sera 8 puisque la deuxième colonne est le nom du fichier). Pour l'exemple la première colonne est un numéro automatique et la deuxième colonne est le nom du fichier Excel. Les autres colonnes sont selon ce que l'utilisateur veut.

    La partie pour récupérer le fichier Excel:
    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
    Private Function Parcourir()
    'Ici c'est un copier coller de l'aide d'Access
     
    'Requires reference to Microsoft Office XX.X Object Library.
     
       Dim fDialog As Office.FileDialog
       Dim varFile As Variant
     
       'Set up the File Dialog.
       Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
       With fDialog
          'Allow user to not make multiple selections in dialog box.  J'ai changé car dans notre cas un seul fichier à la fois
          .AllowMultiSelect = False
     
          'Set the title of the dialog box.
          .Title = "Veuillez choisir un fichier"
     
          'Clear out the current filters, and add our own.
          .Filters.Clear
          .Filters.Add "Fichiers Excel", "*.XLS; *.XLSX"
          .Filters.Add "All Files", "*.*"
     
          'Show the dialog box. If the .Show method returns True, the
          'user picked at least one file. If the .Show method returns
          'False, the user clicked Cancel.
          If .Show = True Then
             'Loop through each file selected and add it to the list box.
            For Each varFile In .SelectedItems
                Parcourir = varFile
             Next
     
          Else
             MsgBox "Vous n'avez pas sélectionné de fichier!!!" & Chr(13) & "La procédure est annulée."
          End If
       End With
    End Function
    C'est directement dans l'aide d'Access.

    La deuxième partie pour récupérer les cellules du fichier selon le nombres de champs dans la table destination:
    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
    Private Sub btnExcel_Click()
    On Error GoTo Err_btnExcel_Click
     
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Dim fld As DAO.Field
        Dim oApp As Excel.Application
        Dim oWkb As Excel.Workbook
        Dim oWSht As Excel.Worksheet
        Dim i As Integer, l As Integer, c As Integer
        Dim strSQL As String, strFeuille As String, strChemin As String, strNom As String
        'Inscrire le nom du fichier choisi et son chemin
        DoCmd.Hourglass True
        strChemin = Parcourir
        'Si aucun fichier choisi
        If strChemin = "" Then: Exit Sub
        'Récupérer le nom du fichier seulement
        l = InStrRev(strChemin, ".")
        strNom = Left(strChemin, l - 1)
        l = InStrRev(strNom, "\")
        strNom = Right(strNom, Len(strNom) - l)
        'Choisir la bonne feuille
        strFeuille = "Summary"
        'Créer l'objet Excel
        Set oApp = CreateObject("excel.application")
        'Récupérer le fichier
        Set oWkb = oApp.Workbooks.Open(strChemin)
        'Récupérer la bonne feuille
        Set oWSht = oWkb.Worksheets(strFeuille)
        'Créer le record
        Set db = CurrentDb
        Set rst = db.OpenRecordset("T_Summary")
        'Première ligne d'importation ici on débute sur la quatrième ligne
        i = 4
        'tant que la cellule A n'est pas vide
        While oWSht.Range("A" & i).Value <> ""
            'On ajoute une ligne dans la table
            rst.AddNew
                'On débute au champ # 2, le premier champ étant un numéro automatique, la numérotation commence à 0
                'Donc on a pas besoin d'inscrire Access va se charger de créer un numéro automatiquement
                c = 1
                For c = 1 To rst.Fields.Count - 1
                        If c = 1 Then
                            'On inscrit le nom du fichier Excel dans le deuxième champ
                            rst.Fields(c) = strNom
                        Else
                            'On inscrit les informations de la feuille Excel à partir de la ligne 4 et colonne 1
                            rst.Fields(c) = oWSht.Cells(i, c - 1)
                        End If
                Next c
            rst.Update
          i = i + 1
        Wend
        rst.Close
        Set rst = Nothing
        Set db = Nothing
    Exit_btnExcel_Click:
        oWkb.Close
        Set oWSht = Nothing
        Set oWkb = Nothing
        Set oApp = Nothing
        DoCmd.Hourglass False
        Exit Sub
     
    Err_btnExcel_Click:
        If err.Number = 9 Then
            'Si la feuille Summary n'est pas trouvée
            MsgBox "Le nom de la feuille n'est pas valide!", vbExclamation
        Else
            MsgBox err.Description
        End If
        Resume Exit_btnExcel_Click
     
    End Sub
    Je crois que ça devrait faire ce que tu voulais. Maintenant tu n'as qu'à créer ta table avec le nombre de champs requis pour faire ton importation.

    Bonne chance
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/06/2012, 11h39
  2. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  3. Réponses: 12
    Dernier message: 22/03/2010, 14h07
  4. Export JPG d'une plage de celulle à la racine du fichier excel
    Par tidams dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/01/2009, 11h28
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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