Remplissage de champs avec UserForm

Bonjour à tous,

Je suis novice en VBA et je bloque sur une fonctionnalité que j'aimerais déployer.

J'aimerais en clIquant sur le bouton jaune, renseigner des champs qui viendront se déverser dans la feuille EXCEL "Index", c'est pour facilité et uniformiser la saisie de mes collaborateurs.

Le champ "Bordereau à réceptionner" viendra "récupérer" les données à partir de la ligne A4 de la feuille "Index".

Le champ "Réceptionné par" viendra "afficher" les données à partir de la ligne A1de la feuille "Réceptionnaires".

Les champs "Colonne B/C/D/E" viendront "afficher" les données associées au numéro de bordereau.

Lorsque l'utilisateur viendra valider, il faudra renseigner les colonnes G et H de la feuille "Index"avec le nom du réceptionnaire et la date de la réception.

J'aimerais conserver la structure en place, plutôt qu'utiliser un tableau, est-ce possible ?

Un grand merci à celles et ceux qui pourront me mettre sur la piste :)

Je joins mon fichier ici:

29reception.xlsm (25.62 Ko)

Bonne journée :)

JB

Bonjour,

A tester

43reception.xlsm (26.32 Ko)

Bonjour

ci joint ma solution

32reception.xlsm (27.92 Ko)

A+ François

Bonjour,

Merci à vous deux, c'est parfait ! Par contre comment faire pour ne plus afficher les numéros de bordereau dans la liste déroulante lorsqu'ils ont déjà été réceptionnés ? Je pensais ajouter une condition du type "If" mais je n'ai pas du la placer au bon endroit. Qu'ai-je oublié ?

Private Sub ComboBox1_Change()

  Set ws = Sheets("Index")
  Set wd = Sheets("Receptionnaires")
  dl = ws.Range("A" & Rows.Count).End(xlUp).Row
   If Columns(8) = "" Then
    For i = 4 To dl
      If ws.Cells(i, 1).Value = Me.ComboBox1.Value Then
        Me.TextBox2.Value = ws.Cells(i, 2).Value
        Me.TextBox3.Value = ws.Cells(i, 3).Value
        Me.TextBox4.Value = ws.Cells(i, 5).Value
        Me.TextBox5.Value = ws.Cells(i, 4).Value
        lig = i
        Exit For
      End If
    Next i
    End If
End Sub

Bon dimanche à vous !

J-Baptiste

Bonjour

Est ce que cela te convient

15reception.xlsm (31.83 Ko)

A+ François

Bonsoir François,

Merci pour ta réponse, malheureusement ça a dû sauter une ligne car le numéro de bordereau ne correspond pas aux infos sur l'expédition dans le UF. Mais sur le principe c'est OK!

Je pensais prendre le code de M12 mais je n'ai pas réussi à l'adapter, je cherche encore la solution !

Merci de ton aide :)

J-Baptiste

Bonjour

Excuse un oubli

18reception.xlsm (31.72 Ko)

A+ François

Bonjour François,

Merci pour ta contribution. Par contre, j'ai essayé de réceptionner le BE-041 et cela ne fonctionne pas, je vais chercher le problème, si tu as une piste n'hésite pas !

Bonne journée :)

J-Baptiste

Bonjour

Problème réglé

25reception.xlsm (32.38 Ko)

A+ François

Bonjour François,

C'est mieux ! Par contre, j'ai essayé d'ajouter la condition MSGBOX si le Combobox1 n'est pas renseigné mais visiblement cela ne fonctionne pas. Pourtant je pense l'avoir mis au bon endroit. Tu as une piste ?

Cordialement

JB

Bonjour

Private Sub CommandButton1_Click() 'valider
  If Me.ComboBox1.ListIndex < 0 Then
    MsgBox "Vous n'avez pas renseigné le numéro de bordereau", vbInformation, "Saisie manquante"
    Me.ComboBox1.SetFocus
    Exit Sub
  End If

A+ François

Super François, c'est parfait! Mais pourrais-tu m'expliquer succinctement pourquoi ma solution ne fonctionnait pas s'il te plait ?

Bonne soirée

JB

Bonjour François;

Grâce à toi, mon projet prend forme, merci :)

Je bloque sur une fonctionnalité que j'aimerais ajouter au code existant.

J'aimerais, juste avant le Unload Me, ouvrir (en masqué si possible) la feuille correspondant à la valeur du Combobox 1, écrire "OK" en case A1. Ensuite, fermer cette feuille puis fermer le UF.

Private Sub CommandButton1_Click() 'valider
 If Me.ComboBox1.ListIndex < 0 Then
    MsgBox "Vous n'avez pas renseigné le numéro de bordereau", vbInformation, "Saisie manquante"
    Me.ComboBox1.SetFocus
    Exit Sub
  End If
  If Me.ComboBox2 = "" Then
    MsgBox "Vous n'avez pas renseigné le réceptionnaire", vbInformation, "Saisie manquante"
    Me.ComboBox2.SetFocus
    Exit Sub
  End If
  If Me.TextBox1 = "" Then
    MsgBox "Vous n'avez pas renseigné la date de réception", vbInformation, "Saisie manquante"
    Me.TextBox1.SetFocus
    Exit Sub
  End If
 If Me.TextBox1 Like "##/##/####" And IsDate(TextBox1.Value) Then
    Else
    MsgBox "Attention, saisissez une date de réception en respectant le format JJ/MM/AAAA.", vbExclamation, "Saisie manquante"
    TextBox1.SetFocus
    Exit Sub
    End If
  Dim dl As Long, lig As Long
  ctrl = False
  dl = Range("A" & Rows.Count).End(xlUp).Row
  lig = CLng()
  If Me.ComboBox1.ListIndex = -1 Then lig = dl + 1
  Range("A" & lig).Value = Me.ComboBox1.Column(1)
  Range("B" & lig).Value = Me.TextBox2.Value
  Range("C" & lig).Value = Me.TextBox3.Value
  Range("D" & lig).Value = Me.TextBox5.Value
  Range("E" & lig).Value = Me.TextBox4.Value
  Range("G" & lig).Value = Me.ComboBox2.Value
  Range("H" & lig).Value = Me.TextBox1.Value
  Unload Me

End Sub

Je pensais ajouter le code ci-dessous mais cela ne fonctionne pas :

Resultat = Me.ComboBox1.Value
Sheets ("Resultat"). Activate
Range("A1").Value = "OK"

Aurais-tu une piste s'il te plait ? Tu peux faire l'essai avec le BE-044 si tu veux :)

Merci beaucoup.

JB

Bonjour

Avant unload

  Sheets(Me.ComboBox1.Column(1)).Range("A1").Value = "OK"
  Sheets("Index").Select

A+ François

Bonsoir François,

Ça fonctionne parfaitement, merci beaucoup :) Je bloque sur une modification, si je renomme la feuille "Receptionnaires" par "Matricules" et que je dématre ma base de données à partir de la case C2 jusqu'au bas de classeur, que dois-je modifier ?

J'ai modifié le code présent ci-dessous mais je n'arrive pas à afficher les champs sur la droite de mon UF en fonction du n° de bordereau. As-tu une idée sur cette problématique s'il te plait?

Private Sub ComboBox1_Change()
  If ctrl = False Then Exit Sub
  If Me.ComboBox1.ListIndex < 0 Then
  Unload Me
  Reception.Show
  Exit Sub
  End If
  Me.TextBox2.Value = Range("B" & Me.ComboBox1.Value).Value
  Me.TextBox3.Value = Range("C" & Me.ComboBox1.Value).Value
  Me.TextBox5.Value = Range("D" & Me.ComboBox1.Value).Value
  Me.TextBox4.Value = Range("E" & Me.ComboBox1.Value).Value
  Me.ComboBox2.Value = Range("G" & Me.ComboBox1.Value).Value
  Me.TextBox1.Value = Range("H" & Me.ComboBox1.Value).Value
End Sub

Private Sub ComboBox2_Change()
  Me.TextBox1.Value = Format(Now(), "dd/mm/yyyy")
End Sub

Private Sub CommandButton1_Click() 'valider
 If Me.ComboBox1.ListIndex < 0 Then
    MsgBox "Vous n'avez pas renseigné le numéro de bordereau", vbInformation, "Saisie manquante"
    Me.ComboBox1.SetFocus
    Exit Sub
  End If
  If Me.ComboBox2 = "" Then
    MsgBox "Vous n'avez pas renseigné le réceptionnaire", vbInformation, "Saisie manquante"
    Me.ComboBox2.SetFocus
    Exit Sub
  End If
  If Me.TextBox1 = "" Then
    MsgBox "Vous n'avez pas renseigné la date de réception", vbInformation, "Saisie manquante"
    Me.TextBox1.SetFocus
    Exit Sub
  End If
 If Me.TextBox1 Like "##/##/####" And IsDate(TextBox1.Value) Then
    Else
    MsgBox "Attention, saisissez une date de réception en respectant le format JJ/MM/AAAA.", vbExclamation, "Saisie manquante"
    TextBox1.SetFocus
    Exit Sub
    End If
  Dim dl As Long, lig As Long
  ctrl = False
  dl = Range("A" & Rows.Count).End(xlUp).Row
  lig = CLng(Me.ComboBox1.Value)
  If Me.ComboBox1.ListIndex = -1 Then lig = dl + 1
  Range("A" & lig).Value = Me.ComboBox1.Column(1)
  Range("B" & lig).Value = Me.TextBox2.Value
  Range("C" & lig).Value = Me.TextBox3.Value
  Range("D" & lig).Value = Me.TextBox5.Value
  Range("E" & lig).Value = Me.TextBox4.Value
  Range("G" & lig).Value = Me.ComboBox2.Value
  Range("H" & lig).Value = Me.TextBox1.Value
  Set myDocument = Sheets(Me.ComboBox1.Column(1))
Set newWordArt = _
 myDocument.Shapes.AddTextEffect( _
 PresetTextEffect:=msoTextEffect28, _
 Text:="Réception faite le " & Chr(13) & Chr(10) & Me.TextBox1.Value & " par " & Me.ComboBox2.Value, _
 FontName:="Arial Black", FontSize:=48, _
 FontBold:=False, FontItalic:=False, Left:=50, Top:=250)
newWordArt.TextEffect.RotatedChars = False
Sheets("Index").Select
Unload Me

End Sub

Private Sub CommandButton2_Click()
  Unload Me
End Sub

Private Sub UserForm_Initialize()
  Dim dl As Long, maplage As String
  dl = Range("A" & Rows.Count).End(xlUp).Row
  Me.ComboBox1.Clear
  For i = 4 To dl
   If Sheets("Index").Range("H" & i).Value = "" Then
    Me.ComboBox1.AddItem i
    Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = Sheets("Index").Range("A" & i).Value
   End If
  Next
  dl = Sheets("Matricules").Range("C" & Rows.Count).End(xlUp).Row
  maplage = "Matricules!C2:C" & dl
  Me.ComboBox2.RowSource = maplage
  ctrl = True
End Sub

Bonne soirée à toi.

JB

Bonjour

Tu veux dire quoi par

je dématre ma base de données à partir de la case C2

A+ François

Bonsoir François,

Je voulais dire "démarre" pardon. J'ai réussi à trouver la solution :)

Par contre je suis bloqué avec ce code. J'aurais aimé placer mon WordArt au centre de la plage "A1:Q70" sur la feuille (Me.Combobox1.Column(1)) en réutilisant le code "Placement" mais je n'y suis pas parvenu, aurais-tu une proposition à me faire s'il te plait ?

Sub Placement()
With Sheets("Feuil1").Shapes("Image_2")
    .Left = Range("A1:Q70").Left + (Range("A1:Q70").Width / 2) - (.Width / 2)
    .Top = Range("A1:Q70").Top + (Range("A1:Q70").Height / 2) - (.Height / 2)
End With

End Sub
Set myDocument = Sheets(Me.ComboBox1.Column(1))
Set newWordArt = _
 myDocument.Shapes.AddTextEffect( _
 PresetTextEffect:=msoTextEffect28, _
 Text:="Réception acceptée" & Chr(13) & Chr(10) & "faite le " & Me.TextBox1.Value & " par " & Chr(13) & Chr(10) & Me.ComboBox2.Value, _
 FontName:="Arial Black", FontSize:=48, _
 FontBold:=False, FontItalic:=False, Left:=50, Top:=250)
newWordArt.TextEffect.RotatedChars = False

Sheets("Index").Select
Unload Me

End Sub

Bonne soirée à toi

JB

Bonjour

J'espère avoir répondu à ta demande

A+ François

Bonjour François,

Merci pour ta réponse, je vais pouvoir ajouter cette fonctionnalité à mon projet! Par contre je cherchais aussi à ajouter des traits obliques sur la feuille qui est réceptionnée sans pour autant devoir fusionner mes cellules sur ma plage A1:Q70. J'ai commencé à écrire un bout de code mais si je ne fusionne pas cela me créé des traits obliques dans chaque cases de la plage A1:Q70. Existe t-il une solution ?

Pour mieux comprendre ma demande, j'ai mis le résultat final que j'aimerais obtenir sur la feuille "bordures"

Si tu as une piste, je suis preneur sinon je laisse tomber cette idée :)

Bonne journée

JB

18reception-v2.xlsm (42.92 Ko)

Bonjour

J'avais pensé en utilisant les formes ajouter un trait...

un trait ça va mais l'autre non

A+ François

Rechercher des sujets similaires à "remplissage champs userform"