[VBA] Userform toujours visible

Clem -  
 LOL -
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

  1. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Au passage , mettre l'instruction [UserForm.Show] juste avant le [End Sub] de votre macro sur ouverture...!
    0
    1. Clem
       
      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
  2. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    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
  3. Clem
     
    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
  4. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Clem
     
    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
  7. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    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
    1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      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
    2. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
       
      Merci gbinforme, à une prochaine.
      Salutatiions
      0
  8. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  9. Clem
     
    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
    1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      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
    2. Clem
       
      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
    3. LOL
       
      cool
      0