[VBA] Userform toujours visible

Fermé
Clem - 4 sept. 2012 à 11:31
 LOL - 12 juin 2013 à 10:09
Bonjour,

Je suis actuellement en train d'essayer de réaliser une interface graphique sous excel, permettant d'occulter tous les calculs des feuilles.

J'ai donc créé un Userform qui gère et lance toutes mes macros, tandis que j'ai fait un "ThisWorkBook.Applicaiton.Visible = False" pour ne plus voir les feuilles.

Le soucis, c'est que celà cache bien évidemment mon fichier excel de la barre des taches, et quelque fois, mon Userform passe en arrière plan, ce qui n'est pas forcèment pratique.

Je me demandais donc s'il était possible de faire en sorte que mon UserForm reste jusqu'à fermeture en premier plan, sans qu'il disparaisse.

Peut-être en jouant sur des condition dans UserForm.Show?

Cordialement,
Clem

8 réponses

Le Pingou Messages postés 12104 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 10 juin 2024 1 442
4 sept. 2012 à 21:25
Bonjour,
Au passage , mettre l'instruction [UserForm.Show] juste avant le [End Sub] de votre macro sur ouverture...!
0
Au temps pour moi, il me manquait juste une ligne dans une de mes macros... Désolé du dérangement ^^

Par contre quelque chose me turlupine.

Il me manquait donc un Userform.Show dans une macro qui affiche un textbox a remplir, afin de modifier la feuille Excel. Donc pourquoi mon Userform passe en arrière plan dans ce cas la si je n'ai pas spécifié UserForm.Hide?

Désolé si je peux paraître tatillon, mais je m'interesse beaucoup au VBA depuis peu et j'essaye de comprendre au mieux ce qu'il se passe ^^

Encore merci!
0
Le Pingou Messages postés 12104 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 10 juin 2024 1 442
5 sept. 2012 à 10:29
Bonjour,
Eh bien, sans connaitre le déroulement exact de vos procédures et à quel moment elles sont déclenchées, impossible de vous répondre.
Concerne ceci : Donc pourquoi mon Userform passe en arrière-plan dans ce cas le si je n'ai pas spécifié UserForm.Hide?
C`est étrange car : Userform.hide = invisible mais pas "fermé"

0
Voila j'ai enfin pu récupérer mon code. Alors je lance le sub suivant via un bouton sur un UserForm, et celui-ci se placait en arrière plan si j'avais d'autres fenêtres (comme explorater windows par ex) d'ouvertes, mais il ne se fermait pas vraiment. Mon code était le suivant:

Sub Ajouter()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Range("C6").Activate
Dim cel As Range
While (ActiveCell.Value <> "")
If ActiveCell.Offset(1, 0) <> "" Then
ActiveCell.Offset(1, 0).Select
Set cel = ActiveCell
Else
Cells(6, ActiveCell.Column + 3).Select
End If
Wend
If cel.Row < 109 Then
Cells(cel.Row + 1, cel.Column).Select
End If
If ActiveCell.Offset(-1, 0) = "" Then
ActiveCell.Offset(-1, 0) = "Moteur"
ActiveCell.Offset(-1, 0).Borders.LineStyle = xlContinuous
ActiveCell.Offset(-1, 0).Borders.Weight = 3
ActiveCell.Offset(-1, -1) = "Zone"
ActiveCell.Offset(-1, -1).Borders.LineStyle = xlContinuous
ActiveCell.Offset(-1, -1).Borders.Weight = 3
End If
choix1 = Application.InputBox("Référence du moteur :", Type:=2)
If choix1 = "Faux" Then Exit Sub
choix2 = Application.InputBox("Zone :", Type:=2)
If choix2 = "Faux" Then Exit Sub
ActiveCell.Value = choix1
ActiveCell.Borders.LineStyle = xlContinuous
ActiveCell.Borders.Weight = 3
ActiveCell.Offset(0, -1).Value = choix2
ActiveCell.Offset(0, -1).Borders.LineStyle = xlContinuous
ActiveCell.Offset(0, -1).Borders.Weight = 3
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

En insérant un UserForm.Show juste avant le End Sub, il n'y as plus de problème, mais pourquoi celui-ci se comporte-t'il comme cela étant donné que je n'ai pas d'instruction de masquage ou autre?

Merci de votre considération.

Cordialement,
Clem
0
Le Pingou Messages postés 12104 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 10 juin 2024 1 442
5 sept. 2012 à 14:53
Bonjour,
Je reviens au premier message ou vous dites : j'ai fait un "ThisWorkBook.Applicaiton.Visible = False" pour ne plus voir les feuilles.
Ou se trouve cette ligne d'instruction ?
Dans ce sens vous masquez le classeur alors que vous voulez les feuilles, c'est incohérent.
De plus comment votre code [Sub Ajouter()] s'applique-t-il à la bonne feuille puisque la feuille active n'est pas précisée?

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Rebonjour,

Tout d'abord merci de votre interêt.

J'ai cette instruction dans WorkBook_Open, pour travailler avec un semblant d'interface graphique: dés l'ouverture du fichier, le classeur est caché, ne laissant que l'userform de visible, permettant une navigation via des boutons. Excusez moi de la confusion, je cache bien le classeur non la feuille, qui est au nombre de une, tous les sub lui faisant référence.

Mes sub fonctionnent comme je le souhaite, à ceci près de divers problèmes d'affichage...

Pour expliquer mon projet: j'ai dans ma feuille une liste de moteur donnant leur référence et la zone dans laquelle ces derniers se situent (faisant référence à des signets sous word). J'ai une fonction "Rechercher" qui permet, connaissant la référence, de trouver la zone correspondante, puis une fonction "Afficher" pour afficher le document word correspondant.

Le problème vient de cette fonction "Ajouter", qui effectue son rôle comme prévu, mais qui change la visibilité de mon UserForm. En effet, celui-ci disparaît derrière l'explorateur windows, et, comme j'ai caché le classeur entier, n'ayant pas de raccourci sur la barre des tâches, celà me pose problème si je souhaite trouver un nouveau moteur.

Je sais qu'il est coutume de donner le document afin de vous permettre de mieux visualiser tout ca, mais le réseau empêche l'accès à tous les sites d'upload... Je ne veux pas abusé si ma requête vous paraît farfelue...

Merci
Cordialement,
Clem
0
Le Pingou Messages postés 12104 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 10 juin 2024 1 442
5 sept. 2012 à 16:00
Bonjour,
Merci pour les informations.
J'ai regardé votre code et si la feuille active n'est pas la bonne le code provoque une erreur.
Je ne comprends pas pourquoi vous voulez masquer le classeur, il semble qu'il suffirait de masquer les feuilles !
Si vous ne pouvez pas mettre le fichier à disposition sur https://www.cjoint.com/ ou http://dl.free.fr/ dans ce cas il faut réactiver votre [UserForm] principale avant de quitter une macro, bien sûr pour toutes les macros que vous lancez depuis cette votre [UserForm] principale.

0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 692
5 sept. 2012 à 22:50
Bonjour Le Pingou,

Je ne comprends pas pourquoi vous voulez masquer le classeur

Cela permet d'afficher le formulaire de son choix en évitant que l'utilisateur aille faire des modifications dans les feuilles. Les feuilles contiennent des données présentées sur formulaire et n'ont pas besoin de formules ou de mises en forme.
En cas de problème il faut tout de même réserver une porte de sortie pour avoir les feuilles et le code sinon...
0
Le Pingou Messages postés 12104 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 10 juin 2024 1 442
6 sept. 2012 à 14:53
Merci gbinforme, à une prochaine.
Salutatiions
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 692
5 sept. 2012 à 22:45
bonjour Clem,

j'ai fait un "ThisWorkBook.Applicaiton.Visible = False" pour ne plus voir les feuilles.

Dans ce cas effectivement, tu n'as plus ton classeur dans la barre de taches. Par contre si tu remplaces par cette ligne, tu obtiens le cache des feuilles mais tu gardes ton classeur dans la barre : n'est-ce pas une solution ?

    Application.WindowState = xlMinimized

Pour garder le formulaire toujours en premier plan c'est possible mais un peu plus compliqué et surtout, cela empêche aussi d'aller consulter une autre application.
0
Bonjour Lepingou, bonjour gbinforme.

Merci pour votre interêt.

En effet, je souhaitais cacher le classeur afin d'empecher toute modification sur la feuille e celui-ci. J'avais tenté de masquer la feuille, cependant l'instruction renvois une erreur lors du masquage, sauf si j'ouvre une seconde feuille. Il semble qu'il n'est pas possible de cacher l'unique feuille d'un classeur (d'après ce que j'ai compris).

Je n'avais pas pensé à minimiser le classeur, mais c'est efficace! Le UserForm passe en premier plan et empêche de maximiser le classeur, ce qui est exactement ce que je recherche!

Je pense insérer une nouvelle feuille vierge, et lors de l'ouverture de mon classeur, le minimiser et cacher la feuille de données pour éviter toute modifications.

J'avais inséré un bouton sur mon userform pour réafficher le classeur, je vais la modifier pour afficher la feuille correspondante :)

Un grand merci a vous deux!!

Cordialement
Clem
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 692
6 sept. 2012 à 09:49
Bonjour,

Il semble qu'il n'est pas possible de cacher l'unique feuille d'un classeur

Dans un classeur, tu peux effectivement masquer toutes les feuilles sauf une qui doit être affichable car sinon excel ne sais plus quoi afficher.

cacher la feuille de données pour éviter toute modifications

Tu peux le faire dans l'éditeur VBA en mettant le code à 2 (xlSheetVeryHidden) et dans ce cas l'utilisateur ne pourra pas même voir qu'il y a une feuille cachée en utilisant les menus habituels et tu mets un mot de passe sur les macros, si tu es vraiment parano :)
0
Je ne suis pas vraiment parano lol, seulement cette application est destinée à des débutants en informatique. Je ne pense pas qu'ils sachent cacher ou révéler une feuille, mais je pense nécessaire de la cacher pour éviter tout manipulation pouvant conduire au crash de mes fonctions -_-

J'ai créé une nouvelle feuille vierge, et tout marche du tonnerre!!
0
cool
0