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 !

kingfadhel

XLDnaute Impliqué
Bonjour,
Je voudrais faire un contrôle sur une colonne de façon que je saisisse 291013 et quelle se transforme en date 29/10/2013 ou simplement 29/10/13

merci d'avance
 
Re : Format Date

Bonjour le Forum,
Bonjour Kingfadhel, excfl🙂,

Hum hum, excfl, je pense que ta formule a un petit soucis pour les date tapée dont le jour est inférieur a 10, si on tape en A1 une valeur de type 050812 la valeur étant numérique le 0 de gauche va disparaitre et le résultat de ta formule va renvoyer 50/81/12

en fichier joint je propose donc une formule tenant compte de cette particularité, en colonne D et en colonne F une autre solution qui passe par un format personnalisé de type 00"/"00"/"00

cette 2ème solution est applicable si on a pas de calcul a faire ^par rapport à ces dates

Voir fichier joint

Cordialement
 

Pièces jointes

Re : Format Date

Merci à vous excfl et jocelyn

voila une macro efficace que je viens de la créer , je voudrais simplement qu'elle s'applique automatiquement si une cellule de la colonne A change d valeur

Code:
Sub TexteDates()
Dim Cel As Range
Dim n, an, mm, jj As Double
Dim v As String
For Each Cel In Selection
n = Len(Cel)
v = Cel.Value
If n = 4 Then
an = 2000 + Right(v, 2)
mm = Left(Right(v, 3), 1)
jj = Left(v, 1)
Cel.Formula = "=DATE(" & an & "," & mm & "," & jj & ")"
End If
If n = 5 Then
an = 2000 + Right(v, 2)
mm = Left(Right(v, 4), 2)
jj = Left(v, 1)
Cel.Formula = "=DATE(" & an & "," & mm & "," & jj & ")"
End If
If n = 6 Then
an = 2000 + Right(v, 2)
mm = Left(Right(v, 4), 2)
jj = Left(v, 2)
Cel.Formula = "=DATE(" & an & "," & mm & "," & jj & ")"
End If
Next Cel
End Sub
 
Re : Format Date

Bonjour le Forum,
Bonjour Kingfadhel, excfl🙂,

Hum hum, excfl, je pense que ta formule a un petit soucis pour les date tapée dont le jour est inférieur a 10, si on tape en A1 une valeur de type 050812 la valeur étant numérique le 0 de gauche va disparaitre et le résultat de ta formule va renvoyer 50/81/12

en fichier joint je propose donc une formule tenant compte de cette particularité, en colonne D et en colonne F une autre solution qui passe par un format personnalisé de type 00"/"00"/"00

cette 2ème solution est applicable si on a pas de calcul a faire ^par rapport à ces dates

Voir fichier joint

Cordialement

le problème c'est que je ne suis pas le seul à saisir les données, donc il y a risque de saisir les dates erronées exemple: 5513 ==> 5 mai 2013 ça va erroné beaucoup d'autre champs calculés à partir de la date.
Merci
 
Re : Format Date

Bonjour Jocelyn

hum, excfl, je pense que ta formule a un petit soucis pour les date tapée dont le jour est inférieur a 10, si on tape en A1 une valeur de type 050812 la valeur étant numérique le 0 de gauche va disparaitre et le résultat de ta formule va renvoyer 50/81/12
Voir fichier joint

Bonne observation de ta part.

Mais il suffit de formater en texte la cellule A1.

Pour le fun :

Code:
=SI(NBCAR(A1)=5;GAUCHE(A1;1)&"/"&STXT(A1;2;2)&"/"&DROITE(A1;2);GAUCHE(A1;2)&"/"&STXT(A1;3;2)&"/"&DROITE(A1;2))

Cette formule permet de faire des calculs à partir de la date modifiée.

excfl
 
Dernière édition:
Re : Format Date

Re,

le problème c'est que je ne suis pas le seul à saisir les données, donc il y a risque de saisir les dates erronées exemple: 5513 ==> 5 mai 2013 ça va erroné beaucoup d'autre champs calculés à partir de la date.
Merci

Pour obliger à saisir 6 caractères :

Données
Validation des données
Autoriser : longueur du texte : longueur : 6

excfl

Pour guider l'utilisateur : Alerte d'erreur.jpg
 

Pièces jointes

Dernière édition:
Re : Format Date

Bonsour®
une adaptation d'une macro originale de Chip Pearson
utilisant la fonction DateValue (prise en compte des paramètres format date systèmes)
détection automatique "By design" d'une donnée "date"

à utiliser sur la plage à redéfinir (A1:a10)

VB:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
' d'après la macro originale de Chip Pearson
'******* [url=http://www.cpearson.com/Excel/DateTimeEntry.htm]Date And Time Entry[/url]
 Dim DateStr As String
'--------------------------------
 On Error GoTo EndMacro
 '  ********** ***********   adapter la plage selon besoins
 If Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
     Exit Sub
 End If
 '--------------------------------
 If Target.Cells.Count > 1 Then
     Exit Sub
 End If
 If Target.Value = "" Then
     Exit Sub
 End If
'----------------------------------
 Application.EnableEvents = False
 With Target
 If .HasFormula = False Then
     Select Case Len(.Formula)
         Case 4 ' e.g., j/m/aa
             DateStr = Left(.Formula, 1) & "/" & _
             Mid(.Formula, 2, 1) & "/" & Right(.Formula, 2)
'**********************************************
         Case 5 ' e.g., j/mm/aa  !!! ### !!! 19398 (jjmaa) ==> 20398 (jmmaa) (suite logique)
             If Mid(.Formula, 2, 2) > "12" Then
             '21398  21 mars 1998
                    DateStr = Left(.Formula, 2) & "/" & Mid(.Formula, 3, 1) & "/" & Right(.Formula, 2)
             Else
             '20398 2 mars 1998
                    DateStr = Left(.Formula, 1) & "/" & Mid(.Formula, 2, 2) & "/" & Right(.Formula, 2)
                 End If
'**********************************************
         Case 6 ' e.g., jj/mm/aa = 2-Sep-1998
             DateStr = Left(.Formula, 2) & "/" & _
                 Mid(.Formula, 3, 2) & "/" & Right(.Formula, 2)
         Case 7 ' e.g., j/mm/aaaa = 23-Jan-1998 NOT 3-Dec-1998
             DateStr = Left(.Formula, 1) & "/" & _
                 Mid(.Formula, 2, 2) & "/" & Right(.Formula, 4)
         Case 8 ' e.g., jj/mm/aaaa = 2-Sep-1998
             DateStr = Left(.Formula, 2) & "/" & _
                 Mid(.Formula, 3, 2) & "/" & Right(.Formula, 4)
         Case Else
             Err.Raise 0
     End Select
     .Formula = DateValue(DateStr)
 End If

 End With
 Application.EnableEvents = True
 Exit Sub
EndMacro:
 MsgBox "La date saisie " _
 & Chr(10) & CLng(Target.Value) _
 & Chr(10) & "n'est pas valide !" _
 & Chr(10) & "4 car. =>     jmaa" _
 & Chr(10) & "5 car. =>    jmmaa" _
 & Chr(10) & "6 car. =>   jjmmaa" _
 & Chr(10) & "7 car. =>  jmmaaaa" _
 & Chr(10) & "8 car. => jjmmaaaa"
 Application.EnableEvents = True
 End Sub
 
Re : Format Date

re,

Revoila le fichier avec la macro modifiée je pense que cela marche (bon je suis quand même une bille en VBA alors a tester) la macro couvre la plage H3:H20

regardes et dis nous


Merci Jocelyn mais il y a une petite faute que je n'ai pas encore identifié lorsque je saisie par exemple 24313 ++> 24 mars 2013 il s'affiche 24/07/1966

je vais travaillé là dessus
 
Re : Format Date

Bonsour®

une adaptation d'une macro originale de Chip Pearson
utilisant la fonction DateValue (prise en compte des paramètres format date systèmes)
détection automatique "By design" d'une donnée "date"

à utiliser sur la plage à redéfinir (A1:a10)

VB:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
' d'après la macro originale de Chip Pearson
'******* [url=http://www.cpearson.com/Excel/DateTimeEntry.htm]Date And Time Entry[/url]
 Dim DateStr As String
'--------------------------------
 On Error GoTo EndMacro
 '  ********** ***********   adapter la plage selon besoins
 If Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
     Exit Sub
 End If
 '--------------------------------
 If Target.Cells.Count > 1 Then
     Exit Sub
 End If
 If Target.Value = "" Then
     Exit Sub
 End If
'----------------------------------
 Application.EnableEvents = False
 With Target
 If .HasFormula = False Then
     Select Case Len(.Formula)
         Case 4 ' e.g., j/m/aa
             DateStr = Left(.Formula, 1) & "/" & _
             Mid(.Formula, 2, 1) & "/" & Right(.Formula, 2)
'**********************************************
         Case 5 ' e.g., j/mm/aa  !!! ### !!! 19398 (jjmaa) ==> 20398 (jmmaa) (suite logique)
             If Mid(.Formula, 2, 2) > "12" Then
             '21398  21 mars 1998
                    DateStr = Left(.Formula, 2) & "/" & Mid(.Formula, 3, 1) & "/" & Right(.Formula, 2)
             Else
             '20398 2 mars 1998
                    DateStr = Left(.Formula, 1) & "/" & Mid(.Formula, 2, 2) & "/" & Right(.Formula, 2)
                 End If
'**********************************************
         Case 6 ' e.g., jj/mm/aa = 2-Sep-1998
             DateStr = Left(.Formula, 2) & "/" & _
                 Mid(.Formula, 3, 2) & "/" & Right(.Formula, 2)
         Case 7 ' e.g., j/mm/aaaa = 23-Jan-1998 NOT 3-Dec-1998
             DateStr = Left(.Formula, 1) & "/" & _
                 Mid(.Formula, 2, 2) & "/" & Right(.Formula, 4)
         Case 8 ' e.g., jj/mm/aaaa = 2-Sep-1998
             DateStr = Left(.Formula, 2) & "/" & _
                 Mid(.Formula, 3, 2) & "/" & Right(.Formula, 4)
         Case Else
             Err.Raise 0
     End Select
     .Formula = DateValue(DateStr)
 End If

 End With
 Application.EnableEvents = True
 Exit Sub
EndMacro:
 MsgBox "La date saisie " _
 & Chr(10) & CLng(Target.Value) _
 & Chr(10) & "n'est pas valide !" _
 & Chr(10) & "4 car. =>     jmaa" _
 & Chr(10) & "5 car. =>    jmmaa" _
 & Chr(10) & "6 car. =>   jjmmaa" _
 & Chr(10) & "7 car. =>  jmmaaaa" _
 & Chr(10) & "8 car. => jjmmaaaa"
 Application.EnableEvents = True
 End Sub

merci infiniment mais que dites vous de la saisie 21213 c'est 21/02/2013 ou 02/12/2013
la macro la prend pour la première.
 
Re : Format Date

Bonsour®
merci infiniment mais que dites vous de la saisie 21213 c'est 21/02/2013 ou 02/12/2013
la macro la prend pour la première.

comme dit précédemment : le principe (*)voudrait que l'on saisisse 2 chiffres pour chaque période jour, mois ou année...
mais "by design" excel identifie 21213 comme une valeur date acceptable si l'on considère : 2/12/13
faut-il dans ce cas supposer une erreur par rapport à 210213 ???

par défaut :
modifier au cas longueur = 5
Case 5 ' e.g., j/mm/aa !!! ### !!! 19398 (jjmaa) ==> 20398 (jmmaa) (suite logique)
DateStr = Left(.Formula, 1) & "/" & Mid(.Formula, 2, 2) & "/" & Right(.Formula, 2)
 
- 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

  • Question Question
Microsoft 365 Problème de date
Réponses
5
Affichages
358
Réponses
19
Affichages
761
Retour