Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.
  • Initiateur de la discussion Initiateur de la discussion fenec
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

fenec

XLDnaute Impliqué
Bonsoir le forum
Après de nombreuses recherches sans succès j’en appelle à vous pour résoudre mon soucis
Je m’explique :
Si dans un textbox je tape 060167 je désire que la textbox affiche 06-01-1967
J’ai essayé plusieurs solutions mais ca ne fonctionne pas comme :

Tb_Date_de_Naissance7.Value = Format(Tb_Date_de_Naissance7.Value, "dd mm yyyy"

Cordialement

Philippe
 
Re : Format textbox

Re le forum, bonsoir Modeste geedee

Merci pour ta participation à mon problème ainsi que pour le lien mais la langue de "Shakespeare" n'étant ma tasse de thé cela ne m'avance pas beaucoup

Merci quand même

Cordialement

Philippe
 
Re : Format textbox

Bonjour a tous,Modeste geedee, fenec

essaye
Code:
Private Sub Tb_Date_de_Naissance7_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Tb_Date_de_Naissance7.Value = Format(Tb_Date_de_Naissance7.Value, "00-00-#0")
    Tb_Date_de_Naissance7.Value = Format(Tb_Date_de_Naissance7.Value, "dd-mm-yyyy")
End Sub
 
Re : Format textbox

Bonjour à tous

une autre approche peut-être

Code:
Private Sub TextBox1_Change()
If TextBox1.Value = "" Then Exit Sub
If Not Right(TextBox1.Value, 1) = "-" And Not IsNumeric(Right(TextBox1.Value, 1)) Then TextBox1.Value = Left(TextBox1.Value, Len(TextBox1.Value) - 1): Exit Sub
If Len(TextBox1.Value) > 10 Then TextBox1.Value = Left(TextBox1.Value, 10): Exit Sub
Select Case Len(TextBox1.Value)
Case 3
    If IsNumeric(Right(TextBox1.Value, 1)) Then
        TextBox1.Value = Left(TextBox1.Value, 2) & "-" & Right(TextBox1.Value, 1)
    End If
Case 6
    If IsNumeric(Right(TextBox1.Value, 1)) Then
        TextBox1.Value = Left(TextBox1.Value, 5) & "-" & Right(TextBox1.Value, 1)
    End If
Case 10
    If Not IsDate(TextBox1.Value) Then MsgBox "date erronée"
End Select
End Sub
 
Re : Format textbox

Bonjour le forum, jpb388, ERIC S

Merci pour votre aide

Viens de tester vos solutions

jpb388 c'est ok par contre ERIC S l'année reste en deux chiffres

Cordialement

Philippe
 

Pièces jointes

Re : Format textbox

Bonjour à tous,

Dans la même veine qu'ERIC S mais en traitant tous les cas :

Code:
Private Sub Tb_Date_de_Naissance7_Change()
Dim TBX As Object, t$, r$, test As Boolean
Set TBX = Tb_Date_de_Naissance7
t = TBX: r = Right(t, 1): test = Not IsNumeric(r)
Select Case Len(t)
  Case 1
    If test Then TBX = "": Exit Sub
    If Val(r) > 3 Then TBX = 0 & r
  Case 2
    If test Or Val(Left(t, 2)) = 0 Or Val(Left(t, 2)) > 31 _
      Then TBX = Left(t, 1): Exit Sub
    TBX = t & "-"
  Case 3: If r <> "-" Then TBX = Left(t, 2)
  Case 4
    If test Then TBX = Left(t, 3): Exit Sub
    If Val(r) > 1 Then TBX = Left(t, 3) & 0 & r
  Case 5
    If test Or Val(Mid(t, 4, 2)) = 0 Or Val(Mid(t, 4, 2)) > 12 _
      Then TBX = Left(t, 4): Exit Sub
    TBX = t & "-"
  Case 6: If r <> "-" Then TBX = Left(t, 5)
  Case 7: If test Then TBX = Left(t, 6)
  Case 8, 10
    If test Then TBX = Left(t, 7): Exit Sub
    If Not IsDate(t) Then TBX = "": Exit Sub
    TBX = Format(CDate(t), "dd-mm-yyyy")
  Case 9: TBX = Left(t, 6)
  Case Is > 10: TBX = Left(t, 10)
End Select
End Sub
Fonctionne dans un UserForm ou dans une feuille de calcul.

A+
 
Re : Format textbox

Re

j'annule mon post précédent pour Job75

avec ta méthode, quand on efface par retour arrière (1 par 1), on bloque sur le tiret
(je sais j'avais fait la même.....😱)
 
Re : Format textbox

Re,

avec ta méthode, quand on efface par retour arrière (1 par 1), on bloque sur le tiret

Oui, pour mieux traiter le retour arrière il faut mémoriser la longueur de la chaîne.

Par ailleurs la macro précédente ne permettait pas d'entrer une année antérieure à 1930.

Avec celle-ci il suffit d'entrer un astérisque * devant une telle année pour pouvoir l'entrer entièrement :

Code:
Private Sub Tb_Date_de_Naissance7_Change()
Dim TBX As Object, t$, r$, test As Boolean
Dim flag As Boolean 'pour années antérieures à 1930
Static memo% 'pour le retour arrière
Set TBX = Tb_Date_de_Naissance7
t = TBX: r = Right(t, 1): test = Not IsNumeric(r)
flag = Mid(t, 7, 1) = "*"
If Len(t) < 6 And Len(t) < memo Then memo = Len(t): Exit Sub
memo = Len(t)
Select Case memo
  Case 1
    If test Then TBX = "": Exit Sub
    If Val(r) > 3 Then TBX = 0 & r
  Case 2
    If test Or Val(Left(t, 2)) = 0 Or Val(Left(t, 2)) > 31 _
      Then TBX = Left(t, 1) Else TBX = t & "-"
  Case 3: If r <> "-" Then TBX = Left(t, 2) & "-" & r
  Case 4
    If test Then TBX = Left(t, 3): Exit Sub
    If Val(r) > 1 Then TBX = Left(t, 3) & 0 & r
  Case 5
    If test Or Val(Mid(t, 4, 2)) = 0 Or Val(Mid(t, 4, 2)) > 12 _
      Then TBX = Left(t, 4) Else TBX = t & "-"
  Case 6: If r <> "-" Then TBX = Left(t, 5) & "-" & r
  Case 7: If test And Not flag Then TBX = Left(t, 6)
  Case 8, 10
    If test Then TBX = Left(t, 7): Exit Sub
    If flag Then Exit Sub
    If Not IsDate(t) Then TBX = "": Exit Sub
    If Day(CDate(t)) <> Val(t) Then TBX = "": Exit Sub
    TBX = Format(CDate(t), "dd-mm-yyyy")
  Case 9: If Not flag Or test Then TBX = Left(t, 6)
  Case Is > 10: TBX = Left(Replace(t, "*", ""), 10)
End Select
End Sub
Edit : s'il ne trouve pas une date (exemple 31/04/15) Excel essaie en permutant le jour et l'année.

Pour éviter cela j'ai ajouté :

Code:
If Day(CDate(t)) <> Val(t) Then TBX = "": Exit Sub
A+
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
1 K
X
Réponses
5
Affichages
2 K
S
Réponses
13
Affichages
2 K
Stedemart
S
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…