VBA comment récupérer les données de plusieurs fichiers excel.

icecube -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
bonjour,

j'ai une macro qui permet d'ouvrir une boite de dilaogue celle ci me permet de sélectionner un fichier excel, cette macro ouvre le fichier pour appliquer un filtre sur la feuil "codax" et elle copie le résultat du filtre et le coller sur le fichier où la macro est écrite (feuil1).

du coup aujourd'hui on me demande de faire on sorte de pouvoir sélectionner plusieurs fichiers on va dire 30 et la macro fera la même chose.

pouvez m'aider car même si j'ai mis le multiselect a true, ca me preen unisuement les données du premier ficher donc les 29 autre ne sont meme pris en compte par la macro. En vous remrciant para avance

Option Explicit

Sub ouvrirtest()
    Application.EnableEvents = False
    'Application.Calculation = xlCalculateManual
    Dim wbsrc As Excel.Workbook ' déclarer le fichier source
    Dim wbtrg As Excel.Workbook ' déclarer le fichier detinataire
    Dim ws As Excel.Worksheet   ' declarer les feuil
    Dim strFileName As String
    Dim intChoice As Integer   'Déclarer les variables de base
    Application.ScreenUpdating = False
    Application.Cursor = xlWait
    
    Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = True
    intChoice = Application.FileDialog(msoFileDialogOpen).Show
    If intChoice <> 0 Then
    strFileName = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
    Workbooks.Open strFileName
    Set wbsrc = ActiveWorkbook
    Else
    MsgBox "La procédure est annulée car aucun fichier n’a été entré."
    Exit Sub
    End If
    'Set wbsrc = Application.Workbooks.Open("C:\Users\tabello\Mes documents locaux\outil compta-risk\F_Comparaison\COMPARISON_1505.xlsx") ' ouvrir le fichier source
    Set wbtrg = ThisWorkbook ' dire que c'est sur ce fichier que je travail
    
    Set ws = wbsrc.Worksheets("CODAX") ' lancer le filtre sur la colonne 4
    ws.Range("A6:T400").AutoFilter Field:=3, Criteria1:=RGB(130, 190, 0), Operator:=xlFilterCellColor
    ws.Range("A6:W400").Copy ' copie le résultat du filtre
      
    Set ws = wbtrg.Worksheets("Feuil1")  ' coller le resultat dans la feuil source du fichier destinataire
    ws.Range("A1").PasteSpecial xlPasteAll
    ws.Columns("A:T").ColumnWidth = 15
    ws.Rows("1:1").RowHeight = 70
    ws.Rows("2:100").RowHeight = 15
    Set ws = Nothing
    Application.DisplayAlerts = False
    wbsrc.Close savechanges:=False  ' fermer le fichier source
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    Set wbsrc = Nothing
    Set wbtrg = Nothing
    Application.Cursor = xlDefault
    'ActiveWorkbook.Sheets("PAGE d'ACCUEIL").Activate
    'Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
         MsgBox "Import terminé"
End Sub


3 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour,

    Il te faut faire une boucle sur SelectedItems(x) avec x = 1 to SelectedItems.count pour récupérer tous les classeurs choisis.
    0
  2. icecube
     
    bonjour, merci pour ta réponse!

    est ce que tu peux intégrer cet boucle dans ma macro, car je suis très mauvais lorsqu'il faut écrire des boucles.
    merci
    0
    1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Bonsoir,

      Ta macro avec la boucle :
      Option Explicit
      Sub ouvrirtest()
          Application.EnableEvents = False
          Dim wbsrc As Excel.Workbook ' déclarer le fichier source
          Dim wbtrg As Excel.Workbook ' déclarer le fichier detinataire
          Dim ws As Excel.Worksheet   ' declarer les feuil
          Dim wk As Excel.Worksheet   ' declarer les feuil
          Dim intChoice As Integer   'Déclarer les variables de base
          Dim fic As Integer
          Application.ScreenUpdating = False
          Application.Cursor = xlWait
          With Application.FileDialog(msoFileDialogOpen)
              .AllowMultiSelect = True
              intChoice = .Show
              If intChoice <> 0 Then
                  Set wbtrg = ThisWorkbook ' dire que c'est sur ce fichier que je travail
                  Set ws = wbtrg.Worksheets("Feuil1")  ' coller le resultat dans la feuil source du fichier destinataire
                  For fic = 1 To .SelectedItems.Count
                      Workbooks.Open .SelectedItems(fic)
                      Set wbsrc = ActiveWorkbook
                      Set wk = wbsrc.Worksheets("CODAX") ' lancer le filtre sur la colonne 4
                      wk.Range("A6:T400").AutoFilter Field:=3, Criteria1:=RGB(130, 190, 0), Operator:=xlFilterCellColor
                      wk.Range("A6:W400").Copy ' copie le résultat du filtre
                      ws.Cells(ws.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Paste
                      wbsrc.Close savechanges:=False  ' fermer le fichier source
                  Next fic
                  ws.Columns("A:T").ColumnWidth = 15
                  ws.Rows("1:1").RowHeight = 70
                  ws.Rows("2:100").RowHeight = 15
                  Set ws = Nothing
                  Set wbsrc = Nothing
                  Set wbtrg = Nothing
              Else
                  MsgBox "La procédure est annulée car aucun fichier n’a été entré."
                  Exit Sub
              End If
          End With
          Application.ScreenUpdating = True
          Application.Cursor = xlDefault
          Application.EnableEvents = True
          MsgBox "Import terminé"
      End Sub
      
      0
  3. icecube
     
    bonjour,

    je te remercie beaucoup pour le code, ça marche nickel.

    très content merci beaucoup

    désolé pour la réponse tardive. ;)
    0
    1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Merci du retour et bonne continuation
      0