Aide userform VBA Excel (optionbutton)

Bonjour à Tous,

J'ai crée un Userform sur Excel pour faciliter la saisie.

J'ai réussi à faire en sorte qu'à chaque fois que l'on réouvre le Userform, toutes les données précédemment saisies restent écrites (afin que l'utilisateur puisse modifier sans tout réécrire).

Mon problème est le suivant :

1/ les TextBox se remplissent sans problème mais pas les OptionButton

Comment faire s'il vous plait ?

Merci ++

Tennispari

Bonjour,


pour remplir un optionbouton :

userform1.optionbouton1.value = true 

Bonjour mimanse,

Merci de ta reponse ultra rapide.

Je viens d'essayer la bonne nouvelle c'est que une des optionbutton se coche.

Malheureusement, j'ai l'impression qu'elle est cocher par defaut.

Dans mon userform le code :

1/ pour mettre la donnée de l'option button dans la cellule excel correspondante :

Private Sub OptionButton44_click()

Sheets("Reco").Select

[B2]=Optionbuttob.Caption

2/ pour faire le chemin inverse :

Private Sub Userform_Initialize()

Sheets("Reco").select

Optionbutton44.value

En sachant qu'il y a 2 choix Oui ou Non qui correspondent aux OPT44 et OPT43)

En esperant que ce soit clair.

Dsl pour le fichier mais je ne peux pas le joindre (pro)

Merci de votre aide

Tennispari

Bonjour,

Si tu veux de l'aide, il va quand même falloir en passer par là...

Tu enlèves juste les adresse lesN° de téléphone et les N° de carte bleue et basta !

Tu enlèves aussi quelques lignes sur les grands tableaux. LA plupart du temps 5 lignes suffisent pour tester ce qu'on à besoin...

A+

Mdr. Ca c'est ce que j'appelle savoir ce que l'on veut.

Ok j'envoie ca asap car j'ai mon ordi la tt de suite.

Comme ca j'abuserai de ta gentillesse pour d'autres points qui me gonfle.

Merci

A tout'

l'optionbouton43_click() a le meme code que le 44 ?

si oui cela est assez simple ^^

Private Sub Userform_Initialize()
Sheets("Reco").select
select case [b2]
 case is = optionbouton43.caption
         optionbouton43.value = true
 case is = optionbouton44.caption
         optionbouton44.value = true
end select
end sub

Ok merci j'essaie ceci quand je rentre et je t'envoie le fichier car j'ai aussi un problem avec le meme userform sur l'envoi de mail, si bien sûr tu es ok.

Merci++++

oui il meme code

voici le fichier merci ++

dans le userform c'est la multipage 1 (d'ailleurs le probleme se répète dans les autres pages aussi)

Merci de ton aide

Bonsoir,

C'est un peu abstrait ton truc. Surtout sans aucun enregistrement.

Aussi je te donne la solution juste pour le début de ton Initialize

A toi de t'en inspirer pour les autres boutons.

Private Sub Userform_Initialize()
With Sheets("Reco") 'Pour éviter de selecter la feuille pour rien
    TextBox12.Value = .[A1]
    TextBox1.Value = .[B3]
    OptionButton43.Value = .[B2] = OptionButton43.Caption
    OptionButton44.Value = .[B2] = OptionButton44.Caption
    TextBox2.Value = .[B6]
    TextBox3.Value = .[B7]
    TextBox4.Value = .[B15]
    TextBox6.Value = .[B18]
    TextBox8.Value = .[B21]
    TextBox5.Value = .[A18]
    TextBox7.Value = .[C18]
    TextBox9.Value = .[C21]
    TextBox10.Value = .[B8]
    TextBox11.Value = .[B9]
End With
...

Slt galopin01,

Merci beaucoup++ ça fonctionne merveilleusement bien.

je sais que c'est brouillon mais je débute dans VBA même si je connais très bien excel du coup je fais au feeling...

Du coup vu que tu as le fichier, j'ai une autre demande sur la dernière page du userform (fond rouge).

le but c'est dès que le document, on renseigne son nom+prénom+date et on clique sur "valider". A partir de la le fichier est envoyé au prochain approbateur par mail, ainsi de suite.

ca fonctionne mais j'ai deux problèmes

1/ pour les deux premiers approbateurs (DMD et DAT) je voudrais que la personne puisse entre trois personnes/mails.

2/ et pour tous les cas je voudrais que le returnreceipt sous envoyé à l'initiateur (c'est à dire le "DMD")

Voici le code en question pour le premier approbateur :

Private Sub CommandButton10_Click()

End Sub

Merci infiniment.

Hum...

Je te donne une réponse qui vaut ce qu'elle vaut...

Moi je rajouterai une frame avec 3 Option Button :

Chez moi c'est Frame50 et OptionButton 112, 113, 114

Avec la propriété de la Frame Visible = False

avec le code suivant :

Private Sub CommandButton10_Click(): Frame50.Visible = True: End Sub
Private Sub OptionButton112_Click(): Frame50.Tag = "Dest1": End Sub
Private Sub OptionButton113_Click(): Frame50.Tag = "Dest2": End Sub
Private Sub OptionButton114_Click(): Frame50.Tag = "Dest3": End Sub
Private Sub Frame50_Enter()
MsgBox Frame50.Tag
'Sheets("Phase Approbation").Select
'[E5] = CommandButton10.Value = validé
'    ActiveWorkbook.Save
'ActiveWorkbook.SendMail Recipients:="prénom.nom@merck.com", _
'Subject:="Votre recommandation a été validée par le DMD", _
'ReturnReceipt:=True
'    ThisWorkbook.Close True
End Sub

Bon là je t'ai mis un MsgBox qui te montre comment récupérer le choix du bouton

Tu peux remplacer par un select case Frame50.Tag

et envoyer tes Mails en fonction du paramètre...

(pour les mails ce n'est pas ma spécialité alors le ReturnReceipt to Sender, je ne peux pas te dire...)

A+

framesup

Ok merci beaucoup de ta reponse.

Je me rends compte que mon dernier message n'etait pas clair

A savoir : il existe plusieurs DMD avec des DAT differents, du coup :

Si je suis le "DMD" et que je veux valider l'excel pour qu'il soit envoyé par mail au "DAT", je voudrais que le mail parte directement au bon "DAT" lorsqu'il clique sur "valider".

Sauf que chaque "DMD" a le choix entre 3 "DAT" du coup j'ai 3 adresses mails differentes.

Merci +++

Le concept reste le même sauf que :

quand le DMD appuie sur le bouton il passe son tag à la fram50 ( ou il mémorise son tag à une variable publique) et tu affiche la frame

Dans la procédure change de la frame tu examines l'état du tag si le tag est un tag DMD tu modifies le caption des boutons en fonction de leurs destinataires potentiels.

Et quand un des boutons est cliqué il écrase le tag de la frame avec son tag Dest...

Quand la frame recoit ce nouveau tag la procédure change voit que c'est un tag Destinataire et envoie le mail...

Je ne peux pas te le faire vu que je n'ai pas la tables des correspondances DMD => Dest

En gros tu dois avoir quelque part une table de ce genre :

DMD1 - Dest1 - Dest2 - Dest3

DMD2 - Dest4 - Dest5 - Dest6

DMD3 - Dest7 - Dest8 - Dest9

Après c'est le Select Case de Frame50_Change qui détermine l'action à effectuer :

Select Case Frame50.Tag

Case DMD1: ActionChangeOption Button (Param = Dest1 - Dest2 - Dest3)

Case DMD2: ActionChangeOption Button (# = Dest4 - Dest5 - Dest6)

Case DMD3: ActionChangeOption Button (# = Dest7 - Dest8 - Dest9)

Case Dest1 : ActionEnvoieMail (# = Dest1)

Case Dest2 : ActionEnvoieMail (# = Dest2)

End Select

Hum... понимаете ?

annule et remplacé par message précedent

Slt,

Oui j'avais envoyé un message car j'avais un probleme mais c'est bon c'est

Merci beaucoup pour les mails je suis en train d'essayer.

Sinon si je peux abuser de ton aide stp

Comment je fais pour etre sur que quand le "DMD" valide et que ca envoi par mail, un message d'erreur apparait en lui disant qu'il a oublie de renseigner tel ou tel optionbutton et textbox stp ?

J'ai essayé avec control mais ca marche pas

Merci infiniment you are my life saver !

Bonjour,

C'est assez difficile car on est sur un multipage...

Idéalement il faudrait faire ce contrôle page par page.

Toujours idéalement ce contrôle devrait rendre le Focus au TextBox incomplet...

Le code que je te donne fait la vérification de tous les TextBox de tous les onglets du Multipage mais ne rend pas la main au TextBox défectueux car on ne peut pas donner le focus à un autre onglet en invoquant un autre objet lui appartenant.

En clair tu ne peux pas donner le focus à TextBox12 ou textBox24 depuis le CommandButton10. (ou alors il faut remanier considérablement beaucoup de choses...)

En conséquence le modop que je te donne contrôle tous les TextBox de toutes les pages du multipage mais ne rend le focus qu'aux TextBox de la page 3 du multipage si problème.

Il reste que tu as le principe. Si tu veux t'amuser à broder la dessus tu peux toujours essayer de broder sur mon code pour activer chaque page du multipage. C'est un exercice auquel je ne m'amuserai pas...

Tu peux tester de la même manière les CheckBox en jouant sur la propriété Tag de leur Frame.

La encore Je ne m'y amuserai pas quoique ce soit relativement simple (quand on a compris le concept...)

Le système pour les TextBox :

On utilise leur propriété Tag : Pour marquer ceux qui sont obligatoire, mettre leur Tag = "yok" (sans guillemet)

Dans cette hypothèse il est prudent de mettre un label * de bonne taille en regard des contrôles obligatoires...

ensuite modifier le code de la manière suivante :

Private Sub CommandButton10_Click()
   If NotYOk Then
      Frame50.Visible = True
   Else
      MsgBox "Un des contrôles n'est pas rempli !"
   End If
End Sub
Private Function NotYOk() As Boolean
 Dim Ctrl As Control
 For Each Ctrl In Me.Controls
  If TypeOf Ctrl Is MSForms.TextBox Then
   If LCase(Ctrl.Tag) = "yok" And Len(Trim(Ctrl.Value)) = 0 Then
      If MultiPage1.Value = 3 Then
      On Error GoTo GESTERRPAGE
      Ctrl.SetFocus: Exit Function
      End If
   End If
  End If
 Next Ctrl
 NotYOk = True
Exit Function
GESTERRPAGE:
End Function

Voir aussi message en MP

A+

ok super je vois.

le problème c'est que mon userform commence à me dire que la mémoire est insuffisante damn' !

je ne savais pas que c'était limité en terme de code ou objet snif snif

je n'ai pas de MP de toi

Bien à toi

Il va falloir commencer à optimiser le code !!!!

Considérons que je suis parti à la piscine et qu'avec grand regret je ne pourrais vous aider.

Rechercher des sujets similaires à "aide userform vba optionbutton"