A voir également:
- VBA :Parcourir 2 fichier excel en même temps
- Vba range avec variable ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba dernière colonne non vide ✓ - Forum VB / VBA
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
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
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
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 ^^
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 ^^
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 ?
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 ?
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
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
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 .
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 .
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question