atteindre "l'autre classeur" avec nom variable

Piboulet

XLDnaute Nouveau
Bonjour le Forum
j'ai un point de blocage dans mon code : à partir du classeur qui a "mamacro" (thisworbook) je veux agir sur un autre classeur existant ("nom trés variable"!) ouvert avant ou aprés le classeur à macro. La soluce de "workbook(2)"pour le 2ème classeur arrivé fonctionne mais est contraignate pour le user, car obligé de prévoir d'ouvrir le classeur à macro d'abord. Pas toujours évident!
Dans le même esprit, je veux, au cours du code fermer ce classeur car plus besoin, alors qu'entre temps un classeur "TOTO.xls" est arrivé. Je pressents l'utilisation d'un workbook.count ou activesheet.count et prendre le dernier, mais je ne sais pas le mettre en oeuvre...et je l'ai vu un jour sur le forum, quand je n'en n'avais pas l'utilité..oups!
Si quelqu'un peut me diriger.
 

Piboulet

XLDnaute Nouveau
Re : atteindre "l'autre classeur" avec nom variable

Merci pour ta réponse mais début de mon code:
Sub Importdonnées()
' Touche de raccourci du clavier: Ctrl+Maj+T
ActiveSheet.Select'ect...
Je ne peux pas programmer le "nomclasseur" car il est trop variable. Le paliatif que j'ai trouvé c'est de démarrer sur la fenêtre active du fichier à traiter, et de faire Ctrl+Maj+T. Je préfèrerai mettre un bouton dans le menu macro, mais je ne sais pas désigner l'autre classeur ouvert.
 

Catrice

XLDnaute Barbatruc
Re : atteindre "l'autre classeur" avec nom variable

Bonsoir,

D'apres ce que je comprends, tu vas d'une façon agir sur ce fameux classeur à travers ta macro ...

Dans ce cas, au moment où tu manipule sur de classeur, tu mémorises son nom par :
NomClass = ThisWorkbook.Name

Tu déclares :
Public NomClass
Pour que la variable puisse etre réutilisée dans un autre module.

Et tu le rappelles plus tard par, par exemple :

Workbooks.Open Filename:=NomClass
ou
Windows(NomClass).Close
 

CHALET53

XLDnaute Barbatruc
Re : atteindre "l'autre classeur" avec nom variable

Bonjour,

Autre solution que j'ai eu l'occasion de mettre en oeuvre.

Créer un classeur pilote (que l'utilisateur ouvrira systématiquement). Ce classeur ouvre tous tes classeurs dans l'ordre que tu veux.
Ta dernière instruction met en fenêtre active le fichier que tu souhaites rendre visible à l'utilisateur (et éventuellement ferme le fichier pilote)

A+
 

Piboulet

XLDnaute Nouveau
Re : atteindre "l'autre classeur" avec nom variable

Merci Catrice et Chalet.
je veux que la macro "attaque" l'autre fichier ouvert, quelque soit son nom
J'ai trouvé sur Wiki Michel Xld la formule:
Worksheets(Worksheets.Count).Select
qui sélectionne la dernière fenêtre d'un même classeur, quelque soit le nom de cette fenêtre.
C'est ce que je veux, mais avec les classeurs :
Workbooks(Workbooks.Count).Select
avec les classeurs dèjà OUVERTS , mais ça marche pôo .
Par exemple, si je me positionne sur le fichier possédant la macro "thisworbook.activate" , et que je déclenche un compteur, avec 2 classeurs ouverts, le dernier sera forcément l'autre???
Merci pour votre aide...
 

Catrice

XLDnaute Barbatruc
Re : atteindre "l'autre classeur" avec nom variable

Piboulet,

Je reste sur mes positions ;-)

Ouvres-tu les classeurs par macro ?

Si oui, en utilisant :
NomClass = ThisWorkbook.Name
Au moment de l'ouverture (ou de l'enregistrement, ou de la fermeture), tu peux mémoriser le nom du classeur et en faire ce que tu veux.

Si non, donne un bout de ton code ou détaille un peu plus le contexte (fait un step by step d'un cas typique) car j'ai du mal à suivre ce que tu veux faire ...
 

Piboulet

XLDnaute Nouveau
Re : atteindre "l'autre classeur" avec nom variable

Bonsoir Catrice et le Forum
Merci pour les efforts de réflexion. C'est à la fois simple et difficile à expliquer.
je précise bien que le nom de la "source" n'est pas exploitable car trop variant, et qu'il n'est pas sur disque. Juste à l'écran en fichier temporaire.
Je tente de joindre qque chose de plus clair en PJ.
Puis je vais au lit.... Bonne nuit à tout le monde
 

Pièces jointes

  • Mamacro.XLS
    40 KB · Affichages: 97
  • Mamacro.XLS
    40 KB · Affichages: 94
  • Mamacro.XLS
    40 KB · Affichages: 97

Luki

XLDnaute Accro
Re : atteindre "l'autre classeur" avec nom variable

Bonjour le fil, Piboulet

Si je comprends bien:
  1. Tu as une feuille de données active à l'écran
  2. Tu ne peux pas avoir déjà dans ce fichier, du code ou des zones nommées.
  3. Tu dois récupérer les données de la feuille active par macro pour les exploiter
  4. Ta macro se trouve sur un autre fichier
  5. Ton Pb est que pour lancer ta macro, tu dois activer ton classeur macro et de fait, tu ne sais plus quel est le classeur qui était actif avant de lancer la macro.
Alors, je propose (c'est une formule très tendance en période électorale! lol!) : De lancer ta macro par un bouton dans la barre d'outils ou de menu Xl. Ainsi, tu pourras la lancer à partir de ton classeur actif, directement.

Pour cela, il faut:
  1. Que ton classeur macro crée un bouton dans la barre à son ouverture > une macro dans "thisworkbook open"
  2. Que ce classeur soit ouvert au lancement d'xl > l'enregister dans le classeur perso ou le répertoire xlstart ou en macro complémentaire.
  3. Supprimer le bouton en quittant xl > une macro dans "thisworkbook before close"
Dis-nous si c'est celà que tu cherches, on verra alors pour la technique.
A te lire
 

ChTi160

XLDnaute Barbatruc
Re : atteindre "l'autre classeur" avec nom variable

Salut Piboulet
Bonjour le fil
Bonjour le Forum

Je te propose Lol, en pièce jointe une premiere approche de ce que Luki te propose

un Classeur qui pourra (nous n'en sommes pas la Lol) être enregistré comme macro complémentaire ,à l'ouverture de ce classeur un Bouton Gestion (à déterminer) est crée, on peut ensuite à partir de ce bouton faire plein de choses Lol par exemple la on clique sur Gestion Temporaire (à déterminer) puis Transfert on recueille le nom du Classeur Actif (ouvre ensuite un autre Classeur) et recommance ,Cliques Transfert

Le fichier : Regarde la pièce jointe Test_TransfertV1.xls

Bonne journée
 

Pièces jointes

  • Test_TransfertV1.xls
    28.5 KB · Affichages: 55
  • Test_TransfertV1.xls
    28.5 KB · Affichages: 58
Dernière édition:

Luki

XLDnaute Accro
Re : atteindre "l'autre classeur" avec nom variable

le fil...
Salut Jean-Marie, ça me fait plaisir de partager un fil avec toi! ça faisait longtemps...

Piboulet, un exemple de mon côté, moins complet que celui de chti, juste le bouton, pas le menu complet (vin et café non compris!)

Chti, il semble qu'il manque un end with dans ton code.. regarde.

A +
 

Pièces jointes

  • piboulet.xls
    27.5 KB · Affichages: 70

Piboulet

XLDnaute Nouveau
Re : atteindre "l'autre classeur" avec nom variable

Bonjour Luki, Chti, Catrice et le Forum
Les 5 points de Luki; c'est tout à fait mon PB!
Toutefois, compte tenu de la météo dans le sud, je risque de ne pas alimenter ce fil aujourd'hui.
je regarde tout cela dés que possible. Merci, et Bon dimanche à tous.
 

ChTi160

XLDnaute Barbatruc
Re : atteindre "l'autre classeur" avec nom variable

re Luc
Effectivement j'ai fait plusieurs fichiers dans lesquels j'ai supprimé des choses et la erreur un End with qui manque Lol j'ai modifié et changé le fichier que je remets ici

Le fichier : Regarde la pièce jointe Test_TransfertV1.xls
ou alors il suffit de rajouter un End With voir extrait de la macro

Code:
With CommandBars(1).Controls.Add(msoControlPopup, before:=10)
         .Caption = "Gestion"
  
    With .Controls.Add(msoControlPopup)
           .Caption = "Gestion Temporaire"

        With .Controls.Add(msoControlButton)
             .Caption = "Transfert"
             .OnAction = "Transfert" 'entre les guillemets : _
                                                          nom de votre procédure
        End With
    End With
[COLOR=Blue]End With[/COLOR]
Bon dimanche à vous
moi je vais aller au boulot d'ici peu Lol
 

Pièces jointes

  • Test_TransfertV1.xls
    28.5 KB · Affichages: 48
  • Test_TransfertV1.xls
    28.5 KB · Affichages: 51

Piboulet

XLDnaute Nouveau
Re : atteindre "l'autre classeur" avec nom variable

Bonjour à tous et le Forum
Hum.. je ne sais qui remercier : tout est OK. Pour ce code, je vais utiliser le bouton de Luki. Les boutons de Chti me donne des envies de re-structurer l'existant: BVA quand tu nous attrapes..
J'utile aussi le Nomclass proposé par Catrice.
J'ai testé en situation réelle : ça fonctionne bien.
Mais?
Si les soluces exposées sont pleinement satisfaisantes, je reste avec mon interrogation :
Est-il possible, comme pour les fenêtres, de compter et d'activer un classeur ouvert sans se positionner sur la feuille active, en particulier s'il n'y a que 2 classeurs ouverts??
Voir ma question ci-dessus le 07/04 à 15h34
Mais je me répète : les solutions fournies tournent trés bien.
Merci à vous tous.
 

Luki

XLDnaute Accro
Re : atteindre "l'autre classeur" avec nom variable

Salut Piboulet,

Pour répondre à ta question théorique : oui, c'est possible via un gestionnaire d'événement qui peut détecter chaque ouverture ou activation de classeurs, et donc d'en créer la liste. Mais ça implique des modules de classe, une feuille macro ( complémentaire, idéalement) qu'il faut charger au lancement d'excel.

En somme, c'est une macro qui va espionner ce qui se passe dans xl et dès que survient l'événement choisi, va lancer une action ( création de la liste des derniers fichiers ouvert par ex)

Il y a probablement d'autres solutions, mais je ne les connais pas toutes.

Bonne soirée

Edition : Fin de journée, limite Zop pour la réponse. Donc je reprends.

Oui,tu peux compter les classeurs ouverts et en faire la liste. Et bien sûr lancer une macro faisant référence à un classeur sans qu'il soit actif. Mais je pense que la question reste entière: comment indiquer à la macro sur quel classeur elle doit travailler si tu ne connais pas le nom de ce classeur ou qu'il ne dispose pas de signe distinctif ( un élément de son nom, une cellule nommée spécifique, une valeur sockée dans un nom, etc.) Et sauf erreur, c'était l'objet de ce fil!

A +
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 905
Membres
103 982
dernier inscrit
krakencolas