"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
merci ArkhamSinon pour ouvrir Excel dans une nouvelle instance, je crée simplement une nouvelle application avec CreateObject
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Pierre peut rire autant qu'il veut il n'a pas ce resultat la
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
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é ?
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Déjà dit dans une autre discussion pas si ancienne que celaPardi
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.
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
re
oui testé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
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
CQFD
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
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 lanceur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ici
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 instance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 classeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Ne masque pas Excel mais uniquement la fenêtre de ThisWorkBook. L'application reste visible (ruban, barre d'état, barre de titre, ...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part Windows(ThisWorkbook.Name).Visible = False
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part Application.WindowState = xlMinimized
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
et n'oublie pas de voter
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager