Se connecter / S'enregistrer
Votre question
Résolu

boite de dialogue en vb

Tags :
  • VB
  • Dialogue
  • Programmation
Dernière réponse : dans Programmation
29 Juillet 2016 15:55:50

Bonjour,

Je souhaite dans un vb ouvrir une fenêtre de dialogue qui proposerait 5 boutons.
Un par jour de la semaine du lundi au vendredi.
Chaque bouton renvoyant un action vb différente.

Je n'arrive pas à faire afficher cette boite de dialogue lorsque j'exécute le vb.

Je ne trouve rien qui correspond sur internet.
La MSGBOX ne propose que cinq choix figés. (oui, non, cancel...)

Quelqu'un aurait-il une idée ?

Merci

Autres pages sur : boite dialogue

a b L Programmation
29 Juillet 2016 17:37:16

Oui: créer un formulaire générique spécialisé qui sera appelé de sorte à présenter ta form pour ça.
Les msgbox sont des "questions" utilisateurs et pas des formulaires au sens strict du terme. En gros, en paramétrant l'ouverture d'une msgbox, c'est afficher des questions du genre
- Alerte "bug" avec un message et une icone (bouton OK)
- une fenêtre "Ok/annuler"
etc etc.

Donc, crée une fenêtre formatée avec les boutons requis. tu peux envisager que les libellés des jours soient générés à la volée. Par exemple
Btn1.Text = libelleLundi
Btn2.Text ...
En fonction de ce que tu veux restituer.
De toute façon, la question est la suivante: concernant la règle, chaque bouton de jour aurait une action réellement totalement différente, ou bien ce serait une action du genre
"Faire un truc X avec pour date le lundi" puis, "Faire un truc x avec pour date le mardi"?
Dans ce cas: méthode générique avec pour paramètre la date à passer

Methode faireUnTruc(Date dateBouton) {
Actions x
actions y
Actions Z en fonction de dateBouton

return quelqueChose
}

Et derrière les boutons
faireUnTruc(dateDuBoutonClique)
m
0
l
5 Août 2016 07:32:21

Bonjour. Merci pour ta réponse. Je vais étudier cela.
m
0
l
Contenus similaires
a b L Programmation
5 Août 2016 09:55:19

Tu n'as hélas pas le choix et c'est normal. Crée une form, si nécessaire tu l'appelles de manière modale (VbModal) et tu auras de ce que tu veux. Pense à désactiver le redimensionnement de la fenêtre pour que tes utilisateurs ne puissent pas faire n'importe quoi.
m
0
l
5 Août 2016 10:39:22

J'avance pas à pas, mais surement :) 

Je coince encore avec deux éléments.
Le premier : Dans la macro du bouton je perd ma variable.
Le second : Je n'arrive pas à finaliser un ' go to' qui me permettrait de geler la macro principale tout le temps que l'action du bouton n'est pas terminée.

===================
dans la macro principale :

Dim wait As Boolean

If wait = True Then GoTo suite

' Quel jour sommes-nous ?

UserForm1.Show False


suite:

A la fin de la macro du bouton :

wait = True

End Sub

Merci pour ton aide :) 
m
0
l
5 Août 2016 11:06:10

J'ai positionné mes variable avant le sub de la macro principale.
Cela ne change rien.

Mon userform est dans 'Feuilles' et ma macro principale dans le 'module 12'. Je pense que le problème vient de là. Il me manque un rouage...
m
0
l
a b L Programmation
5 Août 2016 11:08:23

oui en effet, la liaison pour déclarer la sub appelée depuis la fenêtre;) (l'autocomplétion du code devrait t'aider :)  )
m
0
l
5 Août 2016 14:56:03

Avant la macro principale :
Public quant As String
au lieu de DIM quant as Variant

Ca marche :) 

Bon maintenant je vais chercher pour le Go to.
m
0
l
5 Août 2016 15:24:23

Là je sèche...
Je pensais que la problème était identique.

J'ai passé la déclaration de la variable avant la macro principale et je l'ai changé :

Public Suite As Boolean

Dans la macro principale :
If Suite = True Then GoTo Suites

Ensuite je fais un show du UserForm

puis je pose l'étiquette
Suites:


Dans la me bouton du Userform je termine :
Suite = True

End Sub

Etant donné que c'est une information en retour j'ai essayé d'inverser le processus en mettant les informations dans la macro du bouton mais sans succès...

La je patauge....
m
0
l
a b L Programmation
5 Août 2016 15:54:42

Je ne comprends pas trop ce que tu veux faire pour le coup... mais le fait de déclarer la variable ne la renseigne pas par défaut;)
De plus, les goto sont à proscrire!
Explique moi le cheminement de l'application que je comprenne.
m
0
l
a b L Programmation
8 Août 2016 09:56:45

Salut, je ne comprends pas bien ton problème ... appeler une userform stop automatiquement l’exécution de ton programme jusqu'à la fermeture de celle-ci (si la propriété ShowModal est à true, ce qui est le cas par défaut).
m
0
l
22 Août 2016 08:42:41

Hello, (je rentre de vacances)

Pour faire simple :

J'ai une macro que j'exécute chaque jour.
Il y a un tronçon commun pour chaque jour de la semaine.
Mais, l'avant dernière étape change en fonction si l'on veut un rapport pour le lundi ou un autre jour. Sachant que je peux lancer le rapport du lundi, le mardi en cas de jour férié.
Cette action est simple, il s'agit d'un copier/coller. Mais, en fonction de la journée souhaitée, le copier n'est pas le même.
Donc j'ai eu l'idée de passer par une fenêtre me proposant 5 boutons. Un par jour de la semaine.


Et après, on retourne sur la dernière étape du tronc commun qui est la création d'un mail avec tous le éléments du rapport.

Voilou ! Je me replonge dedans dans le courant de la matinée.

Merci Merci


m
0
l
a b L Programmation
22 Août 2016 13:36:09

C'est différent chaque jour ? ou tous sont identique sauf le lundi ?
m
0
l
22 Août 2016 14:25:38

Chaque jour l'action est différente. Mais, nous pouvons appeler chacun des rapports n'importe quand dans la semaine.
m
0
l
a b L Programmation
22 Août 2016 17:20:15

Ok, donc il faut impérativement passé par une userform (éventuellement une inputbox, mais c'est peut-être moins pratique à utiliser)
m
0
l
23 Août 2016 09:53:36

Tout à fait :) 

En résumé :

Avant la macro principale j'ai :
Public quant As String
Public dbatch As String
Public Suite As Boolean

La macro principale démarre par :
Public Sub meteotest()

Celle-ci pose deux questions qui permettent de remplir les deux premières variables.

Ces variables sont incluses dans les noms des fichiers que l'on ouvre et que l'on manipule dans la macro principale.

Puis on fait appel à une user form qui présente 5 boutons, un par jour de la semaine.
UserForm1.Show False
Pour le moment, il y a du code derrière un seul bouton.

Ce code reprend les deux variables afin de pouvoir continuer à manipuler des fichiers disposant des variables dans leur nom.

le code du bouton démarre par :
Public Sub CommandButton5_Click()
la macro effectue des copier coller entre les fichiers ouverts.
Cette macro termine par :
Suite = True
End sub

Là où ça coince c'est pour repartir sur la macro principale et enchainer sur le création du mail.

J'ai essayé plusieurs possibilités mais, je boucle et du coup je n'arrive pas à cliquer sur le bouton du jour.
=>

Recommence:

' Public Suite As Boolean
If Suite = True Then GoTo Suites
If Suite = False Then Application.wait Now + TimeValue("0:01:00")
' If Suite = False Then while(i<9999999999)then (i=i+1)
' If Suite = False Then GoTo Recommence:

Suites:

' Fermer la météo de la veille sans la sauvegarder

J'espère que mes explication sont claires cette fois-ci. Le code très long donc je ne peux pas tout mettre.

:pt1cable: 
:na: 
m
0
l

Meilleure solution

a b L Programmation
23 Août 2016 12:52:12

un exemple tout con:
  1. 'dans module1
  2. Public a As Integer
  3. Sub test()
  4. UserForm1.Show
  5. MsgBox a
  6. End Sub
  7. 'dans userform1
  8. Private Sub CommandButton1_Click()
  9. a = a + 1
  10. Me.Hide
  11.  
  12. End Sub

A chaque fois que j'appele "test" on ouvre userform1,puis sur un click du bouton de userform 1, on incrémente "a", on ferme la userform, et le code de "test" continue (en affichant la valeur de a)

Edit: pourquoi appelles tu ta userform en mode "non modale" ? c'est la base de ton problème ! (xxx.show false 'si tu ne met rien tu sera en mode modal et ton code s'interrompera automatiquement !)
partage
24 Août 2016 09:36:07

Yes ! Nikel ! Il ne me reste plus qu'un créer les action pour les différents jours.

'xxx.show false' je ne savais tout simplement pas, j'ai mis par défaut ce que 'avais trouvé pour lancer la user form.

par contre étant donné que je lance des action, je passe à string :
Public a As Integer
Public a As string

Ca me permet d'avoir du texte et je reprend la main après avoir cliquer sur 'ok'.

Merci beaucoup :) 
:)  :) 
m
0
l
a b L Programmation
24 Août 2016 09:38:04

De rien ;)  :jap: 
m
0
l