:aie: :ptdr: :fou:
Version imprimable
merci Arkham:plusser:Citation:
Sinon pour ouvrir Excel dans une nouvelle instance, je crée simplement une nouvelle application avec CreateObject
Pierre peut rire autant qu'il veut il n'a pas ce resultat la
Pièce jointe 413683
Patrick,
Je n'ai pas dit que ta solution ne fonctionnait pas. Je dis qu'elle est absurde, tant sur le plan de l'ergonomie que fonctionnellement.
Sur le plan de l'ergonomie, personnellement, ça m'enerverait qu'un formulaire soit en permanence en avant plan. Si je choisis de travailler sur une autre appli, ce n'est pas pour garder la tienne en avant plan... Le développeur qui m'impose cela ne me verra jamais travailler avec son appli. C'est à l'utilisateur de décider ce qu'il veut en avant plan, pas au développeur.
Sur le plan fonctionnel, deux choses:
Il va falloir gérer cela pour chaque userform?
Et si une autre appli veut aussi rester tout le temps en avant plan, c est laquelle qui gagne?
As-tu essayé de faire fonctionner en même temps ton fichier et une copie de ton fichier? Quel est le comportement constaté ?
Déjà dit dans une autre discussion pas si ancienne que cela :rouleau:Citation:
Pardi :ccool:
Et si une autre appli veut aussi rester tout le temps en avant plan, c est laquelle qui gagne?
Pire : certaines applications (notamment de Microsoft) ne se contentent pas de "prendre" le premier plan; elles sont de surcroît dotées d'un mécanisme tel (par addressof) qu'elles "récupèrent" sans cesse ce premier plan si d'autres s'y mettent. ;)
re
oui testéCitation:
As-tu essayé de faire fonctionner en même temps ton fichier et une copie de ton fichier? Quel est le comportement constaté ?
et je l'ai bien precisé au post 24 en dessous la capture en terme clair que ca ne fonctionnait que pour la 1° instance ouverte
CQFD
re
une autre idée m'est venue en lisant une autre discussion tres recente
ce fichier userform est il utilisé tout seul (click sur licone du fichier ou son raccourci pas trafiqué!! )
ou est forcement lancé par l'executeur
ou meme les deux
je te propose de :
soit masquer uniquement le classeur si il est pas tout seul dans son instance de l'application
soit masquer l'application si il est tout seul dans son instance de l'application
pour cela :
1°dans le fichier lanceur et dans l'evenement d' un bouton ou autre methode qui te sert a le lancer
tu constatera que je ne cré pas de new instance de l'application excel le fichier userform s'ouvre donc dans la meme instance du lanceurCode:
1
2
3
4
5 Dim WBK2 Private Sub CommandButton1_Click() set WBK2=Workbooks.Open (Environ("userprofile") & "\DeskTop\fichierZ.xls") End Sub
2°dans le fichier userform et dans l'evenement open du workbook
donc iciCode:
1
2
3
4
5
6
7
8 Private Sub Workbook_Open() If Workbooks.Count > 1 Then Windows(ThisWorkbook.Name).Visible = False Else Application.Visible = False End If UserForm1.Show 0 End Sub
- a l'open du classeur si il est tout seul dans son instance l'application sera invisible sinon visible
- si il n'est pas tout seul c'est le classeur qui sera invisible
Dans le userform pour cette demo j'ai ajouté des boutons visible On/Off pour le classeur et l'application pour que tu puisse voir le resultat et réafficher le cas echeant l'un ou l'autre
ca fait en quelque sorte des boutons bascule On/Off pour les visible/invisible et le bouton application visible n'est operant que si le classeur userform est tout seul dans son instanceCode:
1
2
3
4
5
6
7
8
9
10 Private Sub CommandButton1_Click() x = Windows(ThisWorkbook.Name).Visible If x = True Then x = False Else x = True Windows(ThisWorkbook.Name).Visible = x End Sub Private Sub CommandButton2_Click() x = Application.Visible If x = True Then x = False Else x = True If Workbooks.Count = 1 Then Application.Visible = x End Sub
dans le terminate du userform ne sachant pas ce que tu fait avec le classeur userform je me suis contenté de fermer le classeur ou l'instance de l'application selon le mode dans le quel il s'est positionné
voila dans n'importe quel cas sans créer d'instance sans shell et tout le toutim tu a ton userform d'afficher sans le classeurCode:
1
2
3
4
5
6
7
8
9
10
11 Private Sub UserForm_Terminate() ' ' ici enregistrement des modifs OU!! pas ' Application.DisplayAlerts = False If Workbooks.Count > 1 Then ThisWorkbook.Close Else Application.Quit End If End Sub
et si tu voulais eventuellement travailler sur les données du classeur userform a partir du classeur lanceur
set toi de l'object "WBK2" qui est le classeur la variable est globale dans le module de la feuille ou se trouve le bouton dans cette exemple
te restera de decider si le first plan du userform est important pour toi OU!! pas
on peut certainement parfaire le truc mais c'est fonctionnel
reste a avoir pour les 2d instances mais j'ai trouvéla chose suffisament interessante pour l'expliquer
Ne masque pas Excel mais uniquement la fenêtre de ThisWorkBook. L'application reste visible (ruban, barre d'état, barre de titre, ...).Code:Windows(ThisWorkbook.Name).Visible = False
Bonjour,
J'ai pris en considération toutes vos remarque et il est vrais qu'il existe des risques à masquer une application surtout si il subviens des problèmes de plantage de l'application.
Je me base sur l'idées de plusieurs personne et essaye de prendre le meilleur des idées.
Que penser vous de la démarche suivante :
Je lance mon exécuteur qui contient dans workbook_Open :
Mon but ici est qu'il soit invisible pour l'utilisateur, Il se lance, lance le fichier principale et ce ferme. Cependant la fermeture ne s'effectue plus une fois l'autre fichier lancer, je mettrait donc dans l'autre fichier une ligne du genre :Code:
1
2
3
4 Private Sub workbook_open() Shell ("excel C:\Users\X2018958\Desktop\Test_executeur\Fichier.xlsm /x") Thisworkbook.close End Sub
Si vous avez d'autre solution pour que le fichier se ferme correctement de lui même je suis tout ouïl.Code:Workbooks("executeur.xlsm").Activate
Dans le second fichier je ne souhaite plus donc le rendre invisible afin d'évité les problème cependant j'aimerais le forcer a se minimized.
avec la ligne :
Cependant quand je fais cela le formulaire ne se lance pas correctement, il se lance mais en tout petit (à cause du minimized je pense) ... Sachant que je l'affiche sur tout l'écrans avec le code :Code:Application.WindowState = xlMinimized
Code:
1
2
3
4
5
6
7 With Me 'Met le formulaire en pleine écran .StartUpPosition = 3 'le formulaire s'ouvre en plein écrans .Width = Application.Width .Height = Application.Height .Left = 0 'a gauche .Top = 0 End With 'en haut
une fois que j'aurais la solution pour ses deux petit problème :
- fermer l'exécuteur proprement même au lancement d'un autre fichier.
- Lancer l'userform proprement même au minimized de l'application.
Je souhaiterais forcé le minimized de l'application (ici dans une instance séparé et qui n'affectera pas l'utilisateur).
Par exemple :
Dans le formulaire il sera toujours possible d'excéder au ficher.Code:
1
2
3 If userformactif <>Admin then If Application.WindowState <> minimized Then Application.WindowState = minimized end if
J'ai donc un début de solution mais je ne sais pas si il est possible d'avoir l'evenement windowState_Change dans un userform. et je préfère vous demander conseil avant de faire n'importe quoi.
Cette solution permettrait :
- D'évité de masqué l'application Excel et donc de créer des moment gênant.
- De ne pas contraindre l'utilisateur à aller cherche le formulaire derrière les pages il aura juste a cliqué sur Excel.
- De laisser visible le fichier Excel
- D'avoir l'ouverture qui n'influence pas les autre application présente.
Que pensez-vous de cela, cela est-il possible ? Si cela n'est pas possible il y a t'il d'autre idées qui vous passe par la tête.
Sachant que mon besoin je le rappel :
- Avoir l'affichage d'un formulaire Excel qui n'influence pas les Excel déjà présent,
- Que l'utilisateur ne soit pas contraint dans le placement de ses fenêtres,
- Que l'accès au fichier Excel ne soit pas possible, et que ses informations ne soit pas disponible.(d'où l'accès administrateur)
Je tiens à vous remercier tous autant que vous êtes pour vos remarques vos conseils et vos solutions. Je suis encore en apprentissage de codage et reste à l'écoute de vos conseils.
Cordialement,
Passepartout007
re
voici une autre methode
un executeur un fichier userform
dans l'executeur
2 boutons
- lancer le fichier dans une autre instance(option1)
- lancer le fichier dans la meme instance(option2)
dans le fichier userform quand il est affiché
option(1):
soit il est lancé dans une autre instance et la c'est son instance d excel qui est masquée en la cachant derriere le userform
dans l'evenement layout du userform je fait suivre l'application a fin qu'elle reste toujours derriere
option(2):
soit il été lancé dans la meme instance de excel et la on masque le window du classeur
si tu le lance par dblclick dessus il appliquera la regle
si il est tout seul app masquée sinon window du classeur masquée