XL 2021 Activer classeurs ouverts

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous de bon dimanche matin lol :)

Je bute sur un code que je ne parviens par à écrire malgré des tentatives et recherches.
Alors, une fois encore, je me tourne vers nos chers ténors....

Voici mon besoin :
J'ai plusieurs classeurs ouverts : classeur A - classeur B - classeur C
Mon classeur actif est le A
Je voudrais activer le B ou le C

Je n'y arrive pas Grrr !!!

Auriez-vous le bon codes ?
Grand mercie à toutes et à tous...
Et Bon dimanche,
:)
 

Dudu2

XLDnaute Barbatruc
Bonjour,
Voilà ce que j'utilise dans un module séparé:
VB:
Option Explicit

Private Declare PtrSafe Function ShowWindow Lib "User32" (ByVal hWnd As LongPtr, ByVal nCmdShow As Long) As Long
Private Declare PtrSafe Function IsIconic Lib "User32" (ByVal hWnd As LongPtr) As Boolean
'
private Const SW_RESTORE = 9

'-----------------------------
'Active et affiche un classeur
'-----------------------------
Sub WorkbookActivateAndShow(WorkbookName As String)
    Windows(WorkbookName).Activate
    If IsIconic(Windows(WorkbookName).hWnd) Then
        Call ShowWindow(Windows(WorkbookName).hWnd, SW_RESTORE)
    End If
End Sub
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Voilà ce que j'utilise dans un module séparé:
VB:
Option Explicit

Private Declare PtrSafe Function ShowWindow Lib "User32" (ByVal hWnd As LongPtr, ByVal nCmdShow As Long) As Long
Private Declare PtrSafe Function IsIconic Lib "User32" (ByVal hWnd As LongPtr) As Boolean
'
private Const SW_RESTORE = 9

'-----------------------------
'Active et affiche un classeur
'-----------------------------
Sub WorkbookActivateAndShow(WorkbookName As String)
    Windows(WorkbookName).Activate
    If IsIconic(Windows(WorkbookName).hWnd) Then
        Call ShowWindow(Windows(WorkbookName).hWnd, SW_RESTORE)
    End If
End Sub
Bonjour Dudu2 :)
Merci pour ton code.
Je testerai et je reviendrai rendre compte dès que possible
:)
 

Staple1600

XLDnaute Barbatruc
Re

Personnellement, je ne vois pas la plus-value de passer par VBA
(et ce quelque soit le code utilisé)

Pour simplifier encore les choses, on peut aussi utiliser la QAT
WhyVBA.png

Ici, je n'ai eu besoin que de six clics pour m'installer ce "sélecteur" de classeurs
(qui sera à demeure, et sans risque de plantage VBA)

Là où une solution VBA nécessite d'écrire le code (ou de le copier/coller) etc...
(Bref un truc qui dure plus de six clics (*)

(*) oui j'ai compter les clics

Mais s'affranchir des outils natifs d'Excel pour sortir la grosse artillerie VBA, c'est raccord avec l'essence d'une usine à gaz ;)

PS: Message ...écrit avec mon clavier "humour, K.I.S.S et Cie", le tout dans un esprit de camaraderie
Donc inutile de monter en pression, camarades ;)
 

Staple1600

XLDnaute Barbatruc
Les tests ici étaient sur des classeurs non enregistrés

Pour des classeurs enregistrés et ouverts, il suffit d'ajouter l'extension
Ce qui donnerait par exemple
Enrichi (BBcode):
Sub Activer_ClasseurB()
Windows("classeur B.xlsx").Activate
End Sub
Donc pourquoi je parle du message#3
Est-ce que cela lève ta perplexité, @TooFatBoy ? ;)

]
Justement, connaissant le demandeur (et cela aussi vaut pour d'autres membres et questions)
J'ai toujours eu du mal à comprendre que sur XLD quand un "débutant" utilise Excel en dépit du bons sens ou zappe des fonctions natives d'Excel, qu'un grand nombre de répondeurs le laisse s'entêter dans son projet, propose du VBA etc... sans d'abord évoquer les bases d'Excel.
Quel intérêt d'enfoncer un clou avec un fer à repasser quand un marteau suffit ?
[/opinion personnelle qui n'appelle pas forcément de commentaires]
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

[Pour infos]
J'ai édite mon précédent message. ;)
Mais ca ne se te sera pas d'un grand secours

Ce que je voulais dire, c'est qu'Usine à gaz avait déjà la syntaxe dés le message#3
Qu'on passe par Windows ou par Workbook
Sub test_a()
' Pour ceux qui ont mal aux doigts, on saisit un caractère de moins avec Windows ;-)
Windows("test.xlsx").Activate
End Sub
Sub test_b()
Workbooks("test.xlsx").Activate
End Sub
 

Dudu2

XLDnaute Barbatruc
Bonjour @Staple1600
Petite remarque en VBA, si le classeur à activer a été préalablement minimisé (manuellement en général), le ré-activer ne le fera pas se ré-afficher. Il sera effectivement actif mais le dernier classeur affiché le restera. C'est ce qui donne l'impression que l'Activate ne fonctionne pas.
C'est pourquoi dans le code que j'ai donné, j'utilise de l'API pour le faire se ré-afficher en mode RESTORE qui ne préjuge pas de comment il faut le ré-afficher.
 

Staple1600

XLDnaute Barbatruc
Bonjour @Dudu2

N'en demeure pas moins que je ne comprends pas l'utilité du VBA dans le cas présent
(surtout avec Windows 10 et plus)
1) Je clique sur l'icone Excel dans la barre des tâches et apparait les miniatures des classeurs ouverts
2) Item avec ALT+TAB , je peux jongler entre diverses fenêtres (Excel ou pas ) également en miniature
3) La solution de la QAT
4) La solution native : Affichage/Changer de fenêtre.

Mais comme c'est pour rajouter du gaz dans l'usine à gaz, ca doit être normal de se compliquer la vie ;)
 

Dudu2

XLDnaute Barbatruc
N'en demeure pas moins que je ne comprends pas l'utilité du VBA dans le cas présent
Ok, pour ça je n'ai pas examiné tous les posts 😱 donc je ne sais pas.
Le Gaz se fait rare et cher 😂 t'as raison faut faire attention.

Edit: surtout pour les allemands qui ont vu leurs tuyaux pétés par les Yankees et qui maintenant achètent du GNL (américain et russe via l'Inde) 4 fois plus cher. Comme nous ! Encore merci Oncle Sam.
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
J'ai édite mon précédent message. ;)
Mais ca ne se te sera pas d'un grand secours
Je suis bien d'accord avec ton edit, et je l'ai d'ailleurs déjà moi aussi dit plusieurs fois. ;)

Ce que je voulais dire, c'est qu'Usine à gaz avait déjà la syntaxe dés le message#3
J'ai bien compris, mais toi tu parlais de passer par "Windows()", alors que moi je parlais de tout simplement passer par "Workbooks()" qui n'était en fait pas indiqué en #3. That's all. ;)



Ce que je voulais dire avec "quand on connaît le demandeur", c'est qu'après avoir activé le classeur qu'il désire, il peut alors utiliser des trucs du genre
Range("A1").Select ou ActiveCell.Offset(r,l).select.


Bon dimanche
🖖
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 319
Membres
103 177
dernier inscrit
grizly