XL 2010 attribuer le nom du classeur actif à une variable

RolfiRagnar76

XLDnaute Nouveau
Bonjour à tous,
Nouvellement inscrit, je viens auprès du forum chercher conseil auprès des passionnés d'Excel et de VBA.
Je programme "un peu" en VBA pour me créer des "petites applications".
Je bute aujourd'hui sur quelque chose de simple je pense, comme de faire une déclaration d'un type spécial (WorkBooks...)
Je travaille avec 2 classeur Excel, un classeur contenant ma macro (xlsm) et un classeur que je qualifierais de fichier sources de données (xls)
Ma macro fonctionne correctement, mais je souhaite à l'améliorer, en voulant "récupérer" le nom du classeur xls et de l'utiliser comme variable par la suite, afin de changer de classeur ( aller sur un ou l'autre des classeurs selon le déroulement de la macro en ayant récupérer au début de macro, le nom du fichier (Active Wb.name).
Est ce un problème de syntaxe ou le fait de devoir déclarer une nouvelle variable (workbooks?)



1628525731738.png
 

Wayki

XLDnaute Impliqué
Salut,
Je te propose quelque chose de très très simple mais qui a qu'une condition, c'est que tu ouvres tes classeurs toujours dans le même ordre.
T'as juste à déclarer :
a = workbooks(1)
Si tu veux vérifier à quoi a correspond, soit tu met un point d'arrêt dans ton module, soit :
Msgbox a.name
un exemple :
Sub test()
Dim wbxls As Workbook, wbxlsm As Workbook

Set wbxls = Workbooks(1)
Set wbxlsm = Workbooks(2)


MsgBox wbxls.Name
MsgBox wbxlsm.Name


End Sub
A +
 
Dernière édition:

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir
SAns fichier on ne peut deviner exactement ce que tu veux faire
J'ai donc un peu suivi de ce que tu fais selon l'image
je mets aussi le classeur4 pour l'exemple dans mon code
A voir si c'est l'idée
Attention : il faudra ensuite tester si "Classeur4" n'est pas déjà ouvert sinon erreur
 

Pièces jointes

  • test 2class.xlsm
    15.5 KB · Affichages: 10
  • Classeur4.xlsx
    8.9 KB · Affichages: 6

RolfiRagnar76

XLDnaute Nouveau
Bonjour le Forum, Bonjour Wayki et herve62
J'ai regardé et essayé vos solutions respectives.

Je vais apporter une précision qui peut peut-être avoir une grande importance pour vous. J'ai enregistré sur mon ordinateur le fichier Excel "xlsm" qui comprends la macro que j'exécute sur le fichier téléchargé "xls" au nom variable (incluant date et heure du téléchargement depuis le serveur.
Pour obtenir mon résultat final, à savoir, traitement et mise en forme des données du fichier "xls", j'ouvre bien évidemment les 2 fichiers Excel, je me place sur le fichier "xls" et exécute ma macro depuis un raccourci clavier défini.
à ce titre, il semble que le fichier "xlsm" est d'office le Worbooks(1), peut être du fait que le début de la macro s'exécute depuis ce fichier?


La solution de Wayki fonctionne donc correctement si je modifie ta proposition de code, en modifiant, c'est à dire en inversant, pour avoir le Set wbxlsm = Worbooks(1)...
En Effet, en exécutant ton code proposé, cela me donnait la mauvaise réponse (inversion des noms) dans le MsgBox.
La seule chose qui me surprenne, c'est que le nom donné par le MsgBox wbxlsm.Name est "Personal.XLSB", nom donné au classeur de macro personnel alors que la macro que j'exécute est enregistrée dans le classeur "xlsm". nommé "Recapitulatif.xlsm"

La solution proposé par herve62, a également permis d'éclairer ma "petite lanterne"...

Après plusieurs essais, je suis parvenu à mes fins, en utilisant une partie de son code, à savoir :

pour rappel, en début de macro, je suis sur étant sur la feuille du classeur xls:

>>>Toto = ActiveWorkbook.Name

' le msgBox pour s'assurer que c'est bien le résultat attendu mais il peut être retiré...

>>> MsgBox Toto

execution de ma macro puis pour passer d'un classeur à l'autre au cours de son déroulement

>>>Workbooks(Toto).Activate ou Worbooks ("Mon_Classeur_a_moi.xlsm").Select

Merci à vous 2 pour vos suggestions bien utiles qui m'ont permis d'avancer, et d'apprendre des nouvelles choses en VBA.

Déclarer correctement ses variables, écrire "proprement" son code, le VBA, c'est utile, simple, parfois, mais coder demande beaucoup de rigueur et d'attention.
 

dysorthographie

XLDnaute Accro
Bonjour,
Notes que le classeur qui exécute la macro est toujours Thisworbook !
De là tu à accès à ses onglets
Thisworbook.Sheets("Feuille1"), les cellules Thisworbook.Sheets("Feuille1").Range("A1"), etc...
Tu peux ouvrir ton xls
Code:
Sub test()
Dim wb as Workboock
Set wb=Workboocks.open(fichier)

End Sub
Récupérer le nom de ton classeur ne t'apportera rien !
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG