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

Macros et VBA Excel Discussion :

Macro Import de donnees de plusieurs fichier excel ds une base de donnees


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut Macro Import de donnees de plusieurs fichier excel ds une base de donnees
    Bonjour a tous !

    Voila j'avais a recuperer des milliers de donnees se trouvant dans des centaines de feuilles excel, pour faire une base de donnee contenu dans un seul fichier.

    J'ai un ami qui m'a aider a faire la macro sous VBA.

    Il m'a explique vite fait mais etant newbie et ne demandant qu'a apprendre, lui n'ayant pas le tps de vraiment mexpliquer vu que se serais par telephone, jen appel a vous.

    J'ai joint en piece jointe les codes utiliser. je ne connais pas le language utiliser et aurais souhaiter avoir une explication pr la pluspars des codes (Filenae, ", ',=,&, etc...)utiliser pr pvoir faire par moi meme une autre base de donnee similaire.

    Merci a tous ceux qui pourront m'aider
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    Bonsoir


    Tu peux par exemple utiliser le modèle ADO afin d'extraire des données dans plusieurs classeurs fermés



    Nécessite d'activer la référence "Microsoft ActiveX Data Objects x.x Library".

    Dans l'éditeur de macros:
    Menu Outils.
    Références.
    Coche la ligne "Microsoft ActiveX Data Objects x.x Library".
    Clique sur le bouton OK pour valider



    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
    Option Explicit
    Option Base 1
     
     
    Sub ChercheFichiersFermes()
        Dim Source As ADODB.Connection
        Dim Rst As ADODB.Recordset
        Dim ADOCommand As ADODB.Command
        Dim Fichier As String, Direction As String, texte_SQL As String
        Dim X As Integer, NbFichiers As Integer
        Dim i As Long
        Dim Tableau() As String
     
        Application.ScreenUpdating = False
     
        Direction = Dir(ThisWorkbook.Path & "\*.xls")
        'liste tous les classeurs du répertoire
        Do While Len(Direction) > 0
            NbFichiers = NbFichiers + 1
            ReDim Preserve Tableau(1 To NbFichiers)
            Tableau(NbFichiers) = Direction
            Direction = Dir()
        Loop
     
        If NbFichiers > 0 Then
            'boucles sur les classeurs fermés
            For X = 1 To UBound(Tableau)
     
                'Pour ne pas prendre en compte le classeur contenant la macro
                If Tableau(X) <> ThisWorkbook.Name Then
     
                    'Définit le chemin
                    Fichier = ActiveWorkbook.Path & "\" & Tableau(X)
     
                    'Connexion au classeur fermé
                    Set Source = New ADODB.Connection
                    Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                        "Data Source=" & Fichier & _
                        ";Extended Properties=""Excel 8.0;HDR=No;"";"
     
                    'Récupère les données de la plage A2:B10, dans la feuille
                    'nommée Feuil1, dans chaque classeur
                    Set ADOCommand = New ADODB.Command
     
                    With ADOCommand
                        .ActiveConnection = Source
                        .CommandText = "SELECT * FROM [Feuil1$A2:B10]"
                    End With
     
                    Set Rst = New ADODB.Recordset
                    Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
     
                    Set Rst = Source.Execute("[Feuil1$A2:B10]")
     
                    i = Range("A65536").End(xlUp).Row + 1
                    'Ecrit le résultat de la requète dans la feuille da calcul active
                    Cells(i, 1).CopyFromRecordset Rst
     
                    Rst.Close
                    Source.Close
                    Set Source = Nothing
                    Set Rst = Nothing
                    Set ADOCommand = Nothing
     
                End If
            Next X
        End If
     
        Application.ScreenUpdating = True
    End Sub


    http://silkyroad.developpez.com/VBA/ClasseursFermes/



    bonne soirée
    michel

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    salut
    la macro que t'a passé ton ami récupere un certain nombre de cellule dans un fichier donné. c'est une sorte de programme d'importation qui ne concerne qu'un seul fichier. en gros si tu es novice :
    tu connais le nom du fichier a importer. en l'occurence dans le programme de ton ami, c'est la date
    tu importe un certain nombre de cellule (76)
    fin
    il te manque pour mene ton projet a terme
    une "boucle " qui prend tout tes fichiers en compte

    question : es que :je te cite "des milliers de donnees se trouvant dans des centaines de feuilles excel" se trouve dans plusieur fichier( je suppose que oui) et surtout es ce que toutes ces donées se trouvent a la même place sur chaque fichier. et si oui, je te propose de t'interresser a ce post
    fais moi signe si ça te semble correspondre a ce que tu cherche

  4. #4
    Membre averti
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut
    Merci a vous deux, je vais etudier un peu tt ca et je reviens vers vous !

  5. #5
    Membre averti
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut
    Salut Alsimbad et merci de me proposer ton aide.

    Jai un nouveau truc a faire dans le meme genre et un peu plus complex bien que moins de donnees a recuperer.

    Alors je texplique, faut suivre :

    Le classeur Origin & Plant Cover dans le Fichier bean coverage : cest lui qui va recevoir les donnees (en tous 9 somme de donnees venant d'autres fichiers excel)

    Les cellules qui vont recevoir les donnees sont :
    C11,c12,c13,C14
    C19,C20,C21,C22
    C38


    Les donnees proviennent de deux autres fichiers
    2007beanstorplan6083 : classeur "(c) stock estimate fut." et classeur "Bean storage overview"

    et lautre fichier se nomme Daily-stock05 et les donnees sont dans le classeur "Stock available"

    Dc dans le le classeur "(c) stock estimate fut." du fichier 2007beanstorplan6083, je veux additonner les donnees situe en B5 et R5 et importer la somme en C11 dans le classeur Origin & Plant Cover.

    la somme des cellules B6+b7+b8 st importer en C12

    la somme des cellules b4+r4 st importer en C13

    la somme des cellules b8+r8 st importer en C14


    Dc dans le le classeur "Bean storage overview" du fichier 2007beanstorplan6083, je veux importer

    la cellule E5 et limporter en C19
    la somme des cellules e6+e7 soit importer en C20
    la cellule E4 soit importer en C21
    La cellule E8 .....................C22


    Et enfin jaimerais que dans le classeur "Stock available" du fichier "Daily-stock05"

    la somme des cellules D16+L16 arrivent dans la cellule C38 du classeur Origin & Plant Cover dans le Fichier bean coverage :


    Voila pas complique

    bon dis moi si cest faisable,a pres je me reserve une aprem pr etudier ton code


    Bon mes fichier sont trop gros pour etre mis en piece jointe
    Fichiers attachés Fichiers attachés

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    salut usualpierrot
    je t'ai proposé mon aide pace dans le cadre d'importer des données de plusieurs fichiers, j'avais fais un code qui pouvait t'aider, mais je t'ai pas proposé de faire ton code.
    j'ai jeté un oeil a ton fichier, tout est dedans, tu a déja les bases pour ouvrir un fichier, écrire la formule dans les bones cellules, que veut tu de plus ? pas que je passe mon 15 aout a faire ton code quand même ? si ?
    pas de probleme par contre, si tu fais un truc je veux bien me résever un moment pour l'étudier

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/03/2015, 19h45
  2. Importer les données d'un fichier csv dans une base de données
    Par Invité dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 08/06/2010, 13h54
  3. Réponses: 4
    Dernier message: 08/01/2009, 15h01
  4. Réponses: 3
    Dernier message: 27/07/2007, 13h06
  5. Réponses: 1
    Dernier message: 28/04/2006, 16h17

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