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 :
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
maintenant j'ai cette macro :
Sub test() Workbooks.OpenText Filename:= "D:\Users\woow\Desktop\RAF1.txt" Workbooks.OpenText Filename:= "D:\Users\woow\Desktop\NIR1.txt" Columns("A:A" ).Select Selection.NumberFormat = "0" Sheets.Add ActiveSheet.Name = "Resultat" i = 1 For j = 2 To 16 valeur = Workbooks("NIR1.txt" ).Sheets("NIR1" ).Cells(j, 1) Workbooks("RAF1.txt" ).Activate Set celluletrouvee = Range("A:A" ).Find(valeur) ligne = celluletrouvee.Row Do Workbooks("NIR1.txt" ).Sheets("Resultat" ).Cells(i, 1) = Workbooks("RAF1.txt" ).Sheets("RAF1" ).Cells(ligne, 1) i = i + 1 ligne = ligne + 1 Loop Until (Left(Workbooks("RAF1.txt" ).Sheets("RAF1" ).Cells(l igne, 1), 14)) = "S30.G01.00.001" Next End 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
Autres pages sur : macro etendre recherche repertoire
Lassé par la pub ? Créez un compte
Meilleure solution
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 :
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
Eh, ça valait la peine de passer outre mon côté ronchon, non ?
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 :
Option Explicit
Sub TraiterFichierRAF(ws_NIR2 As Worksheet, file_RAF As File)
Dim wb_RAF As Workbook
Dim ws_RAF As Worksheet
Dim ws_RAF_resultat As Worksheet
Dim cel_NIS_cherchee As Range
Dim cel_RAF_trouvee As Range
Dim cel_REF_resultat As Range
Workbooks.OpenText Filename:=file_RAF.Path
Set wb_RAF = ActiveWorkbook
Set ws_RAF = wb_RAF.Worksheets(1)
Set ws_RAF_resultat = wb_RAF.Worksheets.Add
ws_RAF_resultat.Name = "Resultat"
Set cel_REF_resultat = ws_RAF_resultat.Range("A1")
For Each cel_NIS_cherchee In ws_NIR2.Range("A1:A5")
Set cel_RAF_trouvee = ws_RAF.Columns(1).Find(cel_NIS_cherchee.Value)
If Not cel_RAF_trouvee Is Nothing Then
Do
cel_REF_resultat.Value = cel_RAF_trouvee.Value
Set cel_REF_resultat = cel_REF_resultat.Offset(1)
Set cel_RAF_trouvee = cel_RAF_trouvee.Offset(1)
Loop Until cel_RAF_trouvee.Text Like "S30.G01.00.001*"
End If
Next
End Sub
Sub TraiterRepertoire(ByRef nomfic_NIR2 As String, ByRef repertoire_RAF As String)
Dim FSO As New FileSystemObject
Dim file_RAF As File
Dim wb_NIR2 As Workbook
Workbooks.OpenText nomfic_NIR2
Set wb_NIR2 = ActiveWorkbook
wb_NIR2.Worksheets(1).Columns(1).NumberFormat = "0"
For Each file_RAF In FSO.GetFolder("C:\Projet\RAF").Files
If UCase(file_RAF.Name) Like "RAF*" Then TraiterFichierRAF wb_NIR2.Worksheets(1), file_RAF
Next
wb_NIR2.Close False
End Sub
Sub start()
Dim nomfic_NIR2 As String
Dim nomfic_RAF As String
TraiterRepertoire "D:\Users\woow\Desktop\NIR2.txt", "C:\Projet\RAF"
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
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 ?
Salut woow....
Si tu veux, tu peux modifier tes messages. On appelle ça "Editer".
En image :

-------------------------------
J'ai répondu à ta question dans ce topic : http://www.presence-pc.com/forum/ppc/Programmation/macr...
Mais on peut continuer ici, c'est mieux
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...
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...
Workbooks.OpenText Filename:="D:\Users\ysebbarh.EMEA\Desktop\test_macro\RAF1.txt"
Set wb_RAF1 = ActiveWorkbook
Set ws_RAF1 = wb_RAF1.Worksheets(1)
Set cel_trouvee = ws_RAF1.Columns(1).Find(cel_cherchee.Value)
Ajoute Windows Script Host Object Model aux références de ton projet.
(Ca va ? C'est pas trop du chinois ?
)
Et maintenant, étudie ça :
A toi de les assembler.
(Ca va ? C'est pas trop du chinois ?
)Et maintenant, étudie ça :
Tu as pratiquement tous les éléments.
Dim FSO As New FileSystemObject
Dim fldr_RAF As Folder
Dim file_RAF As File
Set fldr_RAF = FSO.GetFolder("D:\Users\woow\Desktop\RAF")
MsgBox "Bonjour, je suis le répertoire " & fldr_RAF.Name
For Each file_RAF In fldr_RAF.Files
If UCase(file_RAF.Name) Like "RAF*.XLS" Then
MsgBox "J'ai trouvé le fichier " & file_RAF.Name & ". Il faudrait le traiter. " & vbCrLf & _
"Son nom complet est : " & vbCrLf & _
file_RAF.Path
Else
MsgBox "J'ai trouvé le fichier " & file_RAF.Name & ". Mais il ne nous intéresse pas."
End If
Next
A toi de les assembler.
Option Expplicit
Sub TraiterFichierRAF(ByRef nomfic_NIR As String, ByRef nomfic_RAF As String)
Dim wb_RAF As Workbook
Dim wb_NIR As Workbook
Dim sb_RAF As Worksheet
Dim sb_NIR As Worksheet
Dim ws_resultat As Worksheet
Dim cel_cherchee As Range
Dim cel_trouvee As Range
Dim cel_resultat As Range
Workbooks.OpenText Filename:=nomfic_NIR
Set wb_NIR = ActiveWorkbook
Set ws_NIR = wb_NIR.Worksheets(1)
ws_NIR.Columns(1).NumberFormat = "0"
Workbooks.OpenText Filename:=nomfic_RAF
Set wb_RAF = ActiveWorkbook
Set ws_RAF = wb_RAF.Worksheets(1)
Set ws_resultat = wb_NIR.Worksheets.Add
ws_resultat.Name = "Resultat"
Set cel_resultat = ws_resultat.Range("A1" )
For Each cel_cherchee In ws_NIR.Range("A2:A16" )
Set cel_trouvee = ws_RAF.Columns(1).Find(cel_cherchee.Value)
Do
cel_resultat.Value = cel_trouvee.Value
Set cel_resultat = cel_resultat.Offset(1)
Set cel_trouvee = cel_trouvee.Offset(1)
Loop Until (Left(cel_trouvee.Text, 14)) = "S30.G01.00.001"
Next
End Sub
Sub TraiterRepertoire(ByRef nomfic_NIR As String, ByRef repertoire_RAF As String)
Dim FSO As New FileSystemObject
Dim fldr_RAF As Folder
Dim file_RAF As File
Set fldr_RAF = FSO.GetFolder(repertoire_RAF)
For Each file_RAF In fldr_RAF.Files
If UCase(file_RAF.Name) Like "RAF*.XLS" Then TraiterFichierRAF nomfic_NIR, file_RAF.Path
Next
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
Merci Zeb
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
Merci Zeb
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.
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...
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.
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
, mais une fois j'ai changé le nom d'un fichier sa me met une erreur à cette ligne :
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.
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
, mais une fois j'ai changé le nom d'un fichier sa me met une erreur à cette ligne :
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.
Option Explicit
Sub TraiterRepertoire(ByRef nomfic_NIR2 As String, ByRef repertoire_RAF As String)
Dim FSO As New FileSystemObject
Dim fldr_RAF As Folder
Dim file_RAF As File
Set fldr_RAF = FSO.GetFolder("C:\Projet\RAF")
For Each file_RAF In fldr_RAF.Files
If UCase(file_RAF.Name) Like "RAF*" Then TraiterFichierRAF nomfic_NIR2, file_RAF.Path
Next
End Sub
Sub TraiterFichierRAF(ByRef nomfic_NIR2 As String, ByRef nomfic_RAF3 As String)
Dim wb_RAF3 As Workbook
Dim wb_NIR2 As Workbook
Dim ws_RAF3 As Worksheet
Dim ws_NIR2 As Worksheet
Dim ws_resultat As Worksheet
Dim cel_cherchee As Range
Dim cel_trouvee As Range
Dim cel_resultat As Range
Workbooks.OpenText Filename:="d:\Users\woow\Desktop\NIR2.txt"
Set wb_NIR2 = ActiveWorkbook
Set ws_NIR2 = wb_NIR2.Worksheets(1)
ws_NIR2.Columns(1).NumberFormat = "0"
Workbooks.OpenText Filename:="C:\Projet\RAF\RAF3.txt"
Set wb_RAF3 = ActiveWorkbook
Set ws_RAF3 = wb_RAF3.Worksheets(1)
Set ws_resultat = wb_NIR2.Worksheets.Add
ws_resultat.Name = "Resultat"
Set cel_resultat = ws_resultat.Range("A1")
For Each cel_cherchee In ws_NIR2.Range("A2:A7")
Set cel_trouvee = ws_RAF3.Columns(1).Find(cel_cherchee.Value)
Do
cel_resultat.Value = cel_trouvee.Value
Set cel_resultat = cel_resultat.Offset(1)
Set cel_trouvee = cel_trouvee.Offset(1)
Loop Until (Left(cel_trouvee.Text, 14)) = "S30.G01.00.001"
Next
End Sub
Sub start()
Dim nomfic_NIR2 As String
Dim nomfic_RAF3 As String
Dim repertoire_RAF As String
Call TraiterRepertoire(nomfic_NIR2, repertoire_RAF)
Call TraiterFichierRAF(nomfic_NIR2, nomfic_RAF3)
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
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
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.
Si tu trouves tout seul, dis-le nous.
Sinon, je te donnerais Rien (*) !
__________
(*) Joke inside
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.
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
Dim trouve As Range
Set trouve = Worksheets(1).Cells.Find("introuvable")
Stop
Si tu trouves tout seul, dis-le nous.
Sinon, je te donnerais Rien (*) !
__________
(*) Joke inside
re bonjour,
Pour la solution à mon petit problème j'ai trouvé c'est :
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
) 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
Pour la solution à mon petit problème j'ai trouvé c'est :
Set cel_trouvee = ws_RAF.Columns(1).Find(cel_cherchee.Value)
If Not cel_trouvee Is Nothing Then
Do
cel_resultat.Value = cel_trouvee.Value
Set cel_resultat = cel_resultat.Offset(1)
Set cel_trouvee = cel_trouvee.Offset(1)
ligne = ligne + 1
Loop Until (Left(cel_trouvee.Text, 14)) = "S30.G01.00.001"
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
) 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
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
De plus quand je procède pas à pas , à chaque fois que la boucle se termine et repasse pour ouvrir un nouveau fichier , à cette ligne
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
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
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
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..
Pouvez vous m'aider s'il vous plait à y voir plus claire?
Merci
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
Option Explicit
Sub TraiterRepertoire(ByRef nomfic_NIR2 As String, ByRef repertoire_RAF As String)
Dim FSO As New FileSystemObject
Dim fldr_RAF As Folder
Dim file_RAF As File
Set fldr_RAF = FSO.GetFolder("C:\Projet\RAF")
For Each file_RAF In fldr_RAF.Files
If UCase(file_RAF.Name) Like "RAF*" Then TraiterFichierRAF nomfic_NIR2, file_RAF.Path
Next
End Sub
Sub TraiterFichierRAF(ByRef nomfic_NIR2 As String, ByRef nomfic_RAF As String)
Dim wb_RAF As Workbook
Dim wb_NIR2 As Workbook
Dim ws_RAF As Worksheet
Dim ws_NIR2 As Worksheet
Dim ws_resultat As Worksheet
Dim cel_cherchee As Range
Dim cel_trouvee As Range
Dim cel_resultat As Range
Static v_open As Boolean '-------------------Nouveau
Dim ligne As Single
If Not v_open Then '-------------------Nouveau
Workbooks.OpenText Filename:="d:\Users\ys.EMEA\Desktop\NIR2.txt"
v_open = True '-------------------Nouveau
End If '-------------------Nouveau
Set wb_NIR2 = ActiveWorkbook
Set ws_NIR2 = wb_NIR2.Worksheets(1)
ws_NIR2.Columns(1).NumberFormat = "0"
Workbooks.OpenText Filename:=nomfic_RAF '-------------------Nouveau
Set wb_RAF = ActiveWorkbook
Set ws_RAF = wb_RAF.Worksheets(1)
Set ws_resultat = wb_RAF.Worksheets.Add
ws_resultat.Name = "Resultat"
Set cel_resultat = ws_resultat.Range("A1")
For Each cel_cherchee In ws_NIR2.Range("A1:A5")
Set cel_trouvee = ws_RAF.Columns(1).Find(cel_cherchee.Value)
If Not cel_trouvee Is Nothing Then
Do
cel_resultat.Value = cel_trouvee.Value
Set cel_resultat = cel_resultat.Offset(1)
Set cel_trouvee = cel_trouvee.Offset(1)
ligne = ligne + 1
Loop Until (Left(cel_trouvee.Text, 14)) = "S30.G01.00.001"
End If
Next
End Sub
Sub start()
Dim nomfic_NIR2 As String
Dim nomfic_RAF As String
Call TraiterRepertoire("d:\Users\ys.EMEA\Desktop\NIR2.txt", "C:\Projet\RAF")
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..
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
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
)sur des valeurs et j'ai remarqué ce problème à ce niveau du code :
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
j'ai étudié ton code avec des éspions (hé oui maintenant je connais des trucs
)sur des valeurs et j'ai remarqué ce problème à ce niveau du code :
For Each cel_NIS_cherchee In ws_NIR2.Range("A1:A5")
Set cel_RAF_trouvee = ws_RAF.Columns(1).Find(cel_NIS_cherchee.Value)
If Not cel_RAF_trouvee Is Nothing Then
Do
cel_REF_resultat.Value = cel_RAF_trouvee.Value
Set cel_REF_resultat = cel_REF_resultat.Offset(1)
Set cel_RAF_trouvee = cel_RAF_trouvee.Offset(1)
Loop Until cel_RAF_trouvee.Text Like "S30.G01.00.001*"
End If
Next
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
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 :
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
)
Merci enormement pour le temps que vous m'avez consacrer.
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 :
sub Synthese ()
dim ws as worksheet
dim L as integer , C as integer
dim Lcible as integer
dim plage as range
dim synthese as worksheet
fo each ws in worksheets
Lcible = worksheets(synthese").Range("A65536").End(xLUp).Row+1
if ws.name = "resultat" then
with ws
L=.Range("A65536").End(xLUp).Row
C=.Range("A1").End(xLToRight).Column
set Plage=.Range(Cells(1,1).Adress,Cells(L,C).Adress)
Plage.copy Destination:=Worksheets("synthese".Range("A"&Lcible)
End with
End If
Next ws
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
)Merci enormement pour le temps que vous m'avez consacrer.
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) :
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
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) :
Je ne vois pas où est le problème d'ouvrir 1000 fichiers, si c'est une macro qui le fait
Sub synthese(ws_synthese As Worksheet)
Dim source As Range
Dim cible As Range
Dim ws As Worksheet
cible = ws_synthese.Range("A65536").End(xlUp).Offset(1)
For Each wb In Workbooks
For Each ws In wb.Worksheets
If ws.Name = "resultat" Then
Set source = ws.Range("A1").CurrentRegion
source.Copy Destination:=cible
Set cible = cible.Offset(source.Rows.Count)
End If
End If
Next
End Sub
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
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumMacro recherche tableau
- ForumMacro recherche fichier
- ForumMacro recherche plage
- ForumMacro recherche d'un fichier
- ForumMacro recherche dates
- ForumMacro recherche dans une table
- ForumMacro de recherche exel
- ForumMacro recherche ligne
- ForumMacro recherche contient
- ForumMacro recherche copie
- Voir plus