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érer valeurs depuis plusieurs fichiers [XL-2010]


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
    Janvier 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 14
    Par défaut Récupérer valeurs depuis plusieurs fichiers
    Bonjour ici !

    Pour un besoin de reporting tout bête, je planche sur un vba basé sur un exemple du forum.
    Mon besoin : Récupérer le contenu des cellules C2/D2/E2/F2 des feuilles "portables" et "fixes" depuis une 100ène de fichier XLSX.
    Et coller le tout dans un fichier "recap" vers les cellules A1/B1/C1/D1 de la feuille "SN".
    J'ai essayé quelque le code ci-dessous, mais il ne ce passe rien...

    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
    Sub Transferer()
    Dim dossier As Object, Fichier As Object, Chemin As String, Lg As Integer
    Application.ScreenUpdating = False
    Application.DisplayAlerts = True
     
    Chemin = ThisWorkbook.Path
    FName = Dir(Chemin & "\" & "*.xlsx")
    Set dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
    Lg = 10
     
    For Each Fichier In dossier.Files
    NomFichier = Fichier.Name
    If Not Fichier.Name = "RECUP.XLSM" Then
    Workbooks.Open Filename:=Chemin & "/" & NomFichier
     
    On Error Resume Next
     
    With Workbooks(NomFichier)
    .Sheets("portables").Range("C2").Copy ThisWorkbook.Sheets("SN").Range("A" & Lg)
    .Sheets("portables").Range("D2").Copy ThisWorkbook.Sheets("SN").Range("B" & Lg)
    .Sheets("portables").Range("E2").Copy ThisWorkbook.Sheets("SN").Range("C" & Lg)
    .Sheets("portables").Range("F2").Copy ThisWorkbook.Sheets("SN").Range("C" & Lg)
    .Sheets("fixes").Range("C2").Copy ThisWorkbook.Sheets("SN").Range("A" & Lg)
    .Sheets("fixes").Range("D2").Copy ThisWorkbook.Sheets("SN").Range("B" & Lg)
    .Sheets("fixes").Range("E2").Copy ThisWorkbook.Sheets("SN").Range("C" & Lg)
    .Sheets("fixes").Range("F2").Copy ThisWorkbook.Sheets("SN").Range("C" & Lg)
     
    .Close
     
    Lg = Lg + 1
     
    End With
    End If
     
    Next
     
    End Sub
    Si vous avez une idée ? Ne serais-ce qu'une petite piste
    Un grand merci !!!

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    afin d'éviter un code à la hussarde et de comprendre enfin ce qu'il se passe,
    supprimer la ligne n°16 ou tout du moins, la mettre en commentaire ‼

    Mettre aussi en commentaire la ligne n°8 car équivalente à la variable Chemin, ne sert donc à rien !

    Edit : je n'avais pas vu que cette ligne n°8 conditionne la boucle …
    Mais alors à quoi bon la fonction Dir alors ?

    C'est l'un ou l'autre, pas besoin des deux et Dir suffit, pas besoin de FSO …

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonsoir,

    Ca devrait fonctionner... Enlève la ligne :

    Si tu as une erreur, elle s'affichera.

  4. #4
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 14
    Par défaut
    Bonjour !

    J'ai enlevé le "On error..."
    Malheureusement ça ne fonctionne toujours pas, et pire il ne me toujours rien.

    C'est comme si l'instruction fonctionnait mais qu'il n'arrive pas à lire mes fichier xlsx !?

  5. #5
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    bonjour,
    C'est comme si l'instruction fonctionnait mais qu'il n'arrive pas à lire mes fichier xlsx !?
    ça peut être certaines imperfections de ton code.

    ici il me semble que tu copies simultanément les données des deux feuilles sources vers la même plage A/B/C/D de la feuille "SN" ThisWorkbook.Sheets("SN").Range("C" & Lg).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    .Sheets("portables").Range("C2").Copy ThisWorkbook.Sheets("SN").Range("A" & Lg)
    ...
    .Sheets("fixes").Range("C2").Copy ThisWorkbook.Sheets("SN").Range("A" & Lg)
    ...
    observes les adresses de destination de la copie pour les deux feuilles.

    il te faut aussi simplifier l'écriture du code avec des variables objets et l'instruction de copie de 4 lignes de code en une ligne:
    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
    .Sheets("portables").Range("C2:F2").Copy ThisWorkbook.Sheets("SN").Range("A" & lg & ":D" & lg)
     
    ou avec des variables
    Dim dest As Range, fichier As Worksheet
     
    Set dest = Worksheets("SN").Range("A10:D10")
    ...
    ...
       lg = 0
     
       for each ...
       lg = lg + 1
     
       Set fichier = Workbooks("x").Worksheets("portables")
       fichier.Range("C2:F2").Copy dest.Rows(lg)
     
       'décalage à droite pour ne pas écraser la première copie.
       Set fichier = Workbooks("x").Worksheets("fixes")
       fichier.Range("C2:F2").Copy dest.Rows(lg).Offset(, dest.Columns.Count + 1)

  6. #6
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 14
    Par défaut
    Bonjour à tous,

    Désolé mais je ne m'en sort toujours pas... Maintenant j'obtiens une erreur 91
    Je pense avoir suivi vos conseils, nettoyé mon code. Toujours pareil.
    Du coup j'ai uploadé un exemple simple, si vous trouvez une coquille

    http://www.sendspace.com/filegroup/8...QmPUveZETG6V7R

    2 fichiers xlsx contenant mes données
    1 fichier xlsm "recup.xlsm" fichier qui censé récupéré mes données de mes 2 fichiers xlsx...

    Merci

  7. #7
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 14
    Par défaut
    Problèmé résolu,

    Voici pour info la macro :
    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
    Option Explicit
     
    Sub Transferer()
    Dim Chemin As String, NomFichier As String
    Dim Dest As Range
    Dim Lg As Long
     
      Application.ScreenUpdating = False
     
      Chemin = ThisWorkbook.Path
      Set Dest = Worksheets("SN").Range("A10:D10")
     
      Lg = 10
      NomFichier = Dir(Chemin & "\" & "*.xlsx")
      Do While NomFichier <> ""
        If Not NomFichier = ThisWorkbook.Name Then
          With Workbooks.Open(Filename:=Chemin & "\" & NomFichier)
            Lg = Lg + 1
            .Sheets("HKN portables").Range("C2:F2").Copy Dest.Rows(Lg)
            .Sheets("HKN UC").Range("C2:F2").Copy Dest.Rows(Lg).Offset(, Dest.Columns.Count + 1)
            .Close
          End With
        End If
        NomFichier = Dir
      Loop
    End Sub

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

Discussions similaires

  1. [XL-2007] Récupérer valeurs de plusieurs fichiers dans un fichier
    Par cedmorelle dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/06/2014, 21h56
  2. récupérer valeurs depuis autre java fichier
    Par ly1819 dans le forum Général Java
    Réponses: 3
    Dernier message: 16/04/2010, 15h18
  3. Récupérer valeurs d'un fichier ini en php5
    Par lenoil dans le forum Langage
    Réponses: 2
    Dernier message: 29/03/2007, 17h05
  4. [XSL]récupérer une valeur de plusieurs fichiers XML
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 05/02/2006, 01h32
  5. Réponses: 1
    Dernier message: 01/02/2006, 16h10

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