> Tous les forumsBureautique

 Macro Nom FichierSujet résolu
Statut du sujet : RESOLU Imprimer
 bruce68
  Posté le 22/09/2007 @ 11:06  
 Petit astucien

279 Messages

Bonjour à tous

Comment recuperer le nom de fichier pour le mettre dans une variable pour eviter de modifier la macro contenant le nom du fichier

Chaque fois que je renomme mon fichier il faut fair une modif dans la macro

Je veux garder le fichier "Original" est le renommer en Fichier_07 ; Fichier_08 etc etc ...

A la place de :("Original.xls"). je voudrais mettre une variable qui recupere le nom de fichier pour eviter de modifier la macro

Je charge le Fichier "Original" qui lui charge le fichier "Liste"

Private Sub Workbook_Open()
Workbooks.Open Filename:="D:\Mes Documents\Travail\"Liste.xls"
Windows ("Original.xls").Activate
Sheets("Inscrits").Select
End Sub

Si quelqu' un a une idée ?

Bonne journée à tous et Merci

 Afficher le profil de bruce68 Envoyer un message privé à bruce68
 
 
Publicité
 gilbert_rgi  Posté le 22/09/2007 à 11:40  
Petit astucien


839 Messages

Bonjour

Pourquoi ne pas faire un modele .xlt au lieu d'un .xls comme cela l'original serait conservé ?

Cdlt



Modifié par gilbert_rgi le 22/09/2007 11:40
Afficher le profil de gilbert_rgi Voir la configuration de gilbert_rgiEnvoyer un message privé à gilbert_rgi
 Revenir en haut de la page
 galopin01  Posté le 22/09/2007 à 12:30  
Astucien

4315 Messages

Bonjour,

utilise ThisWorkbook.Name :

Sub Test()
Z = ThisWorkbook.Name
MsgBox Z
End Sub

A+

Afficher le profil de galopin01 Voir la configuration de galopin01Envoyer un message privé à galopin01
 Revenir en haut de la page
 bruce68  Posté le 22/09/2007 à 13:18  
Petit astucien

279 Messages

Bonjour à tous

Merci Galopin cela fonctionne.

Mais comment garder la valeur se trouvant dans la variable "Z" jusqu"a la fermeture des fichiers ?

Private Sub Workbook_Open()
z = ThisWorkbook.Name

Workbooks.Open Filename:="D:\Mes Documents\Travail\Liste.xls"
Windows(z).Activate
Sheets("Inscrits").Select

End Sub

Merci de l'aide

Afficher le profil de bruce68 Voir la configuration de bruce68Envoyer un message privé à bruce68
 Revenir en haut de la page
 galopin01  Posté le 22/09/2007 à 13:38  
Astucien

4315 Messages

Bonjour,

Dans un module standart (Module1...) mettre :

Public z

en tête du module avant toute procédure.

... mébon, tu n'as sans doute pas besoin de stocker ça dans une variable. Tu peux appeler ThisWorkbook à tout moment : ThisWorkbook est toujours le classeur qui exécute la macro.

A+



Modifié par galopin01 le 22/09/2007 13:42
Afficher le profil de galopin01 Voir la configuration de galopin01Envoyer un message privé à galopin01
 Revenir en haut de la page
 bruce68  Posté le 23/09/2007 à 19:18  
Petit astucien

279 Messages

Bonsoir à tous

Merci Galopin , j'ai encore une question:

Comment peut on étendre le variable z au 2° classeur

Private Sub Workbook_Open()
z = ThisWorkbook.Name 1° Classeur

Workbooks.Open Filename:="D:\Mes Documents\Travail\Liste.xls" 2° Classeur
Windows(z).Activate 1° Classeur
Sheets("Inscrits").Select

End Sub

En mettant Public z dans module1 du 2° classeur cela ne fonctionne pas ( en tout début)

Bonne soiré à tous et Merci

Afficher le profil de bruce68 Voir la configuration de bruce68Envoyer un message privé à bruce68
 Revenir en haut de la page
 galopin01  Posté le 23/09/2007 à 22:07  
Astucien

4315 Messages

Ben...
ça me semble vraiment alambiqué ton truc. Je t'ai dit que le premier classeur n'a pas besoin de z. Quand c'est lui qui a la main, il sait toujours que c'est bien lui (ThisWorkbook)

Si tu souhaites appeler un autre classeur et lui dire qui l'a appelé tu peux par exemple écrire cette donnée "en dur" dans une cellule cachée :

Workbooks.Open Filename:="D:\Mes Documents\Travail\"Liste.xls"
ActiveWorkbook.Worksheets("cachée").Range("A1") = "blabla.xls"
ThisWorkbook.Activate
Sheets("Inscrits").Select


Il y a bien d'autres possibilités, mais pour l'instant ta construction (ou l'explication) m'est incompréhensible. (illogique) Si tu veux bien me décortiquer le problème de manière plus détaillée, on verra comment adapter une solution à ton besoin.

A+

Afficher le profil de galopin01 Voir la configuration de galopin01Envoyer un message privé à galopin01
 Revenir en haut de la page
 bruce68  Posté le 24/09/2007 à 00:30  
Petit astucien

279 Messages

Bonsoir à tous, Bonsoir Galopin

J'ai 2 Classeurs

1-Tournoi_Original (que je renomme en Tournoi_07 etc etc) avec plusieurs feuiles:Inscrits; Tournoi etc etc...

2-Liste_Scrabbleurs avec 1 feuille :Liste (ma base de données)

J'ouvre le classeur 1-Tournoi_Originam ou Tounoi_07 Par l'intermediaire de This Worbook j'ouvre le classeur 2-Liste_scrabbleurs

Private Sub Workbook_Open()

z = ThisWorkbook.Name
Workbooks.Open Filename:="D:\Mes Documents\Fichiers_Excel\Travail\Liste_Scrabbleurs.xls"
Windows(z).Activate
Sheets("Inscrits").Select

End Sub

Pour pouvoir me servir du classeur: Tournoi_Original en Tournoi_07, dans l'UserForm2 j'ai des commandes qui se servent de mon classeur pour travailler , si je garde Tournoi_Original et que le classeur s'appelle Tournoi_07 plus ne fonctionne j' ai changé ceci par la variable "z" qui modifie le nom du classeur et tout fonctionne.

(Quand je clique sur Inscription de la feuille Inscrit)

Quelques fois il faut que je change de Classeur ( 2-Liste_Scrabbleurs) pour ajouter ou modifier 1 ou plusieurs joueurs, quand je veux retourner dans mon classeur Tournoi_07 par mon UserForm1 cela ne fonctionne pas voilà ou est le probleme.

Ci joint les 2 classeurs pour bien comprendre le probleme

Bonne nuit et merci à Galopin pour son dévouement

http://cjoint.com/?jyakOuTJZN

Afficher le profil de bruce68 Voir la configuration de bruce68Envoyer un message privé à bruce68
 Revenir en haut de la page
 galopin01  Posté le 24/09/2007 à 12:58  
Astucien

4315 Messages

Bonjour,
Je ne sais pas trop par quel bout commncer... Faudrait voir ce qu'en pense "les pros."

A mon avis, c'est une erreur de conception que de donner la main à la base de donnée (Liste) : S'il doit y avoir consultation, voire modification de cette base de donnée, tout celà doit se faire à partir du programme appelant. (Ou séparément au préalable)

Quelle est la finalité exacte : Il s'agit de faire un programme utile ou s'il s'agit de s'entraîner à faire des Userforms (USF) ? Mon opinion est qu'il n'y a rien de tel pour compliquer des choses très simples.

Personnellement je ferais ma saisie directement dans la feuille "inscrits" ; à charge pour les évènementielles de traiter, la mise en forme des données, la consultation ou la modification de la BD. Celle-ci devant rester (quasi) invisible -pour ne pas dire inaccessible- pour l'utilisateur...
La BD ne devrait même pas contenir de macros (sauf pour des utilisations toutes autres)

Une autre possibilité (encore meilleure) est de traiter séparément :
D'abord la vérification des inscrits et la mise à jour de la base de donnée
Ensuite l'inscription proprement dite...

Il reste que la maintenance d'une base de donnée obéit à des règles strictes et complexes que tu ne semble pas mesurer :

Sauf contraintes particulières que je ne peux évaluer, tu sembles vouloir travailler à partir des noms qui vont rapidement poser des problèmes d'homonymie, plutôt que sur le N° de licence qui me semble plus adapté à travailler sur la BD. Il faudrait évaluer si c'est une erreur de conception ou si tu as vraiment des conditions de travail particulières...

Je postule que tout travail sur une BD Excel doit comporter un index unique (dans ton cas le N° de licence)

La vrai question est donc : Quand tu fais une inscription ce N° de licence est-il connu à 99 % des cas. Ces numéros identifient-il les compétiteurs d'une manière univoque et invariable ou au contraire sont-ils peu fiables (car variables, réutilisés d'une année sur l'autre pour d'autres compétiteurs, ou mal connus des compétiteurs, ou non communiqués par les compétiteurs au moment de l'inscription)

Si la réponse est non alors il vaut mieux commencer par travailler ta base de donnée séparément pour t'assurer que tes inscrits sont tous dans la base de donnée, faire les modifications nécessaires et récupérer un N° d'index (de licence) fiable.

Ensuite YORAPUKA faire tes inscriptions définitives à partir de ce N°

Bon... il ya des questions subsidiaires ! En particulier tous les inscrits doivent-ils nécessairement être incrits préalablement sur la BD (Liste) ? M'enfin...

En résumé, difficile de faire l'économie d'un minimum d'analyse avant de se lancer tête baissée dans une programmation hasardeuse, mais personnellement je te conseillerais d'abandonner ton hypothèse de travail au profit d'une méthode plus conventionnelle. Sous peine d'être obligé de réinventer la roue à chaque fois et de (beaucoup) te compliquer la vie inutilement.

Pour lancer le débat !

A+



Modifié par galopin01 le 24/09/2007 12:59
Afficher le profil de galopin01 Voir la configuration de galopin01Envoyer un message privé à galopin01
 Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte



Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !
 

 > Tous les forumsBureautique

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page