Comment récupérer des données d'un fichier xls sans perdre la main

O

Olivier

Guest
bonjour,

j'ai crée un fichier Excel Generer.xls avec un bouton qui a pour but d'ouvrir la boite de dialogue "Open" pour récupérer le nom d'un fichier Excel (ex : toto). A partir de ce fichier, je veux récupérer certaines données dedans pour les formater et les mettre dans une nouvelle feuille de generer.xls

Le problème est qu'une fois que j'ai récupéré le nom avec la méthode GetOpenFilename, je l'ouvre dans Excel (Workbooks.Open Filename:=FiletoOpen) et là mon programme se plante car le fichier actif n'est plus Generer.xls.
Comment puis-je faire pour que ce dernier reste actif ? A la rigueur, je n'ai même pas besoin d'ouvrir mon fichier toto. Ce que je veux, c'est extraire chaque ligne de ce fichier.

J'espère avoir été suffisament clair.

Merci
Olivier
 
@

@+Thierry

Guest
Tiens Bonjour Olivier

Je n'avais pas vu ce post... Bonne Année à Toi

Euf çà à l'air bizarre ton histoire ? ton fichier "generer.xls" n'a pas besoin d'être le classeur actif pour qu'une procédure travaille sur un autre fichier ?

Je pense que ton problème vient surtout de ton code... A vu de nez et de loin... j'imagine que tu dois avoir des instructions du style :

ActiveWindow.ActivateNext qui finissent par ne plus tomber sur generer.xls

Alors qu'il faudrait plutot avoir des instructions de ce style :
Windows("genere.xls").Activate ou encore mieux
Workbooks("genere.xls").Activate

Sinon il existe un code pour lire sur fichier fermé, mais c'est long, et pas forcément l'idéal si tu dois récupérer des grandes plages...

Bonne Journée
@+Thierry
 
O

Olivier

Guest
Salut Thierry,

Effectivement bonne année à toi et à tous les membres du forum.
Le souci est que j'essaie bien d'utiliser une instruction du type Workbooks("genere.xls").activate mais j'ai une erreur à chaque fois. J'ai l'impression que c'est du au fait que je connaisse pas le nom de la feuille mais je n'en suis pas sur.

Peux tu me renseigner ? J'ai fourni mon fichier de travail.

Merci
Olivier
 

Pièces jointes

  • Generate_Day.xls
    35.5 KB · Affichages: 73
@

@+Thierry

Guest
C'est un peu le bazar ce code...

c'est sensé ouvrir un .csv mais après il y a des instructions qui ne tiennent pas la route, des variable ni déclarée ni même intitialisées... tu as eu çà où ?

euf là c'est trop le why !!! surtout que je ne traite pas trop les csv... et que je ne vois pas la gueule des tiens...


en virant déjà
Windows(FiletoOpen).ActiveSheet.Activate (qui ne sert à rien et qui te fait planter..)
en utilisant sheets(1) plutôt que SheetName = Workbooks.Item(1)

mais même.... après c'est encore le why de chez why !!!
Non désolé... faudrait ptet voir du coté où tu as eu ce code on dirait qu'il est incomplet...

Désolé et bon courage
@+Thierry
 
O

Olivier

Guest
Désolé pour le bordel ambiant dans le code.

Je vais essayer de mettre tout cela au clair :

Mon objectif est qu'à partir d'un fichier excel où un bouton a été défini, je puisse choisir un fichier quelqueconque dee données (CSV ou XLS, cela n'a pas d'importance) et que je puisse lire toutes les lignes une à une de ce fameux fichier pour pouvoir construire un rapport...

Là où je patine c'est au départ lors de l'ouverture de mon fichier de données. J'ai bien trouvé l'instruction qui me donne la boite de dialogue (GetOpenFilename) mais je ne sais pas lire la 1ère ligne de ce fichier. Je croyais qu'une instruction du genre Workbooks(filetoopen).Activate suffirait mais à chaque fois j'ai une erreur du type "subscript out of range, Runtime Error 9".

Si le reste du code ne fonctionne pas, c'est assez logique car ce ne sont que les grandes lignes pour l'instant.
Ce code est issu de mon p'tit cerveau et j'ai pris l'habitude (mauvaise j'en conviens ) de ne pas déclarer la plupart de variables sous VBA.

Si ces explications te semblent claires, j'attends ta réponse sinon tiens moi au courant et j'essaierais par un autre moyen.

Merci
Olivier
 

Discussions similaires

Statistiques des forums

Discussions
314 653
Messages
2 111 579
Membres
111 207
dernier inscrit
max008