XL 2010 Filtres et Classeurs ouverts mais non visibles

laiglenoir

XLDnaute Nouveau
Bonjour à tous,

voilà mon petit soucis:
j'aurais besoin de récupérer des données sur 2, 8, 24, 48 etc classeurs Excel ne contenant qu'une seule feuille sachant que chaque feuille peut avoir été filtrée et c'est bien là mon soucis.

J'ai d'abord opté pour l'ouverture ==> récupération des données ==> fermeture du classeur
donc là rien de bien méchant, tout fonctionne et j'arrive à ôter d'éventuels filtres. Tout fonctionne mais c'est très lent surtout pour 104 classeurs.

Alors j'ai bien pensé récupérer les infos le classeur fermé, j'ai essayé plusieurs méthodes (Boisgontier et autres) mais rien n'y fait, toujours la même erreur malgré la référence coché.

Finalement je me suis dit pourquoi ne pas ouvrir une "Excel.application" en mode invisible (.Visible = False), copier les valeurs et la refermer, cela reste très rapide.
Là encore tout fonctionne enfin tant qu'il n'y a pas de filtres sur une feuille sinon dès que j'essaie de les enlever (.ShowAllData) ça plante alors que ouvert ou visible, cela marche très bien, je récupère toutes les données sans exception.

Je cherche à transférer les valeurs de la feuille visée dans un tableau [ a = Application.Transpose(Range...] afin de gagner du temps mais je ne récupère que les valeurs filtrées (visible sur la feuille du classeur visé) les autres sont manquantes ce qui, par la suite, engendre forcément des erreurs de calculs sachant que ces résultats jouent grandement sur l'obtention d'une prime il serait bon qu'il n'y ait aucune erreur...

voilà le code basique
--------------------------------------------------------------------
Sub fgr()
Chem = "C:\Users\xx\ssss\"
NOm = "Fichier.xls"
a = Application.Transpose(func_OuvrirClasseur(Chem, NOm))
End Sub

Function func_OuvrirClasseur(ByVal sChemin As String, ByVal sNomClasseur As String)
Dim Ws As Worksheet
Dim DerLign As Integer

Set AppXl = CreateObject("Excel.application")

With AppXl
.Workbooks.Open sChemin & sNomClasseur
.Visible = False
End With

AppXl.Windows(sNomClasseur).Activate
Set Ws = AppXl.Sheets(1)

On Error Resume Next
Ws.ShowAllData ' ==> beug surgit si la feuille est bien filtrée
On Error GoTo 0

DerLign = Ws.Range("A1").End(xlDown).Row
'DerLign = Ws.Columns(1).Find("*", , xlFormulas, xlWhole, xlByRows, xlPrevious, True).Row
func_OuvrirClasseur = Ws.Range("A1:W" & DerLign).Value
AppXl.Workbooks(sNomClasseur).Close
End Function
--------------------------------------------------------------------------------------

Merci de votre aide
je suis sur Excel 2010 et les fichiers a traiter sont sous le format 97-2003 et j'aimerais que cela fonctionne sur Excel 2013
 

Discussions similaires