Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
994 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  récupération données dans plusieurs classeurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

récupération données dans plusieurs classeurs

n°1777632
jpha
Posté le 26-08-2008 à 11:05:20  profilanswer
 

Bonjour,  
j'ai le répertoire C:\MESDOCUMENTS-F\CCOB1 qui contient plusieurs centaines de classeurs excel contenant chacun quelques feuilles.Sur la 1ère feuille de chaque classeur, j'ai besoin de récupérer les données de la celllule D4,F4,E9,F50 à F53 de les copier dans une feuille d'un nouveau classeur pour en faire un tableau récapitulatif comme suit  
 
nom du classeur D4 F4 E9 F50 F51 F52 F53  
Classeur 1        
Classeur 2        
etc  
 
je n'arrive pas à écrire le code d'une macro qui ouvre chaque classeur de ce répertoire , récupére les données voulues, les recopie sur la nouvelle feuille, referme le classeur, ouvre le suivant, récupére les données, le referme et ainsi de suite jusqu'au dernier classeur et affiche le tableau récapitulatif.  
Quelqu'un pourrait il m'aider?  
Merci d'avance  
jpha
 


---------------
jpha
mood
Publicité
Posté le 26-08-2008 à 11:05:20  profilanswer
 

n°1777680
hnkmic
Posté le 26-08-2008 à 12:29:57  profilanswer
 

ouvrir tout les fichiers d'un repertoire  source (exelabo)
 
Dim F
With Application.FileSearch
.NewSearch
.LookIn = "C:\Temp"
.Execute
On Error Resume Next
For Each F In .FoundFiles
Workbooks.Open F
Next F
End With
 
puis je te passe les commande classic de copie de cellule ..
pour chaque activeworkbook  copie des cellules , fermeture ...
 
si ca peux aider ...
 
 

n°1777714
jpha
Posté le 26-08-2008 à 14:10:11  profilanswer
 

cela ne m'aide pas beaucoup mais un grand merci tout de même  
jpha

n°1777720
86vomito33
Posté le 26-08-2008 à 14:31:29  profilanswer
 

ca devrait pourtant
 
je te conseille de faire ce que tu veux en l'enregistrant a l'aide de outil/macro/enregistre macro
 
et puis kan tu auras une base sur laquelle travailler ca ira mieux

n°1777978
86vomito33
Posté le 26-08-2008 à 19:47:40  profilanswer
 

Dim F
With Application.FileSearch
.NewSearch
.LookIn = "C:\Temp"
.Execute
On Error Resume Next
i=1
For Each F In .FoundFiles
Workbooks.Open F
workbooks(F).sheet(1).range("D4" ).copy(workbook("recap.xls" ).sheets("feuillerecap" ).cells(i+1,1))
......(6 lignes de plus)
workbooks(F).close
i=i+1
Next F

n°1778218
jpha
Posté le 27-08-2008 à 12:24:53  profilanswer
 

cela ne marche ( 2 problèmes)
1) blocage sur Workbook (avec message sub ou function non définie):j'ai mis alors ThisWorkbook , puis ensuite  
2) erreur 445 (cet objet ne gère pas cette action)

n°1779173
kiki29
Posté le 28-08-2008 à 15:14:31  profilanswer
 
n°1780385
jpha
Posté le 30-08-2008 à 21:47:35  profilanswer
 

merci 86 vomito33: j'ai repris ton idée et modifier le code car filesearch n'est  plus géré (a priori) par excel 2007 et maintenant je bloque au niveau de WorkBook avec un message d'erreur (sub ou function non définie)
peux tu m'expliquer ?
 
Sub test()
    Dim Chemin As String, Fichier As String  
    Chemin = "C:\test5\"
    Fichier = Dir(Chemin & "*.xls" )
    Do While Fichier <> ""
        Workbooks.Open Chemin & Fichier
        Fichier = Dir
        i = 1
         
            Workbooks(Fichier).Sheet(1).Range("D4" ).Copy (Workbook("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i + 1, 1))
            Workbooks(Fichier).Sheet(1).Range("F4" ).Copy (Workbook("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i + 1, 2))
            Workbooks(Fichier).Sheet(1).Range("E9" ).Copy (Workbook("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i + 1, 3))
            Workbooks(Fichier).Sheet(1).Range("F50" ).Copy (Workbook("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i + 1, 4))
            Workbooks(Fichier).Sheet(1).Range("F51" ).Copy (Workbook("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i + 1, 5))
            Workbooks(Fichier).Sheet(1).Range("F52" ).Copy (Workbook("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i + 1, 6))
            Workbooks(Fichier).Sheet(1).Range("F53" ).Copy (Workbook("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i + 1, 7))
            Workbooks(Fichier).Close
            i = i + 1
    Loop
End Sub

n°1780406
86vomito33
Posté le 31-08-2008 à 00:44:35  profilanswer
 

avec un "s" c'est mieux
par contre ton i=1 et i=i+1 sont pas trés bien placé

n°1780414
86vomito33
Posté le 31-08-2008 à 02:48:34  profilanswer
 

et puis la ligne

Code :
  1. Workbooks(Fichier).Sheet(1).Range("D4" ).Copy (Workbook("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i + 1, 1))


doit etre transforme en:

Code :
  1. Workbooks(Fichier).Activate
  2. Sheets("Feuil1" ).Select
  3. Range("D4" ).Select
  4. Selection.Copy
  5. Workbooks("Classeur1.xls" ).Activate
  6. Sheets("Feuil1" ).Cells(i + 1, 1).Select
  7. ActiveSheet.Paste


Message édité par 86vomito33 le 31-08-2008 à 02:49:00
mood
Publicité
Posté le 31-08-2008 à 02:48:34  profilanswer
 

n°1780757
86vomito33
Posté le 31-08-2008 à 23:44:12  profilanswer
 

je sais pas ce que j'avais hier mai faut que j'arrete la fumette
 
comme cela ca marche
 

Code :
  1. Sub test()
  2. Dim Chemin As String, Fichier As String
  3. Chemin = "C:\test5\"
  4. Fichier = Dir(Chemin & "*.xls" )
  5. i = 1
  6. Set fso = New Scripting.FileSystemObject
  7. Set DossierSource = fso.GetFolder(Chemin)
  8. For Each f In DossierSource.Files
  9. fbis = Mid(f, 10, Len(f) - 9)
  10. Workbooks.Open Chemin & fbis
  11. Workbooks(fbis).Activate
  12. Workbooks(fbis).Sheets(1).Range("A1" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 1))
  13. Workbooks(fbis).Sheets(1).Range("A1" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 2))
  14. Workbooks(fbis).Sheets(1).Range("A1" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 3))
  15. Workbooks(fbis).Sheets(1).Range("A1" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 4))
  16. Workbooks(fbis).Sheets(1).Range("A1" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 5))
  17. Workbooks(fbis).Sheets(1).Range("A1" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 6))
  18. Workbooks(fbis).Sheets(1).Range("A1" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 7))
  19. Workbooks(fbis).Close
  20. i = i + 1
  21. Next
  22. End Sub


 
il faut activer (si c pas fait) dans outil/reference/microsoft scripting runtime


Message édité par 86vomito33 le 31-08-2008 à 23:47:55
n°1780885
jpha
Posté le 01-09-2008 à 11:29:43  profilanswer
 

super :cela fonctionne  sauf que   dans mon exemple j'ai omis de préciser que la cellule A1 contient une formule et donc la macro me récupère un #REF! au lieu de la valeur de A1 et il faut faire un collage special pour récupérer uniquement la valeur.peux tu me l'écrire en VBA?
merci
jpha

n°1781577
jpha
Posté le 02-09-2008 à 19:22:35  profilanswer
 

Sub test()
Dim Chemin As String, Fichier As String
Chemin = "C:\test5\"
Fichier = Dir(Chemin & "*.xls" )
i = 1
Set fso = New Scripting.FileSystemObject
Set DossierSource = fso.GetFolder(Chemin)
 
For Each F In DossierSource.Files
fbis = Mid(F, 10, Len(F) - 9)
Workbooks.Open Chemin & fbis
Workbooks(fbis).Activate
Workbooks(fbis).Sheets(1).Range("D4" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 1))
Workbooks(fbis).Sheets(1).Range("F4" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 2))
Workbooks(fbis).Sheets(1).Range("E9" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 3))
Workbooks(fbis).Sheets(1).Range("F50" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 4).Paste.Value)
Workbooks(fbis).Sheets(1).Range("F51" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 5))
Workbooks(fbis).Sheets(1).Range("F52" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 6))
Workbooks(fbis).Sheets(1).Range("F53" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 7).Paste.Value)
Workbooks(fbis).Close
i = i + 1
Next
 
End Sub
 
dans les 2 cellules F50 et F53, je n'arrive pas à écrire proprement le code d'un PasteSpecial car le copy que tu m'as donné me récupére un #REF! +  le format. Et l'enregistreur de macro me donne un code pas très "propre".Je veux donc récupérer seulement la valeur  de ces celllules ( sans  le format et la formule) et l'écrire "proprement". Ce que j'ai écrit pour ces cellules F50 et F53 me donne une erreur 438 (propriété ou méthode non gérée par cet objet)  
merci à toi  86vomito33 de me dépanner
jpha

n°1781733
jpha
Posté le 03-09-2008 à 09:41:57  profilanswer
 

merci 86vomito33  
ce code fonctionne parfaitement (XP EXCEL 2007) et je le donne pour d'autres qui pourraient avoir le même cas de figue à traiter.
Il récupére donc les valeurs de plusieurs cellules dans différents classeurs (ici +- 250) et en fait une récap dans un autre
mon probléme est donc résolu  
La seule chose qui reste, c'est que sur les cellules D4,F4,F51 et F52, il récupère aussi le quadrillage alors que pourtant , je n'ai indiqué que la Value. J'avoue ne pas comprendre et si tu as une idée, je suis preneur
encore mille merci à toi à toute l'équipe
jpha
 
Sub test()
Dim Chemin As String, Fichier As String
Chemin = "C:\test5\"
Fichier = Dir(Chemin & "*.xls" )
i = 1
Set fso = New Scripting.FileSystemObject
Set DossierSource = fso.GetFolder(Chemin)
 
For Each F In DossierSource.Files
    fbis = Mid(F, 10, Len(F) - 9)
    Workbooks.Open Chemin & fbis
    Workbooks(fbis).Activate
       
        'Workbooks(fbis).Sheets(1).Range("D4" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 1))
        Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 1) = Workbooks(fbis).Sheets(1).Range("D4" ).Value
 
        'Workbooks(fbis).Sheets(1).Range("F4" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 2))
        Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 2) = Workbooks(fbis).Sheets(1).Range("F4" ).Value
 
        'Workbooks(fbis).Sheets(1).Range("E9" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 3))
        Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 3) = Workbooks(fbis).Sheets(1).Range("E9" ).Value
 
        'Workbooks(fbis).Sheets(1).Range("F50" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 4))
        Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 4) = Workbooks(fbis).Sheets(1).Range("F50" ).Value
 
        'Workbooks(fbis).Sheets(1).Range("F51" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 5))
        Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 5) = Workbooks(fbis).Sheets(1).Range("F51" ).Value
 
        'Workbooks(fbis).Sheets(1).Range("F52" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 6))
        Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 6) = Workbooks(fbis).Sheets(1).Range("F52" ).Value
 
        'Workbooks(fbis).Sheets(1).Range("F53" ).Copy (Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 7))
        Workbooks("01-RECAP-TEST5.xls" ).Sheets("feuillerecap" ).Cells(i, 7) = Workbooks(fbis).Sheets(1).Range("F53" ).Value
         
     Workbooks(fbis).Close
i = i + 1
Next
 
End Sub

n°2240985
leamsi132
Posté le 22-10-2014 à 17:08:33  profilanswer
 

Bonjour à tous,
 
merci pour toutes ces infos.
J'essaye de faire la même chose, je me suis alors inspiré du programme précédent.
Cependant, lors de l'exécution il bloque à ce niveau la : Workbooks.Open Chemin & fbis  (avec erreur '1004' : La méthode 'Open' de l'objet 'Workbooks' a échoué)
 
Je n'arrive pas à débloquer le problème.
 
si quelqu'un peut m'aider  
 
voici le code :
Sub test()
Dim Chemin As String, Fichier As String
Chemin = "C:\Test...etc"
Fichier = Dir(Chemin & "*.xls" )
i = 1
Dim fso As Object
 
Set fso = CreateObject("Scripting.FileSystemObject" )
Set DossierSource = fso.GetFolder(Chemin)
 
For Each F In DossierSource.Files
    fbis = Mid(F, 10, Len(F) - 9)
    Workbooks.Open Chemin & fbis
    Workbooks(fbis).Activate
         
        'Workbooks(fbis).Sheets(1).Range("M2" ).Copy (Workbooks("Pont-GDA.xls" ).Sheets("pont gda" ).Cells(i, 1))
        Workbooks("Pont-GDA.xls" ).Sheets("pont gda" ).Cells(i, 1) = Workbooks(fbis).Sheets(1).Range("M2" ).Value
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  récupération données dans plusieurs classeurs

 

Sujets relatifs
EXCEL - références dans une sélection de plusieurs plagesErreur création base de données
[BAT/VBS] Plusieurs questionsUpdate de plusieurs valeurs d'une table
Sélection de données après filtre excel et envoi par OutlookProblème recuperation de valeurs
Comment récupérer des données de <select> <option>[VS] partager un fichier de class ds plusieurs projets d'une solution
Cours et exercices : Base de données[newbie] Modifier données dans un DBgrid?
Plus de sujets relatifs à : récupération données dans plusieurs classeurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR