Afficher valeurs selectionnées d'un formulaire sur un onglet

Fermé
yanounou91 Messages postés 7 Date d'inscription jeudi 11 décembre 2014 Statut Membre Dernière intervention 22 septembre 2022 - Modifié par yanounou91 le 12/12/2014 à 00:10
yanounou91 Messages postés 7 Date d'inscription jeudi 11 décembre 2014 Statut Membre Dernière intervention 22 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")


ComboBox5.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox5.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")


ComboBox6.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox6.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")


ComboBox7.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox7.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")


ComboBox8.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox8.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")


ComboBox13.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox13.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")


ComboBox14.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox14.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")


ComboBox15.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox15.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")


ComboBox15.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox15.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")


ComboBox16.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox16.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")


ComboBox17.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox17.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")


ComboBox18.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox18.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")


ComboBox9.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox9.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")

ComboBox10.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox10.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")


ComboBox11.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox11.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")


ComboBox12.ColumnCount = 1 'Pour la liste déroulante Entité
ComboBox12.List() = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")

'Sheets("Données").Range(Cells(2, 1), Cells(18, 1)) = ComboBox19.Value
Sheets("Données").Range(Cells(2, 2), Cells(18, 2)) = TextBox1.Value
Sheets("Données").Range(Cells(2, 3), Cells(18, 3)) = TextBox3.Value
Sheets("Données").Range(Cells(2, 4), Cells(18, 4)) = TextBox2.Value
Sheets("Données").Cells(2, 8) = ComboBox5.Value
Sheets("Données").Cells(3, 8) = ComboBox6.Value
Sheets("Données").Cells(4, 8) = ComboBox7.Value
Sheets("Données").Cells(5, 8) = ComboBox8.Value
Sheets("Données").Cells(6, 8) = ComboBox13.Value
Sheets("Données").Cells(7, 8) = ComboBox14.Value
Sheets("Données").Cells(8, 8) = ComboBox15.Value
Sheets("Données").Cells(9, 8) = ComboBox16.Value
Sheets("Données").Cells(10, 8) = ComboBox17.Value
Sheets("Données").Cells(11, 8) = ComboBox18.Value
Sheets("Données").Cells(12, 8) = ComboBox9.Value
Sheets("Données").Cells(13, 8) = ComboBox10.Value
Sheets("Données").Cells(14, 8) = ComboBox11.Value
Sheets("Données").Cells(15, 8) = ComboBox12.Value
Sheets("Données").Cells(16, 8) = TextBox4.Value
Sheets("Données").Cells(17, 8) = TextBox5.Value
Sheets("Données").Cells(18, 8) = TextBox6.Value

End Sub







Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

Dim Ctrl As Control

'parcourt les contrôles du formulaire
For Each Ctrl In Me.Controls


If TypeName(Ctrl) = "TextBox" Then

If Ctrl.Text = "" Then
MsgBox "Veuillez renseigner tous les champs SVP"
Cancel = True
Exit Sub
End If

End If

Next Ctrl
End Sub

Private Sub UserForm_QueryClose2(Cancel As Integer, CloseMode As Integer)

End Sub

Dim Ctrl As Control

'parcour les contrôles du formulaire
For Each Ctrl In Me.Controls


If TypeName(Ctrl) = "ComboBox" Then

If Ctrl.Text = "" Then
MsgBox "Veuillez renseigner tous les champs SVP"
Cancel = True

Exit Sub
End If

End If

Next Ctrl

End Sub






Merci à vous.
A voir également:

1 réponse

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
Modifié par Zoul67 le 12/12/2014 à 11:34
Ces valeurs doivent etre copiés une feuille de calcul sheets("Données").

Il manque une préposition, soit "d'", soit "vers".

Sheets("Données").Cells(2, 8) = ComboBox5.Value

Là, tu affectes à la cellule Excel la valeur du ComboBox qui est vide. Ce ne serait pas :
ComboBox5.Value = Sheets("Données").Cells(2, 8)

?
0
yanounou91 Messages postés 7 Date d'inscription jeudi 11 décembre 2014 Statut Membre Dernière intervention 22 septembre 2022
Modifié par yanounou91 le 12/12/2014 à 14:26
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
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
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.
0
yanounou91 Messages postés 7 Date d'inscription jeudi 11 décembre 2014 Statut Membre Dernière intervention 22 septembre 2022
Modifié par yanounou91 le 13/12/2014 à 14:40
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
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
14 déc. 2014 à 18:13
Bonjour,

Tu peux envoyer ton fichier sur https://www.cjoint.com/ pour qu'on vérifie.

A+
0
yanounou91 Messages postés 7 Date d'inscription jeudi 11 décembre 2014 Statut Membre Dernière intervention 22 septembre 2022
Modifié par yanounou91 le 14/12/2014 à 19:36
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

TextBox1.Value = Sheets("Données").Range("B2").Value
TextBox2.Value = Sheets("Données").Range("D2").Value
TextBox3.Value = Sheets("Données").Range("C2").Value
TextBox4.Value = Sheets("Données").Range("H16").Value
TextBox5.Value = Sheets("Données").Range("H17").Value
TextBox6.Value = Sheets("Données").Range("H18").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



Cordialement.

Ynnick
0