VBA :Parcourir 2 fichier excel en même temps

paksouse -  
 JJDai -
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

  1. JJDai
     
    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
  2. Morgothal Messages postés 1350 Statut Membre 184
     
    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
  3. paksouse
     
    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
  4. G_33
     
    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
    1. paksouse
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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