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

yanounou91 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
yanounou91 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -
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.

1 réponse

  1. Zoul67 Messages postés 2001 Statut Membre 149
     
    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
    1. yanounou91 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
       
      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
    2. Zoul67 Messages postés 2001 Statut Membre 149
       
      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
    3. yanounou91 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
       
      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
    4. Zoul67 Messages postés 2001 Statut Membre 149
       
      Bonjour,

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

      A+
      0
    5. yanounou91 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
       
      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