Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1026 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Prendre des données dans un fichier actif.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Prendre des données dans un fichier actif.

n°1401727
zephyron1
Posté le 06-07-2006 à 10:15:07  profilanswer
 

:hello:  Bonjour à tous,
j'ai fait une recherche mais j'ai rien trouvé de concret.
 
Je dois faire un programme en VBA sous excel qui doit, selon ce qu'il y a dans un fichier précédement ouvert avec le programme (on l'appellera "A" ), récupérer des données dans un autre fichier (appellons le "B" ).
Le problème est que le fichier B se trouve dans une base de donnée.
Pour me faciliter la vie et pour faciliter celle des prochains utilisateurs, j'aimerai pouvoir demander l'ouverture d'un fichier B et récupérer ses données dès son activation.

Pouvez-vous m'aider, s'il vous plaît, à trouver un code qui puisse prendre le nom par exemple du fichier actif et pouvoir le traiter sans lenteur?

 
Je sais pas si je suis très clair, alors je vais résumer en schématisant avec des étapes :
 
1°) demande d'ouverture du fichier A (qui se trouve dans le PC).
 
2°) vérification de celui ci.
 
3°) demande d'ouverture d'un fichier B (sur la base de donnée ou autre part).
 
4°) dès son activation, prendre son nom pour pouvoir le traiter.
 
5°) Prendre donnée d'u fichier B.

mood
Publicité
Posté le 06-07-2006 à 10:15:07  profilanswer
 

n°1401730
jpcheck
Pioupiou
Posté le 06-07-2006 à 10:18:55  profilanswer
 

As-tu besoin d'aide sur les 5 étapes que tu nous a citées ou bien seulement sur celles en gras ?
pour le nom d'un fichier tu as activeworkboook.name qui te retourne le nom du fichier...
on peut t'aider sur tous les points, mais tu veux automatiser le tout ? passer par un formulaire ou juste sur un clic de bouton ?? ton fichier B sera-t-il toujours le meme (meme nom) ? etc...

n°1401860
DamienCYS
Posté le 06-07-2006 à 12:05:06  profilanswer
 

voici un lien ou tu trouveras pas mal de réponses :
http://www.excelabo.net/xl/fichiers.php

n°1401971
zephyron1
Posté le 06-07-2006 à 14:11:59  profilanswer
 

Salut Jp, salut Damien.
Merci pour vos réponse déjà. Jp je veux juste de l'aide sur l'étape 4 et 5.
J'ai déjà une boite de dialogue qui me demande donc d'ouvrir le fichier A et ensuite j'ai une autre boite qui me demande d'ouvrir un fichier B.
Ca serait plus simple si mon fichier B porte toujours le même nom mais le truc c'est qu'il n'a pas toujours ce nom et qu'en plus il ne se trouve pas sur le PC de l'utilisateur.
L'utilisateur va ouvrir ce fichier dans une BD et j'aimerai alors qu'à l'ouverture, je récupère le nom.
 
D'ailleur j'avais essayer avec activeworkbook, mais ça me donne le nom du fichier A et non du B.
 
Damie, Excellabo j'ai essayé mais j'ai du mal chercher car je n'ai rien vu.

n°1401975
jpcheck
Pioupiou
Posté le 06-07-2006 à 14:17:05  profilanswer
 

pour l'active workbook, tu dois l'utiliser une fois ton fichier B chargé, tu fais un minimize de ta fenetre de fichier A, et là tu auras le fichier B normalement. La fonction (dont je n'ai pas le nom sous la main) qui sert à faire appel à un explorateur de fichier s pour sélectionner le fichier B te retourne le nom du fichier... non ?

n°1401977
DamienCYS
Posté le 06-07-2006 à 14:18:05  profilanswer
 

pour le nom tu peux aussi utiliser : Workbooks(x).Name
donc Workbooks(1).Name pour le fichier A et Workbooks(2).Name pour le fichier B à condition que tu n'ai que ces deux fichiers d'ouvert
 

n°1402021
zephyron1
Posté le 06-07-2006 à 15:13:45  profilanswer
 

jpcheck a écrit :

pour l'active workbook, tu dois l'utiliser une fois ton fichier B chargé, tu fais un minimize de ta fenetre de fichier A, et là tu auras le fichier B normalement. La fonction (dont je n'ai pas le nom sous la main) qui sert à faire appel à un explorateur de fichier s pour sélectionner le fichier B te retourne le nom du fichier... non ?


 
Un minimize du fichier A? Oui mais ça risque d'être un peu risqué si l'utilisateur a plusieurs fichiers d'ouverts, non? Pour l'explorateur je peux l'utiliser pour le fichier A mais pas pour le B car le B est sur BD.
 

DamienCYS a écrit :

pour le nom tu peux aussi utiliser : Workbooks(x).Name
donc Workbooks(1).Name pour le fichier A et Workbooks(2).Name pour le fichier B à condition que tu n'ai que ces deux fichiers d'ouvert


 
Je vais peut-être essayer ça. Mais par-contre c'est le même problème il faut pas en avoir plusieurs d'ouverts.
 
 
Une chose aussi : Comment prendre le nom du fichier B au bon moment?
Si j'envois une Msgbox et que je prends tout de suite le workbook(2) je risque d'avoir une erreur si l'utilisateur ne l'ouvre pas tout de suite.
J'ai essayé avec une boucle qui tourner tant que le nom du fichier B ne changeait pas mais ça fait ramer le programme.
 

n°1402024
JihemAir
Je sais pas
Posté le 06-07-2006 à 15:19:24  profilanswer
 

Tu listes tous les fichiers ouverts dans une listbox, et tu demandes à ton utilisateur de cliquer sur le fichier B.
==> Pas d'erreur à l'activation et nom du fichier B connu.


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
n°1402032
DamienCYS
Posté le 06-07-2006 à 15:23:56  profilanswer
 

Et en mettant un évenement à l'ouverture du fichier B pour qu'il envoi son nom au fichier A
 
Private Sub Workbook_Open()
  Application.Run "'Fichier A.xls'!PasserNom" ThisWorkbook.name
End Sub
 
et dans la fonction PasserNom appartenant à fichier A tu récupèrer le nom, à voir s'il ne faut vérifier avant si fichier A est ouvert sinon tu ne pourras pas ouvrir Fichier b sans fichier a

n°1402044
zephyron1
Posté le 06-07-2006 à 15:32:28  profilanswer
 

JihemAir a écrit :

Tu listes tous les fichiers ouverts dans une listbox, et tu demandes à ton utilisateur de cliquer sur le fichier B.
==> Pas d'erreur à l'activation et nom du fichier B connu.


 
Salut JMR,
Pas bète ça. Mais alors comment faire pour lister tous les noms des fichiers ouverts? Et à quel moment? Il faudrait que la macro bloque sur cette fonction parce que si l'utilisateur ne l'ouvre pas tout de suite ça va tourner en rond.
 

DamienCYS a écrit :

Et en mettant un évenement à l'ouverture du fichier B pour qu'il envoi son nom au fichier A
 
Private Sub Workbook_Open()
  Application.Run "'Fichier A.xls'!PasserNom" ThisWorkbook.name
End Sub
 
et dans la fonction PasserNom appartenant à fichier A tu récupèrer le nom, à voir s'il ne faut vérifier avant si fichier A est ouvert sinon tu ne pourras pas ouvrir Fichier b sans fichier a


 
Pas bète non plus mais le fichier doit pouvoir être ouvert sans le fichier A. Donc je ne pense pas que ce soit la bonne solution (en plus j'ai 38 fichiers B... Si je dois rajouter un bout de code à chacun ça va être long).
 

mood
Publicité
Posté le 06-07-2006 à 15:32:28  profilanswer
 

n°1402048
JihemAir
Je sais pas
Posté le 06-07-2006 à 15:35:26  profilanswer
 

Tu peux créer une macro complémentaire, avec un bouton dans la barre des tâches, il est tjs présent dès que Excel est ouvert. L'utilisateur lance la macro si besoin en cliquant dessus.


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
n°1402072
zephyron1
Posté le 06-07-2006 à 15:55:09  profilanswer
 

JihemAir a écrit :

Tu peux créer une macro complémentaire, avec un bouton dans la barre des tâches, il est tjs présent dès que Excel est ouvert. L'utilisateur lance la macro si besoin en cliquant dessus.


 
Oui c'est une solution. Mais il faut que l'utilisateur créer un bouton dans son fichier excel. Si il ne le fait pas ça va bugguer et comme il y a plusieurs utilisateurs il faut faire un manuel etc...
 
Je vais être plus clair sur le déroulement de mon programme, ça noua aidera surement à trouver une solution tous ensemble:
 
Mon fichier A contient une liste de 38 pays et pour chaque pays il y a plusieurs données. Dans ma macro je fais une boucle du début du fichier jusqu'à la fin pour demander à l'utilisateur d'ouvrir un fichier B en rapport avec le pays où se trouve le pointeur de la boucle.  
exemple bète : je démarre du haut du fichier jusqu'en bas, j'attéri sur la France hop je lance une msgbox pour demander d'ouvrir un fichier B français.
 
Donc je veux que quand la msgbox apparrait, l'utilisateur ouvre un fichier B français, ça me donne le nom du fichier et pour que je puisse fouiller ce fichier B.

n°1402081
JihemAir
Je sais pas
Posté le 06-07-2006 à 16:00:30  profilanswer
 

Application.Dialogs(xlDialogOpen).Show
 
Ben ta msgbox, tu la transforme en DialogBox qui permet à ton utilisateur d'aller ouvrir son fichier et tu récupères le nom du fichier B!!


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
n°1402103
JihemAir
Je sais pas
Posté le 06-07-2006 à 16:12:50  profilanswer
 

Code :
  1. Sub test()
  2. Dim strName
  3. Application.Dialogs(xlDialogOpen).Show
  4. strName = ActiveWorkbook.Name
  5. MsgBox strName
  6. End Sub


 
 
ça devrait marcher...


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
n°1402108
zephyron1
Posté le 06-07-2006 à 16:20:12  profilanswer
 

JihemAir a écrit :

Application.Dialogs(xlDialogOpen).Show
 
Ben ta msgbox, tu la transforme en DialogBox qui permet à ton utilisateur d'aller ouvrir son fichier et tu récupères le nom du fichier B!!


 
Oui ok, mais les fichiers sont sur une BD un peu spécifique à mon entreprise. Et je peux pas y accéder avec l'explorateur de fichier.

n°1402109
Paul Hood
Posté le 06-07-2006 à 16:22:35  profilanswer
 

Et comment tu fais pour récupérer ton fichier B sur cette BD en VBA ?

n°1402125
zephyron1
Posté le 06-07-2006 à 16:34:44  profilanswer
 

Paul Hood a écrit :

Et comment tu fais pour récupérer ton fichier B sur cette BD en VBA ?


 
Je fais pas justement.  :lol:  
 
Vu qu'on peut ouvrir ce fichier en allant sur cette BD par un logiciel et que ce fichier s'affiche sous excel, comme sous windows, je me demandais si on pouvais pas prendre le nom d'un fichier qu'on venait d'ouvrir.

n°1402129
jpcheck
Pioupiou
Posté le 06-07-2006 à 16:37:05  profilanswer
 

ben si ton fichier est ouvert, excel connait son nom, pkoi n'utilises tu pas les fonctions qu'on t'a proposées ?

n°1402135
Paul Hood
Posté le 06-07-2006 à 16:40:54  profilanswer
 

Workbooks(Workbooks.Count).Name te donne le nom du dernier fichier excel ouvert.

n°1402172
zephyron1
Posté le 06-07-2006 à 17:19:03  profilanswer
 

Paul Hood a écrit :

Workbooks(Workbooks.Count).Name te donne le nom du dernier fichier excel ouvert.


 
Voilà c'est ça que j'attendais. je vais essayer ça ce soir et je vous tiens au courant demain matin. Par-contre je pense rencontrer toujours le même problème :
 
Quand est-ce que je dois faire ça... C'est vrai si je fais ça tout de suite après le msgbox il va me donner le nom de mon fichier A... Bon on verra bien merci beaucoup tout le monde, @ demain.

n°1402517
zephyron1
Posté le 07-07-2006 à 09:31:51  profilanswer
 

:pt1cable: Bonjour à tous.
Bon voilà j'ai essayé, et ça ne me donne toujours pas ce que je veux : ça me donne le nom du fichier A.
 
J'avais dans l'idée d'ouvrir le fichier B avant de cliquer sur le bouton "ok" de la msgbox qui me demande d'ouvrir ce dernier mais ça me bloque l'ouverture et le fichier B ne s'ouvre qu'à la fin de mon programme.
 
Quelqu'un a une solution pour que je puisse ouvrir ce fichier B pendant le déroulement du programme?

n°1402538
Paul Hood
Posté le 07-07-2006 à 09:53:48  profilanswer
 

En fait tu veux connaître le nom du fichier avant de l'ouvrir sans connaître son nom avant...ca va être dur ...

n°1402546
zephyron1
Posté le 07-07-2006 à 10:04:30  profilanswer
 

attends Paul, je sais que c'est pas facile à comprendre ce que je veux mais ne fais pas d'ironie inutile s'il te plaît.
 
Ce que je veux c'est connaitre le nom d'un fichier que je viens d'ouvrir, c'est tout.
En faisant par exemple une msgbox pour demander l'ouverture, d'ouvrir le fichier B, cliquer sur ok et hop là j'ai son nom. Vous êtes pas obligé de répondre mais si vous le faite ça m'aiderai beaucoup dans mon travail.
 

n°1402554
DamienCYS
Posté le 07-07-2006 à 10:11:27  profilanswer
 

DamienCYS a écrit :

Et en mettant un évenement à l'ouverture du fichier B pour qu'il envoi son nom au fichier A
 
Private Sub Workbook_Open()
  Application.Run "'Fichier A.xls'!PasserNom" ThisWorkbook.name
End Sub
 
et dans la fonction PasserNom appartenant à fichier A tu récupèrer le nom, à voir s'il ne faut vérifier avant si fichier A est ouvert sinon tu ne pourras pas ouvrir Fichier b sans fichier a


 
 
Vu ce que tu veux je pense que la solution que je t'avais déja proposée est adaptée car tu est sur de récupérer le bon nom dès son son ouverture, un simple "on error resume next" avant le passage du nom te permet d'éviter les erreurs si fichier A n'est pas ouvert et ensuite tu fais des copier-coller  dans tes 38 fichiers B, le code est le même quel que soit ton fichier B.

n°1402560
Paul Hood
Posté le 07-07-2006 à 10:16:44  profilanswer
 

Le problème c'est pas qu'on est obligé ou pas de répondre, le probème c'est qu'on comprend pas (enfin moi) ce que tu veux faire.
 
Si tu fais
   Workbooks(Workbooks.Count).Name
juste après que ton fichier B soit ouvert, tu dois récupérer son nom.
 
Sinon l'autre solution c'est de balancer ton code (si c'est pas trop gros)
A toi de voir.

n°1402611
zephyron1
Posté le 07-07-2006 à 10:50:58  profilanswer
 

Paul Hood a écrit :

Le problème c'est pas qu'on est obligé ou pas de répondre, le probème c'est qu'on comprend pas (enfin moi) ce que tu veux faire.
 
Si tu fais
   Workbooks(Workbooks.Count).Name
juste après que ton fichier B soit ouvert, tu dois récupérer son nom.
 
Sinon l'autre solution c'est de balancer ton code (si c'est pas trop gros)
A toi de voir.


 
Oui mais quand est-ce que je dois mettre ce code pour récupérer le nom? Puisque n'importe où où je le mets ça me donne le nom du fichier A et impossible d'ouvrir le B pendant le déroulement de mon programme.
 
Damien, ta solution me plaît mais je ne l'utiliserai uniquement si je ne trouve pas d'autre alternative. Je te remerci beaucoup de ton aide.

n°1402775
Epena
Posté le 08-07-2006 à 07:47:05  profilanswer
 

Il faut peut-être laisser le temps au fichier de s'ouvrir avant de récupérer son nom en utilisant :

DoEvents


avant le code pour ouvrir le fichier B
Epéna

n°1403586
zephyron1
Posté le 10-07-2006 à 10:39:12  profilanswer
 

Merci Epena, je vais essayer ça tout de suite

n°1404406
zephyron1
Posté le 11-07-2006 à 10:37:06  profilanswer
 

:pt1cable:  non ça ne marche toujours pas.
Pas le temps d'ouvrir mon fichier B et donc ça me donne le nom de mon fichier A
 
voici mon code :

         fichierB = ""
         Do
         DoEvents
         fichierB = Workbooks(Workbooks.Count).name
         Loop Until fichierB <> ""

 
J'aimerai que le programme bloque à DoEvents pour que j'ai le temps d'ouvrir mon fichier B. Avec le debuggueur ça marche très bien sinon.

n°1404418
Paul Hood
Posté le 11-07-2006 à 10:46:43  profilanswer
 

T'as qu'a faire une boucle du style
CptFic = workbooks.count
"ouvre ton fichier B"
Do while CptFic= workbooks.count
loop
FichierB= workbooks(workbooks.count).name

Message cité 1 fois
Message édité par Paul Hood le 11-07-2006 à 10:47:36
n°1404477
zephyron1
Posté le 11-07-2006 à 11:48:37  profilanswer
 

Merci Paul mais ton code ne marche pas, Excel ce bloque (écran figé) à l'éxécution de ce dernier.
je comprends pas pourquoi d'ailleurs. :fou:

n°1404478
jpcheck
Pioupiou
Posté le 11-07-2006 à 11:50:41  profilanswer
 

Paul Hood a écrit :

T'as qu'a faire une boucle du style
CptFic = workbooks.count
"ouvre ton fichier B"
Do while CptFic= workbooks.count
loop
FichierB= workbooks(workbooks.count).name


c'est une boucle infini
cptfic=workbooks.count
tu tournes en rond... Mais il a juste dit "une boucle du style" donc c'est à toi de le mettre à ta sauce ^_^()

n°1404501
Paul Hood
Posté le 11-07-2006 à 12:02:08  profilanswer
 

Si la boucle se fige c'est que  
- soit le fichier B est ouvert au moment où tu fais : CptFic = workbooks.count (avant la boucle). Le compteur tient déjà compte du fichier B.
 - soit le fichier B n'est jamais ouvert puisque le compteur n'augmente jamais.

n°1404566
zephyron1
Posté le 11-07-2006 à 13:34:14  profilanswer
 

:(  
Je comprends plus rien. C'est une boucle infinie quoi que je fasse. Que faire? Demander l'ouverture du fichier B dans la boucle? Je sais plus.

n°1404568
Paul Hood
Posté le 11-07-2006 à 13:37:37  profilanswer
 

Ton fichier B s'ouvert dans excel ou dans une visionneuse ?

n°1404617
zephyron1
Posté le 11-07-2006 à 14:25:10  profilanswer
 

il s'ouvre dans excel... Enfin il s'ouvre mais je ne le vois pas car mon écran se fige.

n°1404724
DamienCYS
Posté le 11-07-2006 à 15:52:47  profilanswer
 

Paul Hood a écrit :

Si la boucle se fige c'est que  
 - soit le fichier B n'est jamais ouvert puisque le compteur n'augmente jamais.


 
tant que l'utilisateur ne clique pas sur Ok le fichier B n'est pas ouvert et donc le compteur n'augmente pas
 
par contre j'ai repensé à ce que je te disait sur l'évenement workbook activate du fichier B
 
tu peux faire la même chose dans l'évenement deactivate du fichier A
 
met ce code dans l'objet ThisWorkbook du fichier A
 
Private Sub Workbook_Deactivate()
  MsgBox Workbooks(Workbooks.Count).Name
End Sub
 
je l'ai testé et dès que j'ouvre un autre fichier et que je valide la première boite de dialogue une deuxième me donne bien le nom du fichier que je vient d'ouvrir

n°1406297
zephyron1
Posté le 13-07-2006 à 13:40:55  profilanswer
 

Bon les gars ça ne marche toujours pas. Soit ça me prend le nom de mon fichier A ou soit ça bloque l'ordi.  
Tant pis pour l'instant je cherche autre chose, je chercherai plus en détail quand j'aurai fini. Mais je vous remerci tout de même pour avoir essayé.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Prendre des données dans un fichier actif.

 

Sujets relatifs
modifier chemin du fichier racine (index.php)Lire plusieurs lignes d'un fichier txt avec de l'AJAX
[J2ME] interaction base de donnéesLire un fichier en js
Lire un fichier texte en js[Résolu] Génération fichier PDF depuis fichier XML, en utilisant FOP
Envoi données formulaire vers BDD ne fonctionne pas...upload d'un gros fichier
probleme avec un import fichier texte dans mysql[Batch] Insérer une chaine de caractère devant un nom de fichier
Plus de sujets relatifs à : Prendre des données dans un fichier actif.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR