XL 2010 Récupération du contenu d'une feuille d'un autre fichier Excel

Daniel Desch

XLDnaute Nouveau
Bonjour,


J'ai besoin de traiter des fichiers Excel générés par des applications utilisateurs qui contiennent chacun X feuilles
Un des problèmes c'est que ces fichiers mettent un temps fou à se charger car les feuilles de ces fichiers contiennent dans chaque cellule des formules de calcul du type :
=SIERREUR(@__xludf.DUMMYFUNCTION("""COMPUTED_VALUE""");"")
Même dans les cases inutilisées ou sur les commentaires il y a des formules comme ça. Je ne vois pas trop à quoi ça sert mais tout ça doit être généré par des applications auxquelles je n'ai pas accès. Du coup, même les fichiers avec peu de données deviennent énormes à manipuler.


Toujours est-il que je dois travailler sur les données de ces fichiers en recopiant le contenu des feuilles qui m'intéressent sans ouvrir ces fichiers.


Je suis dans mon fichier Excel de travail (C:\Users\Daniel\Documents\Pb6778_xx\Travail.xls) qui contient 3 feuilles : Param, Copie, Résultat
J'exécute une macro à partir de ce fichier. Elle doit faire les choses suivantes
1°) Récupérer le nom du fichier à traiter, nom qui se situe en position C11 de la feuille Param de mon fichier de travail (Par exemple "C:\Users\Daniel\Documents\Pb6778_xx\Novem_Etr.xls") et récupérer le nom de la feuille à traiter, nom qui se situe en position C13 de la feuille Param (Par exemple "Nantes")
2°) Recopier ensuite le contenu (mais uniquement les valeurs, pas les formules) de la feuille ainsi paramétrée (Dans mon exemple ce sera donc la feuille de donnée "Nantes" du fichier C:\Users\Daniel\Documents\Pb6778_xx\Novem_Etr.xls) dans la feuille Copie de mon fichier de travail
3°) Ensuite la macro poursuit son cours et traite le contenu de la feuille "Copie" de mon fichier de travail pour générer la feuille Résultat de mon fichier de travail avant de sauvegarder globalement ce dernier, cette sauvegarde contenant donc à la fois l'adresse du fichier traité, la copie des données initiales et les résultats obtenus

Je cherche la façon la plus facile, la plus rapide et la plus fiable de réaliser le point 2°) sachant que cela doit fonctionner également dans la version Excel 2010 et versions ultérieures

Vous remerciant par avance pour vos retours et votre aide

Cordialement
 

job75

XLDnaute Barbatruc
Bonjour Daniel Desch,

Ce n'est pas clair :

- vous parlez de "traiter des fichiers qui contiennent chacun X feuilles" mais au point 2°) une seule feuille est traitée

- dans cette feuille combien y a-t-il de colonnes et quel est le nombre maximum de lignes ?

A+
 

Daniel Desch

XLDnaute Nouveau
Bonjour job75

Pour chaque traitement on ne traite qu'une seule feuille d'un fichier.

Concernant la plage à traiter :
- Nombre de colonnes limité à 256 (imposé par les vieilles versions d'Excel, je crois que cela va de A à IV)
- Nombre de lignes : 1000 ce serait déjà confortable (les fichiers ne sont jamais si gros en termes de données vraiment intéressantes, mais les lignes suivantes ne sont malheureusement jamais vraiment vides et même lorsqu'elles sont vides elles contiennent souvent des formules). Le but de la recopie est aussi de ne conserver que des données signifiantes avec des caractères visibles

Cordialement
 

job75

XLDnaute Barbatruc
Pour le 2°) placez cette macro dans le fichier de travail et exécutez-la :
VB:
Sub Copie()
Dim fichier$, feuille$, chemin$
With Sheets("Param")
    fichier = .[C11]
    feuille = .[C13]
End With
chemin = Left(fichier, InStrRev(fichier, "\"))
fichier = Mid(fichier, Len(chemin) + 1)
Application.ScreenUpdating = False
With Sheets("Copie").[A1:IV1000]
    .FormulaArray = "='" & chemin & "[" & fichier & "]" & feuille & "'!A1:IV1000" 'formule de liaison (matricielle)
    .Value = .Value 'supprime les formules
    .Replace 0, "", xlWhole 'supprime les zéros
    .Parent.Activate 'facultatif
End With
End Sub
 

Daniel Desch

XLDnaute Nouveau
Bonjour


Impeccable, cela fonctionne.

J'ai supprimé :
.Replace 0, "", xlWhole 'supprime les zéros
.Parent.Activate 'facultatif
qui ne me servaient à rien dans mon cas


Merci beaucoup pour votre aide et meilleurs voeux pour cette nouvelle année


Cordialement
 

job75

XLDnaute Barbatruc
Bah la suppression des zéros ne sert à rien ??? Ce n'est pas possible.

Car il y a forcément des cellules vides dans la plage copiée A1:IV1000...

Edit : ...sauf évidemment s'il y a des formules sur toute la plage renvoyant le texte vide "".
 
Dernière édition:

Daniel Desch

XLDnaute Nouveau
Bonjour
J'avais oublié de répondre...
Oui il y a des formules de calcul de style =SIERREUR sur toutes les cellules de ces feuilles ce qui les rend vraiment très lourdes à utiliser.
Je ne sais pas pourquoi les concepteurs de ces feuilles ont fait ça mais je ne pense pas que cela serve à grand chose
Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
311 705
Messages
2 081 721
Membres
101 803
dernier inscrit
astyx26