Extraire des données a partir d'une liste de chemins

Nuage75

XLDnaute Nouveau
Bonjour à tous,

J'aimerais crée un outil de synthèse.
Je dispose d'une liste de chemins d’accès complets dans un fichier excel dans la colone D (environ 300 chemins + 6 par semaine ) :
D:\Mes documents\...\Dossier commun\sous dossier 1\nomdufichier.xls
D:\Mes documents\...\Dossier commun\sous dossier 1\nomdufichierx.xls
D:\Mes documents\...\Dossier commun\sous dossier 2\nomdufichier.xls

Dans ces classeurs, j'aimerais extraire les cellules A16, A19, E23, E24, E25 de la feuil1 et lister ces valeurs dans les colonnes qui suivent ce chemin d’accès.

Est-ce possible ?

Merci d'avance pour votre aide
 

Modeste

XLDnaute Barbatruc
Re : Extraire des données a partir d'une liste de chemins

Bonjour nuage75 et bienvenue,

Est-ce possible ?
Eh bien ... je n'en sais rien!
Sans avoir jamais vu ton fichier, comment pourrions-nous nous représenter son contenu, sa structure, etc? Qu'y a-t-il en A16, A19, etc.? Tu parles de chemins qui figurent en colonne D, puis des colonnes A et E. Qu'entends-tu par extraire? Que souhaites-tu obtenir comme résultat?

Tu vois notre souci?
Soit tu donnes des explications extrêmement détaillées, soit tu fournis un fichier représentatif (allégé et sans données confidentielles) qui nous permette de comprendre la demande, de vérifier l'existence de cas particuliers et de tester d'éventuelles propositions.
 

Modeste

XLDnaute Barbatruc
Re : Extraire des données a partir d'une liste de chemins

Re,

Toujours pas très clair pour moi, j'en ai peur :confused:
Ta colonne D contient un chemin d'accès et un nom de fichier ... pourquoi alors faire ensuite Fichier = Dir(Chemin & "*.xls")? Tu dois ouvrir le fichier dont le nom figure en colonne D ou chacun des fichiers sauvegardés à l'emplacement indiqué?
Avec le contenu actuel de la colonne D, ta macro ne saurait fonctionner ... mais tu as peut-être fait un truc un peu trop rapide pour déposer?
 

Nuage75

XLDnaute Nouveau
Re : Extraire des données a partir d'une liste de chemins

Je suis d'accord, Fichier = Dir(Chemin & "*.xls") est de trop.
Je doit ouvrir les fichiers dont le nom s'affiche dans la colonne D pour extraire les les valeurs qui m'intéressement.
Quant j'applique la macro dans son état actuel, elle m'affiche les valeurs de J:N en faisant une recherche de fichiers .xls dans le dossier ..\Devis001\
J'aimerais qu'elle m'affiche les valeurs de J:N grâce a la liste de la colonne D
 

Nuage75

XLDnaute Nouveau
Re : Extraire des données a partir d'une liste de chemins

J'ai un peut avancé, mais je n'arrive pas a concrétisé, j'ai remplacé le chemin du fichier par une variable.
Normalement elle me permet de parcourir la colonne D pour y trouver les chemins&fichiers et en extraire les cellules qui m’intéressent.
Cependant, ça ne marche pas et je ne sais pas pour quoi et je n'ais aucune idée si je chauffe ou si je suis totalement à coté de la plaque.

Sub recup()
ActiveWorkbook.Range("I7").Select
Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
Set FL1 = Worksheets("Feuil1")
NoCol = 4
For NoLig = 1 To Split(FL1.Range("D7:D6500").Address, "$")(4)
Var = FL1.Cells(NoLig, NoCol)

Range("I7").Select
Workbooks.Open Filename:=Dir(FL1)
Set Feuille = ActiveWorkbook.Sheets("MAQUETTE DEVIS")


ThisWorkbook.Activate
ActiveCell.Value = Feuille.Range("C3").Value
ActiveCell.Offset(0, 1).Value = Feuille.Range("A16").Value
ActiveCell.Offset(0, 2).Value = Feuille.Range("A19").Value
ActiveCell.Offset(0, 3).Value = Feuille.Range("E23").Value
ActiveCell.Offset(0, 4).Value = Feuille.Range("E24").Value
ActiveCell.Offset(0, 5).Value = Feuille.Range("E25").Value

Windows(Fichier).Close savechanges:=False
ThisWorkbook.Activate
Range("I65536").End(xlUp).Offset(1, 0).Select
Fichier = Dir ' Fichier suivant


Next
End Sub
 

Modeste

XLDnaute Barbatruc
Re : Extraire des données a partir d'une liste de chemins

Bonsoir,

Je n'ai pas encore tout compris, mais le code ci-dessous permet de:
- parcourir la colonne D (à partir de la ligne 7, jusqu'à la dernière cellule non-vide de cette même colonne)
- ouvrir chaque fichier dont le chemin d'accès et le nom sont renseignés en colonne D
- recopier en colonne F et G de ton fichier (celui contenant la macro), le contenu des cellules A16 et A19, d'une feuille nommée "MAQUETTE DEVIS" dans le ficher qui vient d'être ouvert
- refermer le fichier (celui dont le nom figure en colonne D

Vois avec ça si tu t'y retrouves ... moi j'ai toujours un peu de mal avec ton code et tes explications :eek:

Code à coller dans un Module standard
VB:
Sub extraireData()
Set f = ThisWorkbook.Sheets("Feuil1")
For lig = 7 To f.Cells(Rows.Count, 4).End(xlUp).Row
    Workbooks.Open Filename:=f.Cells(lig, 4)
    ThisWorkbook.Sheets(1).Cells(lig, 6) = ActiveWorkbook.Sheets("MAQUETTE DEVIS").[A16]
    ThisWorkbook.Sheets(1).Cells(lig, 7) = ActiveWorkbook.Sheets("MAQUETTE DEVIS").[A19]
    ActiveWorkbook.Close savechanges:=False
Next lig
End Sub
 

Nuage75

XLDnaute Nouveau
Re : Extraire des données a partir d'une liste de chemins

C'est juste parfait, c'est exactement ce dont j'avais besoin, j'essayais de retourner dans tous les sens cette macro en vain :
Sub recup()
Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
Set FL1 = Worksheets("Feuil1")
NoCol = 4
For NoLig = 7 To Split(FL1.UsedRange.Address, "$")(4)
Var = FL1.Cells(NoLig, NoCol)


Range("I7").Select
Fichier = Var
Do While Fichier <> ""
Workbooks.Open Filename:=Fichier
Set Feuille = ActiveWorkbook.Sheets("MAQUETTE DEVIS")

ThisWorkbook.Activate
ActiveCell.Value = Feuille.Range("C3").Value
ActiveCell.Offset(0, 1).Value = Feuille.Range("A16").Value
ActiveCell.Offset(0, 2).Value = Feuille.Range("A19").Value
ActiveCell.Offset(0, 3).Value = Feuille.Range("E23").Value
ActiveCell.Offset(0, 4).Value = Feuille.Range("E24").Value
ActiveCell.Offset(0, 5).Value = Feuille.Range("E25").Value

Windows(Fichier).Close savechanges:=False
ThisWorkbook.Activate
Range("I65536").End(xlUp).Offset(1, 0).Select
Fichier = Dir ' Fichier suivant

Loop
Next
End Sub

J'aimerais juste que le format des 3 dernières cellules soit au format monétaire en euro

J'ai également un dernier code à mettre au point.
Dans la Feuil2 du classeur, j'aimerais qu'à partir de la même liste de chemin&fichier il m'extraie toutes les lignes complètes contenant & Sous-total& et &Total&
 

Modeste

XLDnaute Barbatruc
Re : Extraire des données a partir d'une liste de chemins

Bonjour,

Il y a quand même des choses que tu ne précises pas, qu'on peut supputer (sans certitude, donc) en examinant ton code "à la loupe":
  • c'est en colonnes J et K qu'il faut recopier les valeurs de A16 et A19 (et non en colonne F comme je le proposais hier, en fonction des couleurs de cellules)
  • s'il faut copier les valeurs de E23:E25 vers la plage L7:N7 (pour le premier fichier traité), il faut convertir une plage verticale en horizontale!?
  • enfin, je suis parti du principe que le format monétaire existait dans le fichier source, en colonne E :confused: je propose donc un copier-coller (pour récupérer contenus et formats) avec collage spécial, pour transposer.

Tu nous diras si c'est correct et complet?

VB:
Sub extraireData()
Set f = ThisWorkbook.Sheets("Feuil1")
For lig = 7 To f.Cells(Rows.Count, 4).End(xlUp).Row
     Workbooks.Open Filename:=f.Cells(lig, 4)
     With ThisWorkbook.Sheets(1)
        .Cells(lig, 10) = ActiveWorkbook.Sheets("MAQUETTE DEVIS").[A16]
        .Cells(lig, 11) = ActiveWorkbook.Sheets("MAQUETTE DEVIS").[A19]
        ActiveWorkbook.Sheets("MAQUETTE DEVIS").[E23:E25].Copy
        .Cells(lig, 12).Resize(1, 3).PasteSpecial Transpose:=True
     End With
     ActiveWorkbook.Close savechanges:=False
Next lig
End Sub
Une fois que le code aura été testé, pour éviter le rafraîchissement de l'écran pendant la procédure, je suggère d'ajouter Application.ScreenUpdating = False juste avant le 'For'. Avant le End Sub, ne pas oublier Application.ScreenUpdating = True
 

Nuage75

XLDnaute Nouveau
Re : Extraire des données a partir d'une liste de chemins

Bonjour,

C'est parfait, pour la mise en place de A16 et A19 dans les colonnes J et K, je suis parvenu à le faire et pour le format monétaire, votre nouveau code à résolu mon problème.
Il me reste un petit détail avant de passer à l'étape suivante.
Certains fichiers comportent des liaisons avec d'autres classeurs, il me propose donc de les mettre à jour ou non. Est-il possible de rajouter un code qui répondrait automatiquement à la requête au lieu de le faire manuellement ?

Pouvez vous m'aider pour la suite:
Dans la Feuil2 du classeur, j'aimerais qu'à partir de la même liste de chemin&fichier il m'extraie toutes les lignes complètes contenant & Sous-total& et &Total& ?

Merci pour votre aide
 

Modeste

XLDnaute Barbatruc
Re : Extraire des données a partir d'une liste de chemins

Re,

Pour la mise à jour des liens à l'ouverture, place ton curseur -dans le code- sur le mot Open et appuie sur la touche F1 :) la réponse devrait t'apparaître telle une fragile bougie dans la nuit noire :p

Dans la Feuil2 du classeur, j'aimerais qu'à partir de la même liste de chemin&fichier il m'extraie toutes les lignes complètes contenant & Sous-total& et &Total& ?
Je rappelle:
  1. en principe, chaque nouvelle question devrait faire l'objet d'une nouvelle discussion, avec un titre aussi évocateur que possible (de manière que les futures recherches puissent pointer vers ce nouveau fil)
  2. si les données dont tu parles "& Sous-total& et &Total&" figurent dans tes fichiers à ouvrir, nous n'avons jamais vu la couleur (ni le contenu) des fichiers en question. Dans ta future discussion, pense à en déposer un exemple, parce que là, même moi qui ai fini par comprendre ce que tu voulais faire, je ne sais absolument pas de quoi tu parles :confused: la touche '&' de ton clavier est restée coincée, c'est de l'ousbek, une portion de texte qui apparaîtra quelque part, etc.?

Pense aussi à prendre le temps d'expliquer aussi clairement que possible ce que tu souhaites faire!

Bonne continuation :)
 

Discussions similaires