Résolu boite de dialogue en vb

DEFSTRANGER

Habitué
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
 

magellan

Modérâleur
Staff
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

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

return quelqueChose
}[/fixed]
Et derrière les boutons
[Fixed]faireUnTruc(dateDuBoutonClique)[/fixed]
 

magellan

Modérâleur
Staff
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.
 

DEFSTRANGER

Habitué
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 :)
 

DEFSTRANGER

Habitué
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...
 

magellan

Modérâleur
Staff
oui en effet, la liaison pour déclarer la sub appelée depuis la fenêtre;) (l'autocomplétion du code devrait t'aider :) )
 

DEFSTRANGER

Habitué
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.
 

DEFSTRANGER

Habitué
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....
 

magellan

Modérâleur
Staff
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.
 

drul

Obscur pro du hardware
Staff
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).
 

DEFSTRANGER

Habitué
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


 

drul

Obscur pro du hardware
Staff
C'est différent chaque jour ? ou tous sont identique sauf le lundi ?
 

DEFSTRANGER

Habitué
Chaque jour l'action est différente. Mais, nous pouvons appeler chacun des rapports n'importe quand dans la semaine.
 

drul

Obscur pro du hardware
Staff
Ok, donc il faut impérativement passé par une userform (éventuellement une inputbox, mais c'est peut-être moins pratique à utiliser)
 

DEFSTRANGER

Habitué
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:
 

drul

Obscur pro du hardware
Staff
Meilleure réponse
un exemple tout con:
Code:
'dans module1
Public a As Integer
Sub test()
UserForm1.Show
MsgBox a
End Sub
'dans userform1
Private Sub CommandButton1_Click()
a = a + 1
Me.Hide

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 !)
 

DEFSTRANGER

Habitué
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 :)
:) :)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 132
Messages
6 718 045
Membres
1 586 389
Dernier membre
ROCKET8
Partager cette page
Haut