Excel - Extraction de données filtrées, choix fichier

Fermé
Fleur 99 - 13 nov. 2013 à 00:32
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 13 nov. 2013 à 10:57
Bonjour,

Fichier de travail ouvert sous Excel 2007 (.xlsm), je veux sélectionner un autre fichier excel (extension .xlsb ou .xlsx) avec fenêtre de choix car le nom de ce dernier est variable.
Problème, le fichier est gros (2,8 Mo), il faut au moins 3 minutes pour l'ouvrir, lorsque Excel ne plante pas).
Le but est d'ouvrir ce fichier, de se positionner sur la feuille « feuil1 », afficher toutes les données puis effectuer un filtre sur la colonne W (n°19) suivant la mention saisie dans la boite de dialogue présentée.
Les données filtrées doivent être alors reportées dans le fichier de travail ouvert suivant une correspondance de colonnes et de lignes.
Est-il possible de récupérer des données filtrées sans devoir ouvrir le fichier ?
Comment optimiser le tout ?

'copie des données du fichier source... dans le fichier de travail ouvert, feuille data, suivant valeurs filtre 

Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Fichier de travail ouvert, effacer contenu feuille data
fichier = ActiveWindow.Caption
Sheets("data").Select
Columns("A:CK").Select
Selection.EntireColumn.Hidden = False
Range("D602:G2101,I602:CK2101").Select
Selection.ClearContents
'Ouvrir le fichier source avec fenetre de choix, nom variable, sélectionner les données
Dim Wbk As Workbook
Dim Fichier As Variant
Fichier = Application.GetOpenFilename
If Fichier = False Then Exit Sub
Workbooks.Open Fichier
Set Wbk = ActiveWorkbook
Sheets("feuil1").Select
Columns("A:V").Select
Selection.EntireColumn.Hidden = False
'ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=5
Set Pop = CommandBars("data").Controls("&Filtrer")
If Pop.Controls("&Afficher tout").Enabled = True Then
ActiveSheet.ShowAllData
End If
Application.ScreenUpdating = True
'Présenter la boite de dialogue pour choix
Mag = InputBox ("Entrez le nom")
If Mag = "Mag1" Or Mag = "Mag2" Or Mag = "Mag3" Or Mag = "Mag4" _
Or Mag = "Mag5" Or Mag = "Mag6 Then
ActiveSheet.Range("$A$1:$V$15000").AutoFilter Field:=19, Criteria1:=Mag
Else
If Mag <> "Mag1" Or Mag <> "Mag2" Or Mag <> "Mag3" Or Mag <> "Mag4" _
Or Mag <> "Mag5" Or Mag <> "Mag6" Then
MsgBox "Mag pas trouvé"
ActiveWindow.Close SaveChanges:=False
Windows(fichier).Activate
Exit Sub
End If
End If
Application.ScreenUpdating = False
'Copier le contenu des colonnes dans la feuille data
Wbk.Activate
Sheets("Feuil1").Select
Range("H2:H1501,J2:J1501,S2:S1501").Select
Selection.Copy
Windows(fichier).Activate
Sheets("data").Select
Range("D602").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Wbk.Activate
Sheets("Feuil1").Select
Range("E2:E1501").Select
Selection.Copy
Windows(fichier).Activate
Sheets("data").Select
Range("J602").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Merci pour votre aide.
Cordialement

A voir également:

1 réponse

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
13 nov. 2013 à 10:57
Bonjour,

Une piste peut être ici
https://silkyroad.developpez.com/VBA/ClasseursFermes/

;0)
2