XL 2016 textbox et date

loic59120

XLDnaute Nouveau
Bonjour à tous et merci d'avance pour votre aide.

j'ai fais un petit userform pour faire une recherche de donnée sur une feuille excel.
Toutefois, j'ai un souci, je n'arrive pas faire apparaitre la date, il affiche en format numérique.
Avez vous une astuce?
Capture 1.PNG


Merci d'avance pour votre aide
 
Solution
Bonjour,,

c'es dans le code de ton userform2 ou tu initialises tes textboxs quand un code client est saisi ...
VB:
...

Dim ValTempo As Variant

With Me
    .TextBox2 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox1), Sheets("Commandes").Range("zone"), 3, 0)
    .TextBox3 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox1), Sheets("Commandes").Range("zone"), 7, 0)
    .TextBox4 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox1), Sheets("Commandes").Range("zone"), 6, 0)
    .TextBox5 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox1), Sheets("Commandes").Range("zone"), 12, 0)
    ValTempo = Format(Application.WorksheetFunction.VLookup(CLng(Me.TextBox1), Sheets("Commandes").Range("zone"), 14, 0), "DD/MM/YYYY")...

soan

XLDnaute Barbatruc
Inactif
Bonjour loic59120,

loic59120 à dit:
je n'arrive pas faire apparaitre la date, il affiche en format numérique.

ce n'est pas un format numérique ; c'est un numéro de série de date !

ton 44733 est le numéro de série d'une date, qui correspond au 21 juin 2022.​

* tape 44733 dans une cellule ; mets le format de date *14/03/201221/06/2022

* opération inverse : mets un format Standard sur 21/06/202244733



essaye quelque chose de ce genre :

VB:
TextBox1 = Format(Cells(Ligne, Colonne), "DD/MM/YYYY")



si ta date d'expédition est par exemple en Feuil2, cellule D5 :

VB:
TextBox1 = Format([Feuil2!D5], "DD/MM/YYYY")



si ta date d'expédition est sur la feuille active, en D5 :

VB:
TextBox1 = Format([D5], "DD/MM/YYYY")

soan
 
Dernière édition:

Deadpool_CC

XLDnaute Accro
Bonjour,,

c'es dans le code de ton userform2 ou tu initialises tes textboxs quand un code client est saisi ...
VB:
...

Dim ValTempo As Variant

With Me
    .TextBox2 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox1), Sheets("Commandes").Range("zone"), 3, 0)
    .TextBox3 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox1), Sheets("Commandes").Range("zone"), 7, 0)
    .TextBox4 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox1), Sheets("Commandes").Range("zone"), 6, 0)
    .TextBox5 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox1), Sheets("Commandes").Range("zone"), 12, 0)
    ValTempo = Format(Application.WorksheetFunction.VLookup(CLng(Me.TextBox1), Sheets("Commandes").Range("zone"), 14, 0), "DD/MM/YYYY")
    .TextBox6 = ValTempo
    ValTempo = Format(Application.WorksheetFunction.VLookup(CLng(Me.TextBox1), Sheets("Commandes").Range("zone"), 13, 0), "DD/MM/YYYY")
    .TextBox7 = ValTempo
End With
...
 

soan

XLDnaute Barbatruc
Inactif
@loic59120 (salut Deadpool)

ton fichier en retour. :)

j'ai été long car j'ai fait plein d'modifs
dans UserForm2 ET UserForm3. 😜



code de UserForm2 (30 lignes) :

VB:
Option Explicit

Private Sub NumClt_AfterUpdate()
  On Error GoTo 1
 
  If WorksheetFunction.CountIf(Sheets("Commandes").Range("A:A"), NumClt) = 0 Then
    MsgBox "ce numéro de client n'existe pas ,veuillez resaisir un nouveau code", _
      vbInformation + vbOKOnly, "client non trouvé"
  End If
 
  Dim Plg As Range, N&: Set Plg = Worksheets("Commandes").Range("zone"): N = CLng(NumClt)
 
  With Application.WorksheetFunction
    NomClt = .VLookup(N, Plg, 3, 0)
    StatutCmd = .VLookup(N, Plg, 7, 0)
    Produit = .VLookup(N, Plg, 6, 0)
    SemFab = .VLookup(N, Plg, 12, 0)
    DatExp = Format(.VLookup(N, Plg, 14, 0), "dd/mm/yyyy")
    DatFab = Format(.VLookup(N, Plg, 13, 0), "dd/mm/yyyy")
  End With
1
End Sub

Private Sub cmdSearch_Click()
  UserForm3.Show
End Sub

Private Sub cmdQuit_Click()
  Unload Me
End Sub



code de UserForm3 (26 lignes) :

VB:
Option Explicit

Private Sub NumClt_AfterUpdate()
  On Error GoTo 1
 
  If WorksheetFunction.CountIf(Sheets("CDES EXPEDIEES").Range("A:A"), NumClt) = 0 Then
    MsgBox "ce numéro de client n'existe pas, veuillez resaisir un nouveau code", _
      vbInformation + vbOKOnly, "client non trouvé"
  End If
 
  Dim Plg As Range, N&: Set Plg = Worksheets("CDES EXPEDIEES").Range("zone1"): N = CLng(NumClt)
 
  With Application.WorksheetFunction
    NomClt = .VLookup(N, Plg, 3, 0)
    StatutCmd = .VLookup(N, Plg, 7, 0)
    Produit = .VLookup(N, Plg, 6, 0)
    SemFab = .VLookup(N, Plg, 12, 0)
    DatExp = Format(.VLookup(N, Plg, 14, 0), "dd/mm/yyyy")
    Transp = .VLookup(N, Plg, 15, 0)
  End With
1
End Sub

Private Sub cmdQuit_Click()
  Unload Me
End Sub

soan
 

Pièces jointes

  • Commande en cours 2022 - TEST2.xlsm
    512 KB · Affichages: 3
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour loic59120,

si tu as regardé attentivement le fichier de mon post #8, tu as dû voir que j'ai modifié non seulement le code VBA de UserForm2 "RECHERCHER UNE COMMANDE" mais aussi celui de UserForm3 "RECHERCHER UNE COMMANDE EXPEDIEE" ; de plus, j'ai renommé les contrôles pour que ce soit plus clair. :)

si tu repasses sur ce fil, merci de me donner ton avis. ;)

soan
 

loic59120

XLDnaute Nouveau
BOnjour
Bonjour loic59120,

si tu as regardé attentivement le fichier de mon post #8, tu as dû voir que j'ai modifié non seulement le code VBA de UserForm2 "RECHERCHER UNE COMMANDE" mais aussi celui de UserForm3 "RECHERCHER UNE COMMANDE EXPEDIEE" ; de plus, j'ai renommé les contrôles pour que ce soit plus clair. :)

si tu repasses sur ce fil, merci de me donner ton avis. ;)

soan
Bonjour,

Merci effectivement cela est plus clair,
j'essaye également de rajouter la recherche via le nom du client mais j'arrive pas combiné les 2 choix,
il y a t il une astuce ?
Merci d'avance
 

soan

XLDnaute Barbatruc
Inactif
Bonjour loic59120,

Merci effectivement cela est plus clair

merci pour ton retour ! 😊



j'essaye également de rajouter la recherche via le nom du client mais j'arrive pas combiné les 2 choix,
il y a t il une astuce ?

oui : l'astuce est de commencer par fournir un fichier représentatif, avec plusieurs données (non confidentielles), qui permettra de tester la future macro qu'on va écrire ; de plus, tu dois indiquer la procédure à suivre :

* quel est le formulaire concerné ? UserForm2 = "RECHERCHER UNE COMMANDE" ? ou peut-être UserForm3 = "RECHERCHER UNE COMMANDE EXPEDIEE" ? ou peut-être ta demande est pour chacun de ces deux formulaires ? donc pour UserForm2 ET UserForm3 ? mébon, selon ton post #1, il semble que c'est seulement depuis ton UserForm3 = "RECHERCHER UNE COMMANDE EXPEDIEE".

* de dire à partir de quelle feuille tu lances UserForm3 ; il semble que ce soit à partir de ta 1ère feuille "NOUVELLE CDES", en cliquant sur le gros bouton orange "COMMANDES EXPEDIEES" ; ça a tout l'air d'être ça, mais je préfère que tu confirmes, histoire de partir sur de bonnes bases ; au cas où tu aurais envie de lancer ton UserForm3 depuis une autre feuille, précise laquelle ; peut-être aussi que tu aimerais que ce soit depuis chacune des feuilles du classeur (donc depuis les 6 feuilles) ? si oui, à confirmer.

* donner quelques exemples des données saisies, et des résultats correspondants attendus.

* j'aime bien ta 3ème feuille "CDES EXPEDIEES" : y'a que les en-têtes de colonnes en A1:O1, quelques bordures pour quelques colonnes, et aucune donnée saisie ! en l'état actuel, puisque la colonne C "NOM / PRENOM DU CLIENT" est vide, le résultat de la recherche sera toujours aussi simple qu'évident : le client n'a pas été trouvé ! 😁 et ça quelles que soient les combinaisons avec tes 2 autres choix ; au fait, quels sont-ils au juste, ces choix ? le Statut de la commande et le Nom du produit ? ou peut-être la Semaine de fabrication et la date d'expédition ? autre ?

* au cas où la recherche devrait se faire aussi sur la 2ème feuille "Commandes" : c'est le même désert ou presque que sur ta 3ème feuille : y'a des en-têtes en A1:O1 ; des bordures pour toutes les colonnes ; aucune donnée saisie ; des formules en colonne E qui retournent 0 ; des formules en colonne L qui retournent 52 ; mébon, ça gêne pas si ta demande n'utilise pas cette feuille.

* je vais supposer que ta demande n'a pas besoin d'utiliser les 3 dernières feuilles : NI "Calcul Estimat° livraison" ; NI "Métrage" ; NI "Stock et expédition" ; dans le cas contraire, merci de l'indiquer ! 😁

soan
 

loic59120

XLDnaute Nouveau
Bonjour,

Merci pour ta réponse, ci joint le fichier avec des données.

En gros, je cherche a faire une recherche via le premier onglet "saisie des commandes", je souhaite que via mes userform 2 et 3 , qu'on puisse chercher par le nom et numéro de client.
effectivement les 3 derniers onglet ne sert qu'au données
mes 3 boutons :
Formulaire de saisie = saisir les commandes dans l'onglet commandes
recherche une commande = recherche commande dans la feuille commande (par nom et numéro de client)
commandes expédiées = recherche commande dans la feuille cdes expédiées (par nom et numéro de client)
maj commandes expédiées = bascule les commandes expédiées de la feuilles commandes vers la feuille cdes expédiées.

Merci d'avance
 

Pièces jointes

  • Commande en cours 2022 - TEST2.xlsm
    932.4 KB · Affichages: 4

soan

XLDnaute Barbatruc
Inactif
Bonjour loic59120,

désolé pour l'énorme retard de ma réponse, mais même si
j'ai beaucoup tardé, je n'ai pas oublié ton exo ! :)



* à l'ouverture du fichier, tu es sur la 1ère feuille "SAISIES DES COMMANDES".

* fais Ctrl f ➯ ça affiche UserForm1, le formulaire de "Saisie des commandes".

* tu peux quitter de suite ce formulaire en cliquant sur le bouton "Quitter",
mais c'est plus simple d'appuyer sur la touche Echap.

* si tu cliques sur le bouton "Voir commandes", ça va sur la feuille "Commandes".

* clic sur le bouton "Effacer" ➯ ça va effacer tous les champs du formulaire.

* je te laisse tout tester, y compris le bouton "Ajouter commande"



à partir de la 1ère feuille "SAISIES DES COMMANDES", fais Ctrl r
ça va sur la feuille "Commandes" et ça affiche UserForm2, le formulaire
"Rechercher une commandes".​

* là aussi, tu peux quitter de suite ce formulaire en cliquant sur le bouton
"Quitter", mais c'est plus simple d'appuyer sur la touche Echap.

* essaye une recherche par N° de CLIENT : dans le 1er champ,
saisis par exemple "35356" ➯ dessous, ça affiche les données
correspondantes de ce client.

* pour faire une nouvelle recherche : sur un des 3 premiers champs,
saisis "@" ➯ ça efface toutes les données du UserForm : tu peux
donc saisir d'autres critères de recherche.

* essaye cette fois une recherche par Nom du Client : par exemple, saisis "test 32"
➯ les données correspondantes sont affichées, et note bien que ça a même affiché
aussi le N° de CLIENT, même s'il est situé au-dessus du Nom du Client.

* note bien que la feuille en arrière-plan du formulaire est toujours "Commandes" ;
clique sur le gros bouton bleu ; note qu'en arrière-plan, c'est maintenant la feuille
"CDES EXPEDIEES" ; appuie sur Echap ➯ ça quitte UserForm3 et ça retourne à
UserForm2 ; note qu'en arrière-plan la feuille est de nouveau "Commandes".

* clique de nouveau sur le gros bouton bleu ➯ ça affiche de nouveau UserForm3 ;
essaye une recherche, de la même façon que tu l'avais fait sur UserForm2 ; là aussi,
tu peux saisir "@" pour effacer les données du UserForm ; et là aussi, c'est que sur
les 3 premiers champs du UserForm.

* quitte UserForm3 puis UserForm2 pour retourner sur la feuille de calcul.



* tu es donc sur la feuille "Commandes"

* fais Ctrl e ➯ ça affiche directement UserForm3 ➯ la feuille en arrière-plan
est de nouveau la feuille "CDES EXPEDIEES".

* bien sûr, tu peux faire les mêmes manips de recherche.



tu peux faire Ctrl f ; Ctrl r ; ou Ctrl e depuis n'importe quelle feuille ! même depuis l'une des 3 dernières feuilles, par exemple depuis "Stock et expédition" ; gros avantage : tu n'es même plus obligé de retourner sur ta 1ère feuille menu "SAISIES DES COMMANDES" pour cliquer sur un des gros boutons. :)



fin de la démo ! 😜 mais comme j'ai encore modifié plein d'choses dans le code VBA, tu vas avoir du pain sur la planche pour tout lire ! ça fait quand même le code VBA de 3 modules de UserForm !

bon, ben alors à l'année prochaine, hein ? 😛 😄 🤣



code VBA de UserForm1 (42 lignes) :

VB:
Option Explicit

Private Sub AddCmd_Click()
  Dim lig&: Application.ScreenUpdating = 0
  With Worksheets("Commandes")
    lig = .Cells(Rows.Count, 1).End(3).Row + 1
    With .Cells(lig, 1)
      .Value = TextBox1         'N° Client
      .Offset(, 1) = CDate(TextBox2) 'Date de la cde
      .Offset(, 2) = TextBox3   'Nom
      .Offset(, 3) = TextBox4   'Prénom
      .Offset(, 5) = ComboBox1  'Modèle
      .Offset(, 7) = TextBox5   'Revendeur
      .Offset(, 8) = TextBox6   'Commentaire
      .Offset(, 9) = ComboBox2  'Type
    End With
  End With
  MsgBox "commande bien enregistrée", 64, "confirmation"
End Sub

Private Sub ShowCmd_Click()
  Worksheets("Commandes").Select: [A1].Select: Unload Me
End Sub

Private Sub CleanUF_Click()
  Dim i As Byte: Application.ScreenUpdating = 0
  For i = 1 To 6: Controls("TextBox" & i) = "": Next i
  ComboBox1 = "": ComboBox2 = ""
End Sub

Private Sub TextBox1_Change()
  AddCmd.Enabled = TextBox1 <> ""
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If KeyAscii = 27 Then Unload Me
End Sub

Private Sub QuitUF_Click()
  Unload Me
End Sub



code VBA de UserForm2 (69 lignes) :

VB:
Option Explicit

Private Sub UserForm_Initialize()
  Worksheets("Commandes").Select: [A1].Select
End Sub

Private Sub CleanUF()
  Dim i As Byte: LC = 0: Application.EnableEvents = 0
  For i = 1 To 8: Controls("TextBox" & i) = "": Next i
  Application.EnableEvents = -1
End Sub

Sub SetLig(chn$, k As Byte)
  Dim cel As Range
  Set cel = Columns(k).Find(chn, , -4163, 1, 1)
  If Not cel Is Nothing Then LC = cel.Row
End Sub

Sub ErrClt(chn$)
  MsgBox chn & " Client inexistant, à resaisir", 64, "Client non trouvé"
End Sub

Private Sub FillRsg()
  With Cells(LC, 3)
    TextBox3 = .Offset(, 4)            'Statut de la commande
    TextBox4 = .Offset(, 3)            'Produit (ou Modèle)
    TextBox5 = .Offset(, 7)            'Type
    TextBox6 = .Offset(, 9)            'Semaine de fabrication
    If IsDate(.Offset(, 11)) Then _
      TextBox7 = CDate(.Offset(, 11))  'Date expédition
    If IsDate(.Offset(, 10)) Then _
      TextBox8 = CDate(.Offset(, 10))  'Date fabrication
  End With
End Sub

Private Sub TextBox1_AfterUpdate()
  Dim chn$: chn = TextBox1: If chn = "" Then Exit Sub
  If chn = "@" Then CleanUF: Exit Sub
  LC = 0: SetLig chn, 1: If LC = 0 Then ErrClt "N°": Exit Sub
  TextBox2 = Cells(LC, 3): FillRsg
End Sub

Private Sub TextBox2_AfterUpdate()
  Dim chn$: chn = TextBox2: If chn = "" Then Exit Sub
  If chn = "@" Then CleanUF: Exit Sub
  LC = 0: SetLig chn, 3: If LC = 0 Then ErrClt "Nom": Exit Sub
  TextBox1 = Cells(LC, 1): FillRsg
End Sub

Private Sub TextBox3_AfterUpdate()
  If TextBox3 = "@" Then CleanUF: Exit Sub
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If KeyAscii = 27 Then Unload Me
End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If KeyAscii = 27 Then Unload Me
End Sub

Private Sub ShowUF3_Click()
  UserForm3.Show: TextBox1.SetFocus: Worksheets("Commandes").Select
End Sub

Private Sub QuitUF_Click()
  Unload Me
End Sub



code VBA de UserForm3 (56 lignes) :

VB:
Option Explicit

Private Sub UserForm_Initialize()
  Worksheets("CDES EXPEDIEES").Select: [A1].Select
End Sub

Private Sub CleanUF()
  Dim i As Byte: LC = 0: Application.EnableEvents = 0
  For i = 1 To 8: Controls("TextBox" & i) = "": Next i
  Application.EnableEvents = -1: TextBox1.SetFocus
End Sub

Private Sub FillRsg()
  With Cells(LC, 3)
    TextBox3 = .Offset(, 4)            'Statut de la commande
    TextBox4 = .Offset(, 3)            'Produit (ou Modèle)
    TextBox5 = .Offset(, 7)            'Type
    TextBox6 = .Offset(, 9)            'Semaine de fabrication
    If IsDate(.Offset(, 11)) Then _
      TextBox7 = CDate(.Offset(, 11))  'Date expédition
    TextBox8 = .Offset(, 12)           'Transporteur
  End With
End Sub

Private Sub TextBox1_AfterUpdate()
  Dim chn$: chn = TextBox1: If chn = "" Then Exit Sub
  If chn = "@" Then CleanUF: Exit Sub
  LC = 0: UserForm2.SetLig chn, 1
  If LC = 0 Then UserForm2.ErrClt "N°": Exit Sub
  TextBox2 = Cells(LC, 3): FillRsg
End Sub

Private Sub TextBox2_AfterUpdate()
  Dim chn$: chn = TextBox2: If chn = "" Then Exit Sub
  If chn = "@" Then CleanUF: Exit Sub
  LC = 0: UserForm2.SetLig chn, 3
  If LC = 0 Then UserForm2.ErrClt "Nom": Exit Sub
  TextBox1 = Cells(LC, 1): FillRsg
End Sub

Private Sub TextBox3_AfterUpdate()
  If TextBox3 = "@" Then CleanUF: Exit Sub
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If KeyAscii = 27 Then Unload Me
End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If KeyAscii = 27 Then Unload Me
End Sub

Private Sub QuitUF_Click()
  Unload Me
End Sub

soan
 

Pièces jointes

  • Commande en cours 2022 - TEST2.xlsm
    937 KB · Affichages: 4

soan

XLDnaute Barbatruc
Inactif
Bonsoir loic59120,

à propos des lettres que j'ai choisies pour les 3 raccourcis clavier :

* Ctrl f : c'est pour afficher le formulaire "SAISIE DES COMMANDES"

* Ctrl r : c'est pour afficher le formulaire "RECHERCHER UNE COMMANDE"

* Ctrl e : c'est pour afficher le formulaire "RECHERCHER UNE COMMANDE EXPEDIEE"

ainsi, tu peux voir que je n'ai pas choisi les lettres n'importe comment ! et ça aidera à te rappeler quel formulaire est affiché par quel raccourci clavier.

si je n'ai pas utilisé la lettre s pour "SAISIE DES COMMANDES" c'est volontairement, car le raccourci Ctrl s est vraiment trop pratique pour sauvegarder le classeur en cours ; même si y'a aussi Maj F12 ; les deux sont équivalents à un clic sur l'icône disquette (si cette icône est présente dans la barre d'outils "Accès rapide").

bien sûr, tu peux choisir d'autres lettres de raccourci si tu préfères : c'est toi l'utilisateur final, donc c'est toi qui choisit en dernier recours. :)

je ne sais pas encore si tu vas répondre ou non, mais je n'interviendrai plus sur ce sujet ; si tu as besoin d'une autre aide, j'espère qu'un autre intervenant pourra t'aider ; bonne chance ! 🍀

soan
 

Discussions similaires

Réponses
4
Affichages
298

Statistiques des forums

Discussions
312 215
Messages
2 086 321
Membres
103 178
dernier inscrit
BERSEB50