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 :

Récupération de données sur plusieurs fichiers [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 25
    Points
    25
    Par défaut Récupération de données sur plusieurs fichiers
    Bonjour à tous ,
    Voici mon problème
    Je souhaiterais récupérer des données sur plusieurs fichiers Xls pour les compiler sur un fichier Xls unique.
    Je bloque au niveau de la boucle dans les fichiers Xls de recupération des données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Ws.Cells(ligne, 1).Text = Wb.Worksheets(1)(ligne, 1) Then
    J'ai un message d'erreur
    "erreur d'exécution '438':
    Propriété ou méthode non gérée par cet objet
    voici mon 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
    Sub recherche()
     
    Dim Repertoire As String, Fichier As String
    Dim Wb As Workbook
    Dim Ws As Worksheet
     
    Application.ScreenUpdating = False
     
    'Définit la Première feuille du classeur contenant cette macro
    '(pour recevoir les donnée extraites dans les autres classeurs).
    Set Ws = ThisWorkbook.Worksheets(1)
     
    'Définit le répertoire de recherche
    Repertoire = "D:\Documents\Dossier D\TM \"
    'Spécifie la recherche pour le fichiers .xls
    Fichier = Dir(Repertoire & "*.xls")
     
    'Boucle sur les fichiers du répertoire
    Do While Fichier <> ""
        'Vérifie que le nom du classeur est différent du classeur
        'contenant cette macro (dans le cas ou il serait placé dans le même répertoire).
        If ThisWorkbook.Name <> Fichier Then
            'Ouvre chaque classeur
            Set Wb = Workbooks.Open(Repertoire & Fichier)
     
          For ligne = 5 To 8
        If Ws.Cells(ligne, 1).Text = Wb.Worksheets(1)(ligne, 1) Then
    Ws.Cells(ligne, 2) = Wb.Worksheets(1)(ligne, 2)
    End If
    Next
     
            'Referme le classeur
            Wb.Close False
        End If
     
        Fichier = Dir
    Loop
     
    Application.ScreenUpdating = True
    MsgBox "Terminé"
     
    End Sub
    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut jose_67 et le forum
    Nouveauté sur le forum : il existe des balises pour le code!!!!!
    Peut-être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            For ligne = 5 To 8
                If Ws.Cells(ligne, 1).Text = Wb.Worksheets(1).Cells(ligne, 1) Then _
                    Ws.Cells(ligne, 2) = Wb.Worksheets(1).Cells(ligne, 2)
            Next
    A+

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 25
    Points
    25
    Par défaut
    Merci pour les infos
    Je viens d'adapter le code à mes besoins. Mais la marco est un peut trop long (à l'exécution) il faudrait que je limite la boucle à la dernière ligne renseigner pour aller plus vite dans la recherche
    Comment faire pour remplacer
    For i = 29 To 700 par (dernière ligne renseignée)
    For j = 5 To 3000 par (dernière ligne renseignée)
    I for 5 to (dernière ligne renseignée)
    Et en plus je voudrais renvoyer le Nom du fichier en colonne 3 de mon fichier Ws


    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
    Dim Repertoire As String, Fichier As String
    Dim Wb As Workbook
    Dim Ws As Worksheet
    Dim i, j As Single
     
    Application.ScreenUpdating = False
     
    'Définit la Première feuille du classeur contenant cette macro
    '(pour recevoir les donnée extraites dans les autres classeurs).
    Set Ws = ThisWorkbook.Worksheets(2)
     
    'Définit le répertoire de recherche
    Repertoire = "D:\Documents\Dossier DM\TM\"
    'Spécifie la recherche pour le fichiers .xls
    Fichier = Dir(Repertoire & "*.xls")
     
    'Boucle sur les fichiers du répertoire
    Do While Fichier <> ""
        'Vérifie que le nom du classeur est différent du classeur
        'contenant cette macro (dans le cas ou il serait placé dans le même répertoire).
        If ThisWorkbook.Name <> Fichier Then
            'Ouvre chaque classeur
            Set Wb = Workbooks.Open(Repertoire & Fichier)
     
           For i = 29 To 700
           For j = 5 To 3000
                If Ws.Cells(i, 2).Text = Wb.Worksheets(2).Cells(j, 1) Then _
                    Ws.Cells(i, 18).Value = Wb.Worksheets(2).Cells(j, 2)
     
     
            Next j
            Next i
     
     
     
            'Referme le classeur
            Wb.Close False
        End If
     
        Fichier = Dir
    Loop
     
    Application.ScreenUpdating = True
    MsgBox "Terminé"
     
    End Sub

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    ci joint lien http://www.developpez.net/forums/d45...gnees-feuille/

    en plus, tu peux simplifier la partie concernée par ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim c As Range
    Dim LastLig1 As Long, LastLig2 As Long
     
    LastLig1 = ws.Cells(Rows.Count, 2).End(xlUp).Row
    LastLig2 = Wb.Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Row
     
    For i = 29 To LastLig1
        Set c = Wb.Worksheets(2).Range("A5:A" & LastLig2).Find(ws.Cells(i, 2).Text, LookIn:=xlValues, lookat:=xlWhole)
        If Not c Is Nothing Then ws.Cells(i, 18).Value = c.Offset(0, 1)
        Set c = Nothing
    Next i

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 25
    Points
    25
    Par défaut
    Tous d'abords merci à "Gorfael" et "Mercatog" pour cette aide rapide et efficace ma macro fonctionne.
    Je voudrais encore pouvoir mettre dans ma (colonne 3) le nom du fichier d'ou arrive les valeurs
    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
    Set Wb = Workbooks.Open(Repertoire & Fichier)
          
           LastLig1 = Ws.Cells(Rows.Count, 1).End(xlUp).Row
            LastLig2 = Wb.Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row
    
    For i = 5 To LastLig2
                Set c = Wb.Worksheets(1).Range("B5:B" & LastLig2).Find(Ws.Cells(i, 1).Text, LookIn:=xlValues, lookat:=xlWhole)
                If Not c Is Nothing Then Ws.Cells(i, 3).Value = c.Offset(0, 16)
                Set c = Nothing
        'Ws.Cells(i, 3) = Fichier ???
            Next i
           
                    
            
            Wb.Close False
        End If
    Cordialement José

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    bonjour, la 3ème colonne risque d'avoir 2 données, l'une effacera l'autre.
    pour ta question, si tu veux le nom entier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                Set c = Wb.Worksheets(1).Range("B5:B" & LastLig2).Find(Ws.Cells(i, 1).Text, LookIn:=xlValues, lookat:=xlWhole)
                If Not c Is Nothing Then 
                     Ws.Cells(i, 3).Value = c.Offset(0, 16)
                     Ws.Cells(i, XX).Value = wb.fullname
                 end if
                Set c = Nothing

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 25
    Points
    25
    Par défaut
    Re bonjour effectivement il fallait comprendre colonne 2 et non 3 pour le reste c'est super çà marche super.
    Encore merci.

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

Discussions similaires

  1. [XL-2010] Comparer et stocker des données sur plusieurs fichiers Excel
    Par JohnKel dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/06/2015, 18h17
  2. [XL-2003] Récupération de données de plusieurs fichiers EXCEL fermés
    Par massol dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/03/2011, 20h09
  3. Réponses: 2
    Dernier message: 18/12/2010, 20h42
  4. [XL-2007] Importation des données sur plusieurs fichiers fermés
    Par starid dans le forum Excel
    Réponses: 8
    Dernier message: 18/07/2009, 18h54
  5. Fichiers de Données sur plusieurs repertoires
    Par habibdspcm dans le forum WinDev
    Réponses: 3
    Dernier message: 07/11/2008, 14h45

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