Afficher valeurs selectionnées d'un formulaire sur un onglet
Fermé
yanounou91
Messages postés7Date d'inscriptionjeudi 11 décembre 2014StatutMembreDernière intervention22 septembre 2022
-
Modifié par yanounou91 le 12/12/2014 à 00:10
yanounou91
Messages postés7Date d'inscriptionjeudi 11 décembre 2014StatutMembreDernière intervention22 septembre 2022
-
14 déc. 2014 à 19:17
Bonjour,
Je m'explique. Je souhaite faire un questionnaire sous la forme d'un formulaire où l'utilisateur doit repondre à toute les questions. Des valeurs de menus deroulants doivent s'afficher directement à l'ouverture de l'Userform. Ces valeurs doivent etre copiés une feuille de calcul sheets("Données").
C'est la que cele ne fonctionne pas, les valeurs ne veulent pas s'afficher.
Quand j'utilise le mode "Initialize" : ni menu deroulant ni copie des valeurs dans "Données"
Quand j'utilise le mode "Activate" : Menu déroulants présents mais aucune copie des valeurs
Quand j'utilise le monde "clic" : Menu déroulant + copie des valeurs.
Comment faire pour que les menu déroulant s'affiche directement et que la copie des valeurs se fasse ? Je ne souhaite pas le mode "click" car je crains que l'utilisateur pense que le formulaire ne fonctionne pas.
En vous remerciant.
Yannick
Voici le code :
Option Explicit Dim Ws As Worksheet
'pour enlever la croix rouge d'un UF #If Win64 Then Private Declare PtrSafe Function GetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Private Declare PtrSafe Function SetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long #Else Private Declare Function GetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub TextBox1_Change()
End Sub
#End If Private Sub UserForm_Initialize() Dim hWnd As Long hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D") _ & "Frame", Me.Caption) SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF End Sub
'Fermeture, validation du questionnaire Private Sub CommandButton1_Click()
Unload UserForm1 End Sub
Private Sub UserForm_Activate()
ComboBox19.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox19.List() = Array("DT", "BUS", "BUE", "BUI", "BUC", "BU Autres/DIV", "Etablissement")
En fait je souhaiterais que lorsque l'utilisateur choisit une valeurs de ComboBox ou écris dans une textBox du formulaire, une copie de ses valeurs se fasse sur la feuille "Données".
Sinon j'ai testé votre proposition et VBA me renvoie également une erreur.
PS : "Il manque une préposition, soit "d'", soit "vers". " : vous voulez dire que dans le code je dois inscrire quelque chose qiu indique "vers la feuille" ?
Cordialement.
yannick
Zoul67
Messages postés1959Date d'inscriptionlundi 3 mai 2010StatutMembreDernière intervention30 janvier 2023149 12 déc. 2014 à 15:00
Non, je dis que la phrase que tu as écrite et que j'ai reprise (en italique) ne veut rien dire, il manque un mot.
Pour le reste, UserForm_Initialize et Activate ne s'exécutent qu'au premier affichage du UserForm, il faut utiliser les macros événementielles ComboBoxX_Change pour les actions ultérieures, si tu veux que la mise à jour soit instantanée (chaque ligne est donc à sortir du module UserForm_Activate et à mettre dans une macro événementielle).
Mais en général, on n'exporte les données saisies qu'à la fin, à l'aide d'un bouton "OK" par exemple.
Merci Beaucoup. Et meme avec mon niveau médiocre quand je relis votre explication je me trouve bete de pas y avoir pensé. J'ai inscris le code suivant dans la procedure de fermeture :
Sheets("Données").Activate (chose que j'avais oublié). Puis le code qui demande la copie des valeurs dans la feuille "Données". Cela fonctionne.
En revanche l'apparition directe des valeurs de menu selectionnable à l'ouverture du formulaire ne fonctionne ni en Userform_activate ni Uniform_Initiliaze ... suis je condamné au Userform_Click qui lui fonctionne et affiche les valeurs de menu ? J'ai peur que l'utilisateur pense que le formulaire ne fonctionne pas s'il ne voit pas s'afficher les valeurs de menu deroulant.
Cordialement.
Yannick
Zoul67
Messages postés1959Date d'inscriptionlundi 3 mai 2010StatutMembreDernière intervention30 janvier 2023149 14 déc. 2014 à 18:13
En suivant vos conseils et des infos d'autres forums, j'ai reussi à avoir ce que je voulais. Il fallait deja passer en "Activate". Mais mon probleme etait que dans les Userform on ne peut utiliser apparemment chaque évenement qu'une seule fois. Il fallait donc que je prenne cela en compte et que je sépare l'action des menus de formulaire et des copies de choix de l'utilisateur dans ma feuille "Données". C'est un peu artisanal mais je place le code pour ceux que ca pourrait intéresser. Il ne me manque plus qu'à faire un code pour rapatrier tous les onglets "Données" de plusieurs fichiers afin de construire ma base de données et un TCD qui permettra d'analyser les données du sondage. Merci à vous.
Option Explicit Dim i, non_rempli, a, b, c, d, e, f, l, m, u, v, w As String
Dim q, n, o, p, r, s, t, y, z, x As String
'pour enlever la croix rouge d'un UserForm '#If Win64 Then ' Private Declare PtrSafe Function GetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long) As Long ' Private Declare PtrSafe Function SetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long ' Private Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long '#Else ' Private Declare Function GetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long) As Long ' Private Declare Function SetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long ' Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'#End If 'Private Sub UserForm_Initialize() 'Dim hWnd As Long ' hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D") _ ' & "Frame", Me.Caption) ' SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF 'End Sub
'Fermeture, validation du questionnaire et copie des réponses dans l'onglet données 'Private Sub CommandButton1_Click() Sub CommandButton1_Click() non_rempli = 0
q = ComboBox19.Value p = TextBox1.Value o = TextBox3.Value n = TextBox2.Value m = ComboBox5.Value l = ComboBox6.Value a = ComboBox7.Value b = ComboBox8.Value c = ComboBox13.Value d = ComboBox14.Value e = ComboBox15.Value f = ComboBox16.Value z = ComboBox20.Value y = ComboBox18.Value x = ComboBox9.Value w = ComboBox10.Value v = ComboBox11.Value u = ComboBox12.Value t = TextBox4.Value s = TextBox5.Value r = TextBox6.Value
If a = "" Or b = "" Or c = "" Or d = "" Or e = "" Or f = "" Or l = "" Or m = "" Or u = "" Or v = "" Or w = "" Or x = "" Or y = "" Then non_rempli = 1 End If
If z = "" Then non_rempli = 1 End If
If n = "" Or o = "" Or p = "" Or r = "" Or s = "" Or t = "" Or q = "" Then non_rempli = 1 End If
If non_rempli = 1 Then
MsgBox ("Merci de remplir tous les champs")
Else
Sheets("Données").Activate Sheets("Données").Range(Cells(2, 1), Cells(18, 1)) = q Sheets("Données").Range(Cells(2, 2), Cells(18, 2)) = p Sheets("Données").Range(Cells(2, 3), Cells(18, 3)) = o Sheets("Données").Range("D3") = Now Range("D4").Value = Left(Range("D3").Value, 10) Sheets("Données").Range(Cells(2, 4), Cells(18, 4)) = Range("D4").Value Sheets("Données").Cells(2, 8) = m Sheets("Données").Cells(3, 8) = l Sheets("Données").Cells(4, 8) = a Sheets("Données").Cells(5, 8) = b Sheets("Données").Cells(6, 8) = c Sheets("Données").Cells(7, 8) = d Sheets("Données").Cells(8, 8) = e Sheets("Données").Cells(9, 8) = f Sheets("Données").Cells(10, 8) = z Sheets("Données").Cells(11, 8) = y Sheets("Données").Cells(12, 8) = x Sheets("Données").Cells(13, 8) = w Sheets("Données").Cells(14, 8) = v Sheets("Données").Cells(15, 8) = u Sheets("Données").Cells(16, 8) = t Sheets("Données").Cells(17, 8) = s Sheets("Données").Cells(18, 8) = r
UserForm1.Hide
MsgBox "Merci d'avoir contribué à l'enquête." & Chr(10) & "" & Chr(10) & "Veuillez nous renvoyer le fichier pour traitement.", , "Message :"
Application.Dialogs(xlDialogSaveAs).Show
End If
'Unload UserForm1 End Sub
Private Sub UserForm_Activate()
ComboBox19.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox19.List() = Array("DT", "ServiceX", "Direction", "RH", "DAF", "DIV", "Etablissement") ComboBox19.Value = Sheets("Données").Range("A2").Value
ComboBox5.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox5.List() = Array("1", "2", "3", "4") ComboBox5.Value = Sheets("Données").Range("H2").Value
ComboBox6.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox6.List() = Array("1", "2", "3", "4") ComboBox6.Value = Sheets("Données").Range("H3").Value
ComboBox7.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox7.List() = Array("1", "2", "3", "4") ComboBox7.Value = Sheets("Données").Range("H4").Value
ComboBox8.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox8.List() = Array("1", "2", "3", "4") ComboBox8.Value = Sheets("Données").Range("H5").Value
ComboBox13.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox13.List() = Array("1", "2", "3", "4") ComboBox13.Value = Sheets("Données").Range("H6").Value
ComboBox14.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox14.List() = Array("1", "2", "3", "4") ComboBox14.Value = Sheets("Données").Range("H7").Value
ComboBox15.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox15.List() = Array("1", "2", "3", "4") ComboBox15.Value = Sheets("Données").Range("H8").Value
ComboBox16.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox16.List() = Array("1", "2", "3", "4") ComboBox16.Value = Sheets("Données").Range("H9").Value
ComboBox20.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox20.List() = Array("1", "2", "3", "4") ComboBox20.Value = Sheets("Données").Range("H10").Value
ComboBox18.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox18.List() = Array("1", "2", "3", "4") ComboBox18.Value = Sheets("Données").Range("H11").Value
ComboBox9.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox9.List() = Array("1", "2", "3", "4") ComboBox9.Value = Sheets("Données").Range("H12").Value
ComboBox10.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox10.List() = Array("1", "2", "3", "4") ComboBox10.Value = Sheets("Données").Range("H13").Value
ComboBox11.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox11.List() = Array("1", "2", "3", "4") ComboBox11.Value = Sheets("Données").Range("H14").Value
ComboBox12.ColumnCount = 1 'Pour la liste déroulante Entité ComboBox12.List() = Array("1", "2", "3", "4") ComboBox12.Value = Sheets("Données").Range("H15").Value
ListBox1.ColumnCount = 1 'Pour la liste déroulante rappel du bareme ds le formulaire ListBox1.List() = Array("1: Trés insatisfaisant", "2: Plutôt insatisfaisant", "3: Plutôt satisfaisant", "4: Très satisfaisant")
End Sub
'Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'Dim c As Control ' For Each c In Me.Controls ' Select Case TypeName(c) ' Case "TextBox", "ComboBox" ' If c.Value = "" Then ' MsgBox "Veuillez saisir toutes les champs SVP" ' Cancel = True
' End If ' End Select ' Next c
' End Sub
' Private Sub UserForm_Terminate()
'Application.Dialogs(xlDialogSaveAs).Show 'End Sub
Modifié par yanounou91 le 12/12/2014 à 14:26
Sinon j'ai testé votre proposition et VBA me renvoie également une erreur.
PS : "Il manque une préposition, soit "d'", soit "vers". " : vous voulez dire que dans le code je dois inscrire quelque chose qiu indique "vers la feuille" ?
Cordialement.
yannick
12 déc. 2014 à 15:00
Pour le reste, UserForm_Initialize et Activate ne s'exécutent qu'au premier affichage du UserForm, il faut utiliser les macros événementielles ComboBoxX_Change pour les actions ultérieures, si tu veux que la mise à jour soit instantanée (chaque ligne est donc à sortir du module UserForm_Activate et à mettre dans une macro événementielle).
Mais en général, on n'exporte les données saisies qu'à la fin, à l'aide d'un bouton "OK" par exemple.
Modifié par yanounou91 le 13/12/2014 à 14:40
Sheets("Données").Activate (chose que j'avais oublié). Puis le code qui demande la copie des valeurs dans la feuille "Données". Cela fonctionne.
En revanche l'apparition directe des valeurs de menu selectionnable à l'ouverture du formulaire ne fonctionne ni en Userform_activate ni Uniform_Initiliaze ... suis je condamné au Userform_Click qui lui fonctionne et affiche les valeurs de menu ? J'ai peur que l'utilisateur pense que le formulaire ne fonctionne pas s'il ne voit pas s'afficher les valeurs de menu deroulant.
Cordialement.
Yannick
14 déc. 2014 à 18:13
Tu peux envoyer ton fichier sur https://www.cjoint.com/ pour qu'on vérifie.
A+
Modifié par yanounou91 le 14/12/2014 à 19:36
Cordialement.
Ynnick