VBA :Parcourir 2 fichier excel en même temps

Fermé
paksouse - 3 sept. 2012 à 15:41
 JJDai - 19 nov. 2012 à 10:02
Bonjour,

Je travail sur un projet actuellement, mais j'ai rencontré un problème lors du parcours du 2eme fichier.
Je vais détailler les choses : Je suis entrain de parcourir le premier fichier excel par une boucle for et l'intérieur y a des traitements et il faut parcourir le deuxième fichier excel selon des critère qui provient du premier fichier excel .
J'ai arrivé à faire ça, mais je perds le contrôle du boucle du premier fichier car la ligne de code ci-dessous Active le 2éme fichier et la boucle du premier fichier perds la position sur la ligne où elle était ?

Windows("2eme fichiers excel .xls").Activate

Est ce que c'est faisable de parcourir 2 fichier excel en même temps ? où une fois j'active le deuxième fichier c'est impossible de faire un retour vers le premier fichier ?

Merci d'avance .


5 réponses

Bonjour, je ne sais pas si le problème est résolu, mais je poste quand même ma réponse.
Pour travailler sur plusieurs fichiers Excel ou plusieurs feuilles simultanément, il ne faut jamais utilisé les méthos qui contiennent le mot "activ" donc pas d'"activate", de "activeSheet", activWokBook", ......
Il faut déclarer des variable de type workBook, et manipuler les objet a partir de ces variables et la ça ne pose aucun problème.
Exemple:
dim wb1 as workbook 'premeir classeur
dim wb2 as workbook 'deuxieme classeur

'affecter ces deux variables avec "open" ou la collection workbooks
set wb1 = workbooks.open("chemin du classeur")
set wb2 = workbooks("l'autre classeur.xls) 'si il est déjà ouvert

et ensuite soit passer par des variables de type sheet ou directement
wb1.worksheets("nomdela feuille).cells(1,5) = wb2.worksheets(2).cells(4,8)
'ou
dim ws1 as worksheet 'feuille du premier classeur
dim ws2 as worksheet 'feuille du deuxième classeur

set ws1=wb1.worksheets("nomdelafeuille")
set ws2=wb2.worksheets(2)
'et ensuite manipuler la feuille ws1 du premier classeur et la feuille ws2 du deuxième classeur en utilisant toujours ces variables.

JJDai
1
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
3 sept. 2012 à 16:25
Salut,
A première vue je ne vois pas pourquoi ce ne serait pas possible...
Essaye d'inscrire dans ton premier fichier la variable incrémentée dans le FOR avant de passer sur le deuxième fichier, puis un Windows("1er_fichier_excel .xls").Activate pour revenir sur ton premier fichier...

Je n'ai pas les moyens de tester ça ici, mais j'essaierai ce soir si tu ne fais pas de retour avant ^^
0
Merci boco pour votre réponse :)

j'ai essayé ce que vous avez proposez mais ça marche pas.
Voila un bout de code :




Sub Principale()

//parcour du premier fichier excel
For irow = Srow To LRow

MsgBox "ligne val" & irow & Cells(irow, 17).Value
'traitement
'traitement
'traitement
critere = Cells(irow, 17).Value


'parcours 2eme fichier
Traitment_Monthly (critere )



Next irow

End Sub


Private Sub Traitment_Monthly (critere As String)
Windows("2eme fichier.xls").Activate
Selection.AutoFilter Field:=9, Criteria1:=critere
MsgBox ActiveSheet.Name
ARow = Cells(Rows.Count, 1).End(xlUp).Offset(0, 0).Row
'First row is header recors
Brow = 2

'Read table

For cRow = Brow To ARow
MsgBox Cells(cRow, 1).Value
Next cRow


//j'ai rajouté ce ligne pour basculer au premier fichier mais il donne erreur d'execution '9' l'indice n'apartient pas à la selection

Windows("1ere fichier.xls").Activate

End Sub


j'ai fait un Msgbox dans la premier boucle pour qu'il m'affiche le contenu des variable,après l'exécution j'ai constaté que irow s'incrémente bien mais la valeur Cells(irow, 17).Value est alimenté juste dans irow=1 , pour les autre itération le contenu de cette dernier "Cells(irow, 17).Value" est vide .
donc lors du passage au 2eme fichier , on perd les données du premier fichier . :(
Y a t-il une solution ?
0
Bonjour

critere = Cells(irow, 17).Value
critère est ta variable qui doit etre présente dans 2 procédures tu dois donc la déclarer en dehors de tes 2 procédures.

au tout début de ton module tu déclares

Public critere as string si c'est du texte
Public as integer si c'est un nombre entier

etc

Cordialement
0
Merci pour votre réponse :)
Oui , je partage ton idée mais le problème réside encore car lorsque je bascule vers le deuxième fichier et je retour vers le premier je perds toutes les données de la premier fichier c'est comme j'ouvre le fichier pour la premier fois il ne se rappelle pas de la position lors de la lecture .

j'ai trouvé une solution c'est de parcourir le deuxième fichier dans un tableau et après je bascule vers l'autre une fois pour toute au lieu de basculer plusieurs fois entre les 2 .
donc les données du deuxième fichier se trouve dans un tableau et pour l'autre fichier je l'ai parcouru directement .
Je l'ai testé ça marche bien mais j'en suis sur qu'il y a une solution pour persister les données de deux fichiers en même temps en basculant entre les deux .

Merci encore pour votre aide .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
et si vous enleviez le Private de: Private Sub Traitment_Monthly
0