Constante pour activeworkbook.name ?

Bonjour à tous,

Je cherche à récupérer de façon "pérenne" le nom du classeur actif, afin de pouvoir le "ré-activer" après exécution de diverses macros "enchainées" qui, entre autre, créent un nouveau classeur (dont je voudrait également récupérer le nom pour pouvoir "naviguer" entre les 2 par la suite)...

J'ai essayé avec des variables classiques (non déclarées, le soucis vient peut-être de là? Si oui, quel type de variable déclarer?), mais bizarrement la variable se "vide" lorsque la macro qui l'a définie appelle une autre macro ???

J'ai essayé de comprendre comment se servir de Const dans ce cas, mais sans succès...

Difficile de poster un fichier sur le sujet, mon fichier étant énormissime et plein de codes "spaghettis"

A toute fin utile, je précise que les macros sont dans plusieurs modules différents, et qu'elles activent des onglets qui ont eux d'autres macro évènementielles, ....

Bref, un beau bourbier, mais avant d'essayer de tout rendre plus "propre", j'aimerais résoudre ce soucis...

En espérant avoir été clair en l'absence de fichier...

Merci par avance !

Bonsoir

Kiriko a écrit :

le nom du classeur actif

ThisWorkbook.Name

C'est celui qui contient la macro qui est en cours d'exécution

Kiriko a écrit :

créent un nouveau classeur (dont je voudrait également récupérer le nom pour pouvoir "naviguer" entre les 2 par la suite)...

Comment tu le crées ?

A ce moment là que tu peux récupérer son nom, car lors de la création il devient le ActiveWorkbook

ActiveWorkbook.Name

Bonjour Banzai64, et merci de ton intérêt.

En fait, j'ai un truc du style :

sub Macro1 ()
Classeur1 = ActiveWorkbook.Name

Macro2 'une macro qui copie des onglets du Classeur1 dans un nouveau classeur 

Classeur2 = ActiveWorkbook.Name 'pour récupérer le nom du nouveau classeur créé
Macro3 'une macro qui essaye de revenir au Classeur1 avec Windows(Classeur1).Activate mais la variable est vide !!!
end sub

En fait, j'ai souvent fonctionné comme cela mais là, ça plante.

Un élément bizarre, c'est lorsque ça a planté, je suis donc en mode arrêt, si je mets le curseur sur le nom de la variable (Classeur1) dans la Macro3, il m'est indiqué que Classeur1 est vide, alors que sans rien toucher de plus ni sortir du mode arrêt, si je me positionne sur la variable Classeur1 dans la Macro1, il me donne bien la bonne valeur.... Et c'est bien la même orthographe...

J'en perds mon latin...

Merci !

Bonsoir

Je ne connais pas ton programme, donc pas évident de te donner la bonne solution

Essayes ceci

Option Explicit

Public Classeur1 As String
Public Classeur2 As String

Sub macro1()
  Classeur1 = ThisWorkbook.Name
  Macro2
  MsgBox "Classeur 2 : " & Classeur2
End Sub

Sub Macro2()
  MsgBox "Classeur 1 " & Classeur1
  Workbooks.Add
  Classeur2 = ActiveWorkbook.Name
End Sub

Re bonsoir Banzai64 !

Merci beaucoup, c'est parfait!!

Il semblerait que ce soit le "Public" qui me manquait

Pour ma culture personnelle, doit-on les placer en entête de chacun des modules ou les variables sont utilisées, ou 1 seul suffit ?

De toute façon, je vais essayer de me documenter sur le sujet, je pense que dès que l'on creuse un peu, même un débutant comme moi devrait pouvoir trouver (Public, les modules,...)

En tout cas, encore un grand merci,

C'est un point de détail, mais sache que c'est une énorme épine que tu m'enlèves...

Amicalement,

Bonsoir

Une déclaration en Public suffit, sinon l'interpréteur va râler

Un conseil (bien que je n'aime pas trop ce mot) utilises Option Explicit (qui obliges la déclaration de toutes les variables)

Et cette option est à placer dans tous les modules utilisés

Bonnes découvertes avec l'aide : Positionnes toi sur un mot et appuies sur F1

Merci encore Banzai64 !

Une question bonus :

Y a-t'il un moyen de déclarer une variable (ou Constante ??) à l'ouverture du classeur avec la valeur de activeworkbook.name, qui conserve sa valeur (qui serait donc disponible à chaque exécution de macro sans devoir la redéclarer à chaque fois ? (j'espère que je suis clair...)

Encore merci !!

Bonjour

je ne crois pas que déclarer une constante avec un nom variable soit possible

Mais ce que tu peux faire

Dans un module standard tu déclares en Public ta variable et celle ci sera initialisée dans la 1ère macro exécutée (qui peut être Workbook_Open)

Comme cela cette variable sera "connue" de toutes les macros de ton classeur

Merci encore Banzai64 !

Je vais tester mais tu veux dire qu'elle est attribuée tant que le classeur est ouvert ?

C'est à dire une fois une macro exécutée (et terminée), si j'exécute ensuite d'autres macros, elles connaissent toutes la valeur de la variable ? Car c'est ce à quoi je cherche à aboutir....

Merci encore !

Bonjour

Regardes ce fichier, cela répondra à certaines questions

Te garantir que cette variable restera toujours avec la bonne valeur, je ne peux pas

Il me semble que lors de modification de, macro, cette variable perdait sa valeur, il fallait la réinitialiser

Bonjour le forum,

Bonjour Banzai64,

Merci beaucoup, il semblerait que ce soit exactement ce dont j'avais besoin.

J'ai testé (mais pas encore dans tous les cas de figures), et ça fonctionne très bien pour l'instant.

Je ne suis pas sûr de comprendre ta dernière phrase :

Il me semble que lors de modification de, macro, cette variable perdait sa valeur, il fallait la réinitialiser

,

Accepterais-tu de me l'expliquer avant de clore ce sujet ?

Avec toute ma reconnaissance,

Cordialement,

Kiriko

Bonjour

Je programme pas mal, et (sans en être sur à 100%) lors de modifications du code, puis de tests la valeur de la variable à été perdue

Re bonjour,

Merci encore !

Je reformule ce que j'ai compris (ne te sent pas obligé de me répondre si j'ai juste).

La variable ne peut (éventuellement) perdre sa valeur uniquement (et encore ce n'est pas sûr) si on rentre dans le projet VBA, que l'on modifie, rajoute, ou enlève une (ou plusieurs) ligne(s), et/ou si on ajoute (/retire?) des macros....

Si ce n'est que ça, c'est parfait pour moi.

Merci à toi, Banzai64 !

Cordialement,

Rechercher des sujets similaires à "constante activeworkbook name"