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 :

Import de données situées sur différents fichiers et feuilles Excel.


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Import de données situées sur différents fichiers et feuilles Excel.
    Bonjour,

    En esperant être le plus clair possible :

    Je souhaite créer un module permettant d'aller récupérer une liste d'information dans un grand nombre de fichier excel situé dans une arborescence du type dossier/sous-dossiers/sous-sous-dossiers/../fichier.xls

    Les informations récupérées doivent être listées dans les lignes et colonnes d'un classeur existant et possèdant déjà de nombreux champs informés. Il faut donc qu'une information importé des classeurs soit reconnue dans celui existant (mais mon probleme n'est pas là).

    Chacun des classeurs 'Excel' ont un début de nom commun.
    Ils sont également tous structurés de la même façon.

    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
     
    Dim s As String
    Dim n As Double
     
    Function trouvenum_precedent(num As String) As Double ' retourne le numéro de ligne
    ' du numéro passé en paramètre
     
    Dim c As Range
            Set c = Workbooks("donnes-recuperer.xls").Worksheets("Feuill1").Range("U:U").Find(num)
            If c Is Nothing Then
                MsgBox (num & " non trouvé ")
                trouvenum_precedent = "0"
            Else
                trouvenum_precedent = c.Row
            End If
     
    End Function
     
    Sub recup_donnees()
        Workbooks.Open Filename:="D:\partage\Dossier\Sous-Dossier\Sous-Sous-Dossier\Données\Annexe \01\nom1\" & "données.xls"
     
        s = Workbooks("données.xls").Worksheets("Feuil1").Cells(3, 1)
        n = InStrRev(s, " ")
        s = Right(s, Len(s) - n)
        n = trouvenum_precedent(s)
     
        For i = 52 To 71
            Workbooks("donnes-recuperer.xls").Worksheets("Feuill1").Cells(n, i) = Workbooks("données.xls").Worksheets("Feuil1").Cells(i - 47, 7)
        Next i
     
     
        Workbooks("données.xls").Close False
     
        Workbooks.Open Filename:="D:\partage\Dossier\Sous-Dossier\Sous-Sous-Dossier\Données\Annexe \01\nom1\" & "données.xls"
     
        s = Workbooks("données.xls").Worksheets("Feuil2").Cells(3, 1)
        n = InStrRev(s, " ")
        s = Right(s, Len(s) - n)
        n = trouvenum_precedent(s)
     
        For i = 72 To 87
            Workbooks("donnes-recuperer.xls").Worksheets("Feuill1").Cells(n, i) = Workbooks("données.xls").Worksheets("Feuil2").Cells(i - 67, 7)
        Next i
     
     
        Workbooks("données.xls").Close False
     
    End Sub
    Voilà où j'en suis.
    Pour l'instant le contrat est remplit pour une seul importation.
    Je voudrais savoir s'il est possible d'écrire une fonction permettant d'aller scanner les informations dans une arborescence contenant environ 200 fichiers excel.
    (les fichiers excels ont en commun le début de leur nom ainsi que leur structure)

    Merci.

    >> imalgene

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Juste un élément de réponse.
    Tu dois ouvrir un certain nombre de fichiers.
    Tu dois donc parcourir un répertoire pour en avoir la liste, puis les traiter l'un après l'autre.
    Question 1 : As-tu des difficultés pour établir cette liste ?
    La liste établie, dans la sub, tu crées une boucle sur les noms de la liste.
    Pour chaque nom, tu crées l'instance du fichier ouvert

    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
    Public FL1 as worksheet
    Dim s As String
    Dim n As Double
     
    Sub recup_donnees()
    Dim ListFich()
    Dim CLn as workbook
    Dim FL2 as worksheet
    Set FL2 = Workbooks("donnes-recuperer.xls").Worksheets("Feuill1")
    Rep = :="D:\partage\Dossier\Sous-Dossier\Sous-Sous-Dossier\Données\Annexe \01\nom1\"
    'Créer la liste dans ListFich()
    For NoFich = 1 to Ubound(ListeFich)
         Set CLn = Workbooks.Open Filename:= Rep & ListeFich(NoFich)
         Set FL1 = Cln.Worksheets("Feuil1")
         s = FL1.Cells(3, 1)
         n = InStrRev(s, " ")
         s = Right(s, Len(s) - n)
         'Pour appeler ta fonction, joins l'instance de ta feuille
         n = trouvenum_precedent(s)
        For i = 52 To 71
            FL2.Cells(n, i) = FL1.Cells(i - 47, 7)
        Next i
        Set FL1 = Nothing 'pas indispensable
    Next NoFich 
    End sub
    Et dans la fonction,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function trouvenum_precedent(num As String) As Double ' retourne le numéro de ligne
    ' du numéro passé en paramètre
     
    Dim c As Range
            Set c = FL1.Range("U:U").Find(num)
            If c Is Nothing Then
                MsgBox (num & " non trouvé ")
                trouvenum_precedent = "0"
            Else
                trouvenum_precedent = c.Row
            End If
     
    End Function
    Pour la liste des fichiers, ce n'est pas impératif. Tu peux faire en sorte que les fichier soient listés dans la boucle. Regarde , Tu peux placer le code entre For NoFich = 1 to Ubound(ListeFich) et Next NoFich dans la boucle For each des exemples. Juste un exemple
    A+

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour cette réponse rapide.
    Ce petit element de réponse m'a aidé pour trouver la solution !

    Problème résolu

    Merci,

    >>imalgene

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

Discussions similaires

  1. Copier Coller massif sur différents fichiers ?
    Par zephirsoul dans le forum Excel
    Réponses: 1
    Dernier message: 23/12/2007, 00h33
  2. importer des données web sur excel
    Par irouni dans le forum Excel
    Réponses: 3
    Dernier message: 18/12/2007, 12h12
  3. comment importer des données bo sur excel
    Par Gecl.paris dans le forum Deski
    Réponses: 1
    Dernier message: 12/02/2007, 11h54
  4. Réponses: 8
    Dernier message: 22/08/2006, 13h51
  5. Réponses: 12
    Dernier message: 14/08/2006, 13h55

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