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,
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,
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
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
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
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]
[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
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.
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
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.
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.