Se connecter avec
S'enregistrer | Connectez-vous

Macro: étendre une recherche sur un repertoire

Dernière réponse : dans Programmation

oki sa sera fait juste après cette question

maintenant j'ai cette macro :

  1. Sub test()
  2.  
  3. Workbooks.OpenText Filename:= "D:\Users\woow\Desktop\RAF1.txt"
  4. Workbooks.OpenText Filename:= "D:\Users\woow\Desktop\NIR1.txt"
  5. Columns("A:A" ).Select
  6. Selection.NumberFormat = "0"
  7. Sheets.Add
  8. ActiveSheet.Name = "Resultat"
  9. i = 1
  10. For j = 2 To 16
  11. valeur = Workbooks("NIR1.txt" ).Sheets("NIR1" ).Cells(j, 1)
  12. Workbooks("RAF1.txt" ).Activate
  13. Set celluletrouvee = Range("A:A" ).Find(valeur)
  14. ligne = celluletrouvee.Row
  15. Do
  16. Workbooks("NIR1.txt" ).Sheets("Resultat" ).Cells(i, 1) = Workbooks("RAF1.txt" ).Sheets("RAF1" ).Cells(ligne, 1)
  17. i = i + 1
  18. ligne = ligne + 1
  19. Loop Until (Left(Workbooks("RAF1.txt" ).Sheets("RAF1" ).Cells(l igne, 1), 14)) = "S30.G01.00.001"
  20. Next
  21. End
  22. End Sub



Donc cette macro recherche à partir de NIR1.txt dans le fichier RAF1.txt , ce que je veux c'est lui spécifier un répertoire RAF ( qui contient plusieurs fichiers RAF*.txt) et faire la même recherche dedans.
J'ai fais un essai mais sa ne donne rien
J'espère que je suis assez clair sur ce point .
Merci à vous tous

Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

Wahoooooo !!! Génial.
Je vois que tu fais de gros progrès et que tu cherches des solutions. Et même que tu en trouves de bonnes.
:) 

A la ligne 31, tu te fies à ce qui est actif, et c'est une grave erreur que je combats inlassablement sur ce forum.
Eh, je déconne pas, avise : http://www.google.com/search?q=zeb+activetruc+site%3Apr...

Or donc, au premier passage, l'OpenText() de la ligne 28 fait le boulot d'activer ce classeur, mais ensuite ?

Alors je vais te proposer autre chose, et même te le donner tout cuit, tout rôti dans le bec, pourvu que tu acceptes de l'étudier :
Ouvre ce classeur en dehors de la boucle. C'est d'ailleurs un bon principe, toujours en mettre le moins possible dans la boucle.

Allez :
  1. Option Explicit
  1. Sub TraiterFichierRAF(ws_NIR2 As Worksheet, file_RAF As File)
  2. Dim wb_RAF As Workbook
  3. Dim ws_RAF As Worksheet
  4. Dim ws_RAF_resultat As Worksheet
  5. Dim cel_NIS_cherchee As Range
  6. Dim cel_RAF_trouvee As Range
  7. Dim cel_REF_resultat As Range
  8.  
  9. Workbooks.OpenText Filename:=file_RAF.Path
  10. Set wb_RAF = ActiveWorkbook
  11. Set ws_RAF = wb_RAF.Worksheets(1)
  12.  
  13. Set ws_RAF_resultat = wb_RAF.Worksheets.Add
  14. ws_RAF_resultat.Name = "Resultat"
  15. Set cel_REF_resultat = ws_RAF_resultat.Range("A1")
  16. For Each cel_NIS_cherchee In ws_NIR2.Range("A1:A5")
  17. Set cel_RAF_trouvee = ws_RAF.Columns(1).Find(cel_NIS_cherchee.Value)
  18. If Not cel_RAF_trouvee Is Nothing Then
  19. Do
  20. cel_REF_resultat.Value = cel_RAF_trouvee.Value
  21. Set cel_REF_resultat = cel_REF_resultat.Offset(1)
  22. Set cel_RAF_trouvee = cel_RAF_trouvee.Offset(1)
  23. Loop Until cel_RAF_trouvee.Text Like "S30.G01.00.001*"
  24. End If
  25. Next
  26. End Sub
  1. Sub TraiterRepertoire(ByRef nomfic_NIR2 As String, ByRef repertoire_RAF As String)
  2. Dim FSO As New FileSystemObject
  3. Dim file_RAF As File
  4. Dim wb_NIR2 As Workbook
  5.  
  6. Workbooks.OpenText nomfic_NIR2
  7. Set wb_NIR2 = ActiveWorkbook
  8. wb_NIR2.Worksheets(1).Columns(1).NumberFormat = "0"
  9.  
  10. For Each file_RAF In FSO.GetFolder("C:\Projet\RAF").Files
  11. If UCase(file_RAF.Name) Like "RAF*" Then TraiterFichierRAF wb_NIR2.Worksheets(1), file_RAF
  12. Next
  13.  
  14. wb_NIR2.Close False
  15. End Sub
  1. Sub start()
  2. Dim nomfic_NIR2 As String
  3. Dim nomfic_RAF As String
  4.  
  5. TraiterRepertoire "D:\Users\woow\Desktop\NIR2.txt", "C:\Projet\RAF"
  6. End Sub


J'ai un peu changé les noms de variables, virer ligne qui ne servait plus, et j'ai viré le Call - ça ne sert à rien.
Je passe à TraiterFichierRAF() des objets plutôt que des noms de fichiers. Et proprement, je ferme le fichier NIR2.txt.
Et puis pour faire joli, j'ai mis un autre Like.

Etudie-moi ça bien. Et si tu as des questions ou des points d'interrogation, réflechis-y encore. Si ça ne suffit pas, pose-nous autant de questions que tu veux :D 

woow74 a dit :
Merci pour l'effort de me répondre.Mais: Pourquoi être si desagréable en répondant aux demandes des gens??

Eh, ça valait la peine de passer outre mon côté ronchon, non ? :lol:  :lol:  :lol: 

Donc je me suis interessé à FileSystemObject , je sais que je dois cocher la case Microsoft scripting runtime pour declarer tout sa , mais après c 'est tout , je ne vois vraiment pas comment je pourrais tout integrer à mon code j'ai pris des bouts que j'ai ajouté à ma maco mais elle se lance pas.
C'est pour ces lignes de codes où je ne vois pas comment je pourrai introduire à la macro de faire le boulot sur un repertoire RAF et non pas sur le fichier RAF1... :cry: 

  1. Workbooks.OpenText Filename:="D:\Users\ysebbarh.EMEA\Desktop\test_macro\RAF1.txt"
  2. Set wb_RAF1 = ActiveWorkbook
  3. Set ws_RAF1 = wb_RAF1.Worksheets(1)


  1. Set cel_trouvee = ws_RAF1.Columns(1).Find(cel_cherchee.Value)
Expert Programmation

Ajoute Windows Script Host Object Model aux références de ton projet.
(Ca va ? C'est pas trop du chinois ? :lol:  )

Et maintenant, étudie ça :
  1. Dim FSO As New FileSystemObject
  2. Dim fldr_RAF As Folder
  3. Dim file_RAF As File
  4.  
  5. Set fldr_RAF = FSO.GetFolder("D:\Users\woow\Desktop\RAF")
  6.  
  7. MsgBox "Bonjour, je suis le répertoire " & fldr_RAF.Name
  8.  
  9. For Each file_RAF In fldr_RAF.Files
  10. If UCase(file_RAF.Name) Like "RAF*.XLS" Then
  11. MsgBox "J'ai trouvé le fichier " & file_RAF.Name & ". Il faudrait le traiter. " & vbCrLf & _
  12. "Son nom complet est : " & vbCrLf & _
  13. file_RAF.Path
  14. Else
  15. MsgBox "J'ai trouvé le fichier " & file_RAF.Name & ". Mais il ne nous intéresse pas."
  16. End If
  17. Next
Tu as pratiquement tous les éléments.
A toi de les assembler.

Bonjour zeb , bonjour le forum
Je reviens vers vous car j'ai passé le weekend à essayer avec ma macro mais aucun résultats...
Pouvez vous me dire comment je pourrai introduire le répertoire à parcourir dans ma macro svp.
Merci
Expert Programmation

:/ 

  1. Option Expplicit
  1. Sub TraiterFichierRAF(ByRef nomfic_NIR As String, ByRef nomfic_RAF As String)
  2. Dim wb_RAF As Workbook
  3. Dim wb_NIR As Workbook
  4. Dim sb_RAF As Worksheet
  5. Dim sb_NIR As Worksheet
  6. Dim ws_resultat As Worksheet
  7. Dim cel_cherchee As Range
  8. Dim cel_trouvee As Range
  9. Dim cel_resultat As Range
  10.  
  11. Workbooks.OpenText Filename:=nomfic_NIR
  12. Set wb_NIR = ActiveWorkbook
  13. Set ws_NIR = wb_NIR.Worksheets(1)
  14. ws_NIR.Columns(1).NumberFormat = "0"
  15.  
  16. Workbooks.OpenText Filename:=nomfic_RAF
  17. Set wb_RAF = ActiveWorkbook
  18. Set ws_RAF = wb_RAF.Worksheets(1)
  19.  
  20. Set ws_resultat = wb_NIR.Worksheets.Add
  21. ws_resultat.Name = "Resultat"
  22. Set cel_resultat = ws_resultat.Range("A1" )
  23.  
  24. For Each cel_cherchee In ws_NIR.Range("A2:A16" )
  25. Set cel_trouvee = ws_RAF.Columns(1).Find(cel_cherchee.Value)
  26. Do
  27. cel_resultat.Value = cel_trouvee.Value
  28. Set cel_resultat = cel_resultat.Offset(1)
  29. Set cel_trouvee = cel_trouvee.Offset(1)
  30. Loop Until (Left(cel_trouvee.Text, 14)) = "S30.G01.00.001"
  31. Next
  32. End Sub
  1. Sub TraiterRepertoire(ByRef nomfic_NIR As String, ByRef repertoire_RAF As String)
  2. Dim FSO As New FileSystemObject
  3. Dim fldr_RAF As Folder
  4. Dim file_RAF As File
  5.  
  6. Set fldr_RAF = FSO.GetFolder(repertoire_RAF)
  7.  
  8. For Each file_RAF In fldr_RAF.Files
  9. If UCase(file_RAF.Name) Like "RAF*.XLS" Then TraiterFichierRAF nomfic_NIR, file_RAF.Path
  10. Next
  11. End Sub

Merci zeb pour ta réponse ,
Si j'ai bien compris se sont deux macro qui s'excecutent l'une après l'autre et c'est la deuxième qui fait le traitement sur le repertoire en entier?
j'ai une gene à revenir vers vous tout le temps , mais je me dis aussi que c'est l'esprit du forum et que moi aussi je suis prêt à aider autant de fois que je peux si on me demande des explications :D 
Merci Zeb
Expert Programmation

Pas de problème, tu reviens quand tu veux, autant de fois que tu veux.
En revanche, nous te répondons de la même manière : si nous le voulons bien, , quand nous le voulons, autant de fois que nous le voulons. C'est pourquoi il faut nous ménager...

Par exemple, toutes les questions pertinentes sont les bienvenues. Celles auxquelles tu peux répondre toi-même grâce à un tout petit peu de recherche ou d'effort, non. Pas du tout, même. :o 

Exemple : Non, les deux macros (on dit plutôt fonction, ou en l'occurrence plus précisément procédure) ne s'exécutent pas l'une après l'autre. Relis la ligne 9 de la seconde. Essaie de comprendre la mécanique, en gros. Puis lance le traitement pas à pas, en essayant de bien comprendre.

Le travail est d'autant plus simple que je t'ai tout donné : le code des deux fonctions. Comment faire pour le pas à pas ? C'est ici : http://www.presence-pc.com/forum/ppc/Programmation/tuto...

Bonjour le forum , Bonjour zeb,
je te remercie beaucoup pour le topo sur la procédure pas à pas ;) 
j'ai regroupé les deux procédures que tu as eu la gentillesse de me fournir et sa a marché dans un premier temps :D  , mais une fois j'ai changé le nom d'un fichier sa me met une erreur à cette ligne :
  1. cel_resultat.Value = cel_trouvee.Value


Comme quoi erreur '91' , variable objet ou variable de bloc With non défini
Une idée? pourtant sa avait marché au debut :(  et la même quand je remet les mêmes fichiers sa ne marche plus ....
Help please.
  1. Option Explicit
  2.  
  3. Sub TraiterRepertoire(ByRef nomfic_NIR2 As String, ByRef repertoire_RAF As String)
  4. Dim FSO As New FileSystemObject
  5. Dim fldr_RAF As Folder
  6. Dim file_RAF As File
  7.  
  8.  
  9. Set fldr_RAF = FSO.GetFolder("C:\Projet\RAF")
  10.  
  11. For Each file_RAF In fldr_RAF.Files
  12. If UCase(file_RAF.Name) Like "RAF*" Then TraiterFichierRAF nomfic_NIR2, file_RAF.Path
  13. Next
  14. End Sub
  15.  
  16. Sub TraiterFichierRAF(ByRef nomfic_NIR2 As String, ByRef nomfic_RAF3 As String)
  17. Dim wb_RAF3 As Workbook
  18. Dim wb_NIR2 As Workbook
  19. Dim ws_RAF3 As Worksheet
  20. Dim ws_NIR2 As Worksheet
  21. Dim ws_resultat As Worksheet
  22. Dim cel_cherchee As Range
  23. Dim cel_trouvee As Range
  24. Dim cel_resultat As Range
  25.  
  26. Workbooks.OpenText Filename:="d:\Users\woow\Desktop\NIR2.txt"
  27. Set wb_NIR2 = ActiveWorkbook
  28. Set ws_NIR2 = wb_NIR2.Worksheets(1)
  29. ws_NIR2.Columns(1).NumberFormat = "0"
  30.  
  31. Workbooks.OpenText Filename:="C:\Projet\RAF\RAF3.txt"
  32. Set wb_RAF3 = ActiveWorkbook
  33. Set ws_RAF3 = wb_RAF3.Worksheets(1)
  34.  
  35. Set ws_resultat = wb_NIR2.Worksheets.Add
  36. ws_resultat.Name = "Resultat"
  37. Set cel_resultat = ws_resultat.Range("A1")
  38.  
  39. For Each cel_cherchee In ws_NIR2.Range("A2:A7")
  40. Set cel_trouvee = ws_RAF3.Columns(1).Find(cel_cherchee.Value)
  41. Do
  42. cel_resultat.Value = cel_trouvee.Value
  43. Set cel_resultat = cel_resultat.Offset(1)
  44. Set cel_trouvee = cel_trouvee.Offset(1)
  45. Loop Until (Left(cel_trouvee.Text, 14)) = "S30.G01.00.001"
  46. Next
  47. End Sub
  48.  
  49.  
  50. Sub start()
  51. Dim nomfic_NIR2 As String
  52. Dim nomfic_RAF3 As String
  53. Dim repertoire_RAF As String
  54. Call TraiterRepertoire(nomfic_NIR2, repertoire_RAF)
  55.  
  56. Call TraiterFichierRAF(nomfic_NIR2, nomfic_RAF3)
  57. End Sub

re bonjour,
Je pense j'ai trouvé l'erreur , dès qu'il ne trouve pas une valeur recherchée dans le fichier qui est ouvert , la macro s'arrête car dans le code il n y a pas de ligne qui dit si on trouve pas la valeur recherchée on passe à l'autre...
Quelqu'un peut m'aider sur ce point? (je ne connais pas la syntaxe pour lui donner cet ordre :??: 
Merci tout le monde :) 
Expert Programmation

Salut,

Mais qu'est-ce que tu fiches ? Pourquoi appelles-tu la procédure TraiterFichierRAF() dans Start() ???? Relis mon message précédent.

A ta ligne 54, n'utilise pas des variables, mais mets directement les valeurs qui t'intéressent : "d:\Users\woow\Desktop\NIR2.txt", "C:\Projet\RAF". Et remets les variables correctement dans TraiterRepertoire() et TraiterFichierRAF().

-----------------------------------------

Sinon, ton diagnostique est très bon. Et si la valeur n'est pas trouvée :??: 
J'avoue que j'aurais dû prendre ce cas en compte.

Je t'invite à exécuter ce code sur une page vide ou au moins qui ne contient pas la valeur "introuvable" bien sûr.
  1. Dim trouve As Range
  2.  
  3. Set trouve = Worksheets(1).Cells.Find("introuvable")
  4. Stop
Le Stop n'arrête pas mais suspend l'exécution. Le contenu des variables est maintenu. Avec la souris, survole la variable trouve ou bien ajoute-la à tes espions (voir le topic sur le débogage). Alors, que vois-tu comme valeur pour trouve ? La solution est proche ;) 

Si tu trouves tout seul, dis-le nous.
Sinon, je te donnerais Rien (*) !

__________
(*) Joke inside :lol: 

re bonjour,
Pour la solution à mon petit problème j'ai trouvé c'est :

  1. Set cel_trouvee = ws_RAF.Columns(1).Find(cel_cherchee.Value)
  2. If Not cel_trouvee Is Nothing Then
  3. Do
  4. cel_resultat.Value = cel_trouvee.Value
  5. Set cel_resultat = cel_resultat.Offset(1)
  6. Set cel_trouvee = cel_trouvee.Offset(1)
  7. ligne = ligne + 1
  8. Loop Until (Left(cel_trouvee.Text, 14)) = "S30.G01.00.001"
  9. End If


Maintenant , je ne comprend pas pourquoi tu me dis (Mais qu'est-ce que tu fiches ? Pourquoi appelles-tu la procédure TraiterFichierRAF() dans Start() ) d'après ma compréhension ( je sais qu'elle est très limité en VBA :D  ) je devais appeler les deux fonctions car l'une dépend de l'autre nn? :??: 
Croi moi que je fais de mon mieux pour trouver les solutions à mes problèmes et que je ne suis pas là pour trouver des toutes faites mais bon quand je bloque , je bloque ;) 

Merci zeb

RE

De plus quand je procède pas à pas , à chaque fois que la boucle se termine et repasse pour ouvrir un nouveau fichier , à cette ligne
  1. Workbooks.OpenText Filename:="d:\Users\woow\Desktop\NIR2.txt"

Il me dit que le fichier NIR2 est ouvert et que si je l'ouvre à nouveau les données seront perdues ( chose qui arrive à chaque fois car la feuille Resultat est ouverte en mm temps avec NIR2 du coup pour la boucle d'après il ouvre encore le même fichier RAF3 )
J'espère que je me fais comprendre :wahoo: 

c'est vraiment sa Zeb ( si je laisse le code comme je l'ai posté tout à l'heure) , quand la boucle se réinitialise elle ouvre le même fichier RAF3 et non celui d'après RAF4
C'est pour cela que je te demande ce que tu veux dire pour il faut pas appeler la fonction TraiterFichierRAF dans ma macro...
Stp ne me laisse pas tomber si pres du but Mr Zeb... ( c'est juste que ce travail c'est dans le cadre de mon stage et j'ai vraiment pas envie de commencer sur un echec surtout que je sais qu'il ne reste pas grand chose à faire pour que sa marche bien , et j'ai vraiment appris pas mal de choses sur ce forum et c'est déjà un grand gain pour moi)
Merci zeb , merci le forum

Bonjour le forum , bonjour zeb

Je reviens vers vous , j'ai avancé sur ma macro ( encore merci zeb c'est en grande partie grâce à toi) , maintenant j'arrive à ouvrir tous les fichiers , elle fait bien le travail pour le premier fichier ouvert et sa m'ouvre les autres fichiers mais les resultats voulus ne sont pas bons...
Je ne comprend pas alors pourquoi la macro fait bien le boulot pour le premier fichier ouvert et pas pour les autres.
Voila ce que sa donne: (si quelqu'un veut les fichiers sur lesquels ma macro tourne n'hésitez pas ;) 

  1. Option Explicit
  2.  
  3. Sub TraiterRepertoire(ByRef nomfic_NIR2 As String, ByRef repertoire_RAF As String)
  4. Dim FSO As New FileSystemObject
  5. Dim fldr_RAF As Folder
  6. Dim file_RAF As File
  7.  
  8.  
  9. Set fldr_RAF = FSO.GetFolder("C:\Projet\RAF")
  10.  
  11. For Each file_RAF In fldr_RAF.Files
  12. If UCase(file_RAF.Name) Like "RAF*" Then TraiterFichierRAF nomfic_NIR2, file_RAF.Path
  13. Next
  14. End Sub
  15.  
  16. Sub TraiterFichierRAF(ByRef nomfic_NIR2 As String, ByRef nomfic_RAF As String)
  17. Dim wb_RAF As Workbook
  18. Dim wb_NIR2 As Workbook
  19. Dim ws_RAF As Worksheet
  20. Dim ws_NIR2 As Worksheet
  21. Dim ws_resultat As Worksheet
  22. Dim cel_cherchee As Range
  23. Dim cel_trouvee As Range
  24. Dim cel_resultat As Range
  25. Static v_open As Boolean '-------------------Nouveau
  26. Dim ligne As Single
  27. If Not v_open Then '-------------------Nouveau
  28. Workbooks.OpenText Filename:="d:\Users\ys.EMEA\Desktop\NIR2.txt"
  29. v_open = True '-------------------Nouveau
  30. End If '-------------------Nouveau
  31. Set wb_NIR2 = ActiveWorkbook
  32. Set ws_NIR2 = wb_NIR2.Worksheets(1)
  33. ws_NIR2.Columns(1).NumberFormat = "0"
  34.  
  35. Workbooks.OpenText Filename:=nomfic_RAF '-------------------Nouveau
  36. Set wb_RAF = ActiveWorkbook
  37. Set ws_RAF = wb_RAF.Worksheets(1)
  38.  
  39. Set ws_resultat = wb_RAF.Worksheets.Add
  40. ws_resultat.Name = "Resultat"
  41. Set cel_resultat = ws_resultat.Range("A1")
  42.  
  43. For Each cel_cherchee In ws_NIR2.Range("A1:A5")
  44. Set cel_trouvee = ws_RAF.Columns(1).Find(cel_cherchee.Value)
  45. If Not cel_trouvee Is Nothing Then
  46. Do
  47. cel_resultat.Value = cel_trouvee.Value
  48. Set cel_resultat = cel_resultat.Offset(1)
  49. Set cel_trouvee = cel_trouvee.Offset(1)
  50. ligne = ligne + 1
  51. Loop Until (Left(cel_trouvee.Text, 14)) = "S30.G01.00.001"
  52. End If
  53.  
  54. Next
  55.  
  56. End Sub
  57.  
  58.  
  59. Sub start()
  60. Dim nomfic_NIR2 As String
  61. Dim nomfic_RAF As String
  62. Call TraiterRepertoire("d:\Users\ys.EMEA\Desktop\NIR2.txt", "C:\Projet\RAF")
  63. End Sub

ENFAIT sa traite très bien le premier fichier ouvert du repertoire RAF et sa ouvre 2 autres fichiers sans les traiter et sa n'ouvre pas les deux autres je ne comprend rien.. :sweat: 
Pouvez vous m'aider s'il vous plait à y voir plus claire?
Merci

Bonjour le forum , bonjour Zeb ,
Je te remercie beaucoup pour le temps que tu me consacres c'est vraiment sympa. et oui je sens ( même je suis sûr) que j'ai appris pas mal de choses avec toi et les autres memebres du forum ...
Thank you a lot et je reviendrais vers vous mais cette fois pour vous dire que tout marche à merveille j'espère ;) 

re bonjour forum , rebonjour zeb ,
j'ai étudié ton code avec des éspions (hé oui maintenant je connais des trucs :D  )sur des valeurs et j'ai remarqué ce problème à ce niveau du code :
  1. For Each cel_NIS_cherchee In ws_NIR2.Range("A1:A5")
  2. Set cel_RAF_trouvee = ws_RAF.Columns(1).Find(cel_NIS_cherchee.Value)
  3. If Not cel_RAF_trouvee Is Nothing Then
  4. Do
  5. cel_REF_resultat.Value = cel_RAF_trouvee.Value
  6. Set cel_REF_resultat = cel_REF_resultat.Offset(1)
  7. Set cel_RAF_trouvee = cel_RAF_trouvee.Offset(1)
  8. Loop Until cel_RAF_trouvee.Text Like "S30.G01.00.001*"
  9. End If
  10. Next
  11. End Sub

Quand enfait il ouvre le premier fichier RAF* il le traite très bien (il prend les valeur à rechercher de NIR2) sauf que une fois il verifie la dernière valeur elle qu'il ne la trouve pas , ben il ne sort pas de la boucle et continue à tourner sur le ichier RAF* du coup la macro plante et il ne passe pas aux autres fichier du repertoire....

Merci zeb pour ta grande aide ;) 
Expert Programmation

(C'était quoi le bins ?)

----------------------

Si c'est réglé, choisis une réponse comme meilleure (moins mauvaise), ça passera le topic en résolu ;) 

Bonjour zeb , bonjour le forum.
Je dois fournir mes résultats aujourd'hui et j'ai toujours un point qui me bloque :(  ....
La macro fait tout très bien merci à vous pour votre aide mais il ya une chose que je n'arrive pas à faire encore , la macro traite chaque fichier à part et me donne autant de feuilles de résultats que de fichiers. Ce que je souhaiterai c'est eventuellement avoir une seule feuille de résultats pour tout le traitement ( c.a.d : si je traite 100 fichier RAF* , la macro doit me retourner une seule feuille synthèse avec tous les résultats du traitement..
j'ai cette macro :
  1. sub Synthese ()
  2. dim ws as worksheet
  3. dim L as integer , C as integer
  4. dim Lcible as integer
  5. dim plage as range
  6. dim synthese as worksheet
  7. fo each ws in worksheets
  8. Lcible = worksheets(synthese").Range("A65536").End(xLUp).Row+1
  9. if ws.name = "resultat" then
  10. with ws
  11. L=.Range("A65536").End(xLUp).Row
  12. C=.Range("A1").End(xLToRight).Column
  13. set Plage=.Range(Cells(1,1).Adress,Cells(L,C).Adress)
  14. Plage.copy Destination:=Worksheets("synthese".Range("A"&Lcible)
  15. End with
  16. End If
  17. Next ws
  18. End sub

Le problème avec cette macro c'est qu'elle dois prendre les feuilles de resultat quand elle sont ouvertes alors que moi je souhaite refermer tous les fichier RAF* après traitement , donc avoir les résultats directement pour tous les fichiers sur un seule feuille synthèse ( car si j'ai 1000 fichier RAF* à traiter sa risque d'être très compliquer de les ouvrir tous...
Voila mon dernier point avant de choisir une meilleure réponse
J'attend vraiment votre aidre ( ZEB :sweat:  )
Merci enormement pour le temps que vous m'avez consacrer.
Expert Programmation

Eh, je m'absente une demi-journée, et voilà ! Tu ne sais plus rien faire. :/ 
Alors d'abord, c'est quoi ce code de synthèse même pas indenté ?
En 1985, on avait besoin de se repérer en mettant le nom de la variable derrière les Next (ligne 17). Depuis, on indente le code !!!!!!!!!!!!!!!!!

Tiens, juste pour le plaisir, regarde ce code (surtout la ligne 10) :
  1. Sub synthese(ws_synthese As Worksheet)
  2. Dim source As Range
  3. Dim cible As Range
  4. Dim ws As Worksheet
  5.  
  6. cible = ws_synthese.Range("A65536").End(xlUp).Offset(1)
  7. For Each wb In Workbooks
  8. For Each ws In wb.Worksheets
  9. If ws.Name = "resultat" Then
  10. Set source = ws.Range("A1").CurrentRegion
  11. source.Copy Destination:=cible
  12. Set cible = cible.Offset(source.Rows.Count)
  13. End If
  14. End If
  15. Next
  16. End Sub
Je ne vois pas où est le problème d'ouvrir 1000 fichiers, si c'est une macro qui le fait :spamafote: 
Autre solution. Quand tu traites ton ficher RAF, au lieu de créer une feuille résultat, et de l'alimenter, ouvre ta feuille synthèse et alimente-la.
Tu peux même faire les deux.

Tien, je relis le code et je ne vois nulle part où l'on referme les fichiers RAF qu'on a ouvert :ouch: 
Lassé par la pub ? Créez un compte