Userform

cs_ZANUS Messages postés 126 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 février 2007 - 22 mars 2006 à 08:37
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 - 30 mars 2006 à 00:10
Bonjour au forum

J'ai posté un message mais je me suis mélangé les pinceaux. Je repose donc mon problème.

J'ai créé un userform avec deux boutons de commande: "Valider" et "Annuler".Ces deux boutons fonctionnent mais une fois que j'ai cliqué sur l'un ou l'autre des boutons, mon userform est toujours présent sur mon document word puisque je travaille avec ce soft. La seule solution consiste pour l'instant à cliquer sur la croix de fermeture du userform mais je me retrouve dans Visual Basic Editor que je dois fermer pour me retrouver dans mon document word sans mon userform. Je ne comprends pas pourquoi, une fois que j'ai cliqué par exemple sur mon bouton valider, l'action demandée est bien réalisée mais sans fermeture d'office de mon userform.

Merci pour aide.
Cordialement

12 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
22 mars 2006 à 08:51
Salut,

As tu essayer de faire un unload de ton userform ou alors un Hide?

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
cs_ZANUS Messages postés 126 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 février 2007
22 mars 2006 à 09:34
Salut,

J'ai essayé un Unload me ou Hide dans un bouton de commande (autrement dit j'ai essayé avec trois boutons dont les deux que j'ai cité) mais j'ai été dans la même situation que la précédente.

@+
0
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
22 mars 2006 à 15:31
salut,

Poste donc un bout de ton code pour voir d'où ça peut venir.

+++
0
cs_ZANUS Messages postés 126 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 février 2007
22 mars 2006 à 20:00
Bonsoir,

Voici mon code. Rien d'extraordinaire. Ce que je veux comprendre pour l'instant, c'est la logique. Merci de t'intéresser à ma question.

Private Sub CommandButton1_Click()
ActiveDocument.Tables(1).Rows(2).Select
With Selection.Font
.Hidden = True
End With
ActiveDocument.Tables(1).Rows(4).Select
With Selection.Font
.Hidden = True
End With
End Sub


Private Sub CommandButton2_Click()
ActiveDocument.Tables(1).Rows(2).Select
With Selection.Font
.Hidden = False
End With
ActiveDocument.Tables(1).Rows(4).Select
With Selection.Font
.Hidden = False
End With
End Sub
0

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

Posez votre question
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
23 mars 2006 à 18:27
Salut ZANUS, salut aux autres aussi (toujours les mêmes, vous dormez jamais!)

la logique est que rien n'existe d'implicite dans un UserForm, concernant la fermeture de celui-ci, qu'on ne lui ai pas explicitement demandé. Donc, déjà, le bouton que tu as utilisé pour tester unload ou hide, c'est pas la peine de l'enlever, il faut unloader, visible=false, hide me ou autre, pas le choix.

Par contre, pour ton histoire de croix, visual basic editor, et tout, j'ai juste une question :
Comment affiches-tu ton UserForm, ou plutôt, qui demande à ton UserForm de s'afficher?

à+ de te lire


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
cs_ZANUS Messages postés 126 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 février 2007
23 mars 2006 à 18:44
Bonsoir rvblog





C'est vrai. Tu as raison. Procédons étapes par étapes et soyons
logiques (c'est plutôt moi qui ne le suis pas en l'occurence). Je vais
justement dans macro/VBE et non Macro/Macros, etc... et je clique sur
le bouton Exécuter Sub\Userform. Là, je me retouve avec mon document
Word et mon Userform. Tu vas trouver ma méthode bizarroïde mais ça ne
change rien au problème de fond, à savoir que je ne sais pas vraiment
faire.





Merci en tout cas de t'intéresser à mon hic.
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
23 mars 2006 à 22:27
Bonsoir ZANUS,

on est d'accord.

Bon, pour quelqu'un qui ne sait pas vraiment faire, tu es déjà allé bien loin. Tu as découvert l'essentiel : Visual Basic Editor.
Dis toi que c'est un environnement de développement intégré, et qu'à partir du moment où tu l'ouvres, c'est que tu viens créer/modifier/dépanner ton applicatif.
Donc, la manière dont tu affiches ton UserForm n'est pas saugrenue, c'est juste qu'elle n'est pas représentative du fonctionnement de ton applicatif, vu par l'utilisateur, mais au contraire, vu par le développeur. Et lui, le développeur, il est content de voir tous ses outils qui trainent dans son atelier !

Alors, je te donne là un petit bout de code à fusionner dans le tien. Ce bout de code va créer une barre d'outils, du côté Word, avec un icone dedans (ABC), à gauche du document, automatiquement, à l'ouverture du document. Quand tu auras fait tout ce que je vais te dire, tu fermeras ton document.
En bon utilisateur, tu ré-ouvriras le document, et tu verras la barre d'outils. Tu cliqueras sur l'icone (ABC), et ton formulaire apparaitra. Là, tu feras ce que tu as à faire, et quand tu cliqueras un bouton qui fait sortir, le formulaire disparaitra, et, toi, tu seras toujours devant ton document Word. Tu pourras à nouveau cliquer l'icone (ABC), ou fermer le document et surfer sur CodeS-SourceS. :)

En attendant, insère ce code, et fais les modifications que je te préconnise de faire, avant de fermer le document en entier (et prend soin d'enregistrer avant, c'est une tradition)
Voilà le code :

dans le code de ThisDocument, section (Général)(Déclarations), tu écris :

Public cbPerso As Office.CommandBar 'variable servant de référence
'à la barre d'outils

'cette procédure sert à afficher ton formulaire,
'et elle est appelée par le bouton de la barre d'outils
'(icone ABC)
Public Sub AfficherFormMain()
Dim frmTemp As frmMain 'déclare une variable servant
'de référence au formulaire, tu dois
'adapter le type frmMain, à ton type
'ici, type = nom de ton formulaire
'crée une instance du formulaire principal
Set frmTemp = New frmMain 'ici aussi adapter le type
'affiche le formulaire, non modal
frmTemp.Show vbModeless
End Sub

'si tu n'as pas déjà utilisé cette procédure, colle
'le code directement, sinon, ne prend que le code
'qui est dans le corps de cette procédure, et colle
'le au début du corps de la tienne.
Private Sub Document_Close()
'cette procédure s'exécute automatiquement,
'à la fermeture du document
If Not cbPerso Is Nothing Then
'supprime la barre à la fermeture du document
cbPerso.Delete
End If
End Sub


'si tu n'as pas déjà utilisé cette procédure, colle
'le code directement, sinon, ne prend que le code
'qui est dans le corps de cette procédure, et colle
'le au début du corps de la tienne.
Private Sub Document_Open()
Dim cbcTemp As Office.CommandBarControl
'cette procédure s'exécute automatiquement,
'à l'ouverture du document
'installe la barre personnalisée
Set cbPerso = Application.CommandBars.Add("NouvelleBarre", msoBarLeft, , True)
cbPerso.Visible = True
'ajoute le bouton pour afficher le formulaire principal
Set cbcTemp = cbPerso.Controls.Add(msoControlButton, , , , True)
cbcTemp.FaceId = 2
cbcTemp.OnAction = "AfficherFormMain"'le nom AfficherFormMain doit être
'le même nom que celui de la procéure
'que l'on a déclaré tout en haut
cbcTemp.DescriptionText = "Afficher le formulaire principal"
End Sub

Ensuite, il est indispensable que, de façon explicite, tu écrives dans le code d'un bouton (si c'est avec un bouton que tu veux fermer), le nécessaire à spécifier au formulaire de se fermer.
Donc, par exemple, si tu veux fermer avec ton bouton Valider et aussi avec ton Annuler, ajoutes leur :

Unload Me 'ce n'est pas la manière la plus évolutive, mais la plus simple

Ce qui donnera

Private Sub CommandButton1_Click()
ActiveDocument.Tables(1).Rows(2).Select
With Selection.Font
.Hidden = True
End With
ActiveDocument.Tables(1).Rows(4).Select
With Selection.Font
.Hidden = True
End With
Unload Me
End Sub


Private Sub CommandButton2_Click()
ActiveDocument.Tables(1).Rows(2).Select
With Selection.Font
.Hidden = False
End With
ActiveDocument.Tables(1).Rows(4).Select
With Selection.Font
.Hidden = False
End With
Unload Me
End Sub


Si l'explication et la solution t'ont plus, appuies sur Accepter la réponse, ceux qui font le même type de recherche seront contents de trouver une réponse testée et valider par quelqu'un. (et ça ne clos pas le débat pour autant)

à+, ZANUS (d'habitude je ne redis pas le pseudo, mais là, pour la rime...)


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
cs_ZANUS Messages postés 126 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 février 2007
24 mars 2006 à 08:30
Salut rbblog

Merci pour ta réponse. Je vais tester ça ce soir.
Mille merci encore pour la peine que tu donnes.

Bonne journée.
0
cs_ZANUS Messages postés 126 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 février 2007
24 mars 2006 à 21:43
Bonsoir rvblog

J'essaie mais je dois t'avouer que je suis bloqué.

Public Sub AfficherFormMain()
Dim frmTemp As Boîte à masquer les lignes
Set frmTemp = New Boîte à masquer les lignes
frmTemp.Show vbModeless
End Sub

Quand je saisis ce code, j'ai un message d'erreur du type: "Erreur de compilation: attendu: fin d'instruction, qui apparaît après avoir saisi le nom du formulaire, c'est-à-dire Boîte à masquer les lignes. C'est bien un nom que je dois saisir, pas un type, genre Integer, string, etc..? Ce que j'ai fait, c'est que j'ai supprimé les espaces. J'ai donc Boîteàmasquerleslignes.
J'ai collé ce code dans ThisDocument, section (Général)(Déclarations).

Ensuite,je ne sais pas où je dois coller le code suivant :
Private Sub Document_Close()
'cette procédure s'exécute automatiquement,
'à la fermeture du document
If Not cbPerso Is Nothing Then
'supprime la barre à la fermeture du document
cbPerso.Delete
End If
End Sub

ou celui-ci:

Private Sub Document_Open()
Dim cbcTemp As Office.CommandBarControl
'cette procédure s'exécute automatiquement,
'à l'ouverture du document
'installe la barre personnalisée
Set cbPerso = Application.CommandBars.Add("NouvelleBarre", msoBarLeft, , True)
cbPerso.Visible = True
'ajoute le bouton pour afficher le formulaire principal
Set cbcTemp = cbPerso.Controls.Add(msoControlButton, , , , True)
cbcTemp.FaceId = 2
cbcTemp.OnAction = "AfficherFormMain"'le nom AfficherFormMain doit être
'le même nom que celui de la procéure
'que l'on a déclaré tout en haut
cbcTemp.DescriptionText = "Afficher le formulaire principal"
End Sub

Bon je continue à chercher.

Je t'aurais bien dit ++ mais pour moi, pour l'instant pour moi, c'est moins que moins.
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
25 mars 2006 à 00:07
T'inquiètes ZANUS,

"Dim frmTemp As frmMain" :
frmMain est le nom de la classe de formulaire que tu crées.

Tu voudrais me dire "mais j'ai pas créé de classe!", laisses tomber, je vais te répondre "Si!". Un formulaire (ou un UserForm) est une classe (pas que ça, mais ça aussi).

Le nom de cette classe apparait dans l'arborescence de l'explorateur de projets de VBE, dans le dossier "Feuilles". Quand, dans le VBE, tu ouvres ton formulaire en mode création, tu vois encore le nom de la classe dans la fenêtre des propriétés de ton formulaire, c'est la valeur de la colonne de droite de la ligne (Name).

C'est un identificateur, à ce titre, son écriture est conventionnée, et, entre autres, il ne peux pas contenir d'espace (tu as vu juste, sauf que c'est un "type" et pas un nom genre "titre"). Je l'appelle frmMain, Main pour principal, et frm vient d'une préconisation/convention Microsoft qui invite les développeurs à préfixer les noms de variables avec une abréviation de leur type.


Si tu ne sais pas où coller les autres procédures, c'est que tu ne les utilises pas actuellement, et tu peux donc les coller au même endroit que le reste, dans ThisDocument, sans risque d'écrasement de code que tu aurais déjà saisi.

PS: n'oublies pas d'enregistrer avant de fermer le document!
à+,


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
cs_ZANUS Messages postés 126 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 février 2007
29 mars 2006 à 20:48
Bonsoir rvblog



Tout d'abord, excuses moi pour le retard avec lequel je te réponds.



Ensuite, je dois t'avouer encore une fois que je n'ai pas tout compris
mais , heureusement il y a un mais, grâce à tes conseils, et à à ceux
d'un ami qui est aussi un membre de la communauté vba, je peux
désormais lancer mon userform directement de word et je peux le fermer
tout en restant sur word.

Là, je dois avouer, qu'avec un peu de jugeote et un plus d'attention ,
j'aurai pu le trouver. Que veux tu, y en a qui aiment bien se prendre
la tête pour rien comme moi. J'ai tout simplement oublié l'instruction
Show pour lancer ma macro (heureusement, j'arrive encore à allumer mon
ordinateur: la situation n'est pas désespérée). J'ai réussi à
comprendre qu'il fallait mettre cette instruction dans ThisDocument.

Pour le reste, je réfléchis encore. j'en parle à mon collègue. Ne
t'inquète pas, dès que j'aurai tout compris, je penserai à mettre
"réponse acceptée". Bon, faut pas que ça dure 107 ans, hein. Je suis
d'accord. Je ne suis pas un as comme toi.



+ (petit à petit, j'aurai le droit d'en mettre plusieurs).

Merci infiniment de t'accrocher aux cas désespérés.
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
30 mars 2006 à 00:10
Allez, tu as gagné ton ++


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
Rejoignez-nous