XL 2010 Transformer série de chiffre en date

LELIEVRE

XLDnaute Nouveau
Bonjour,
Après de nombre recherche sur internet j'ai réussi à "fabriquer" un code VBA pour transformer une série de chiffre en date :
Private Sub Worksheet_Change(ByVal Target As Range)
'---Convertit un nombre de 7 ou 8 chiffres en date---
Dim d As Variant
Set Target = Target.Cells(1, 1)
d = Target.Value2
ActiveSheet.Unprotect "123"
If Not (d Like "#######" Or d Like "########") Then Exit Sub
d = Left(Right(d, 6), 2) & "/" & Left(Right(0 & d, 8), 2) & "/" & Right(d, 4) 'mm/dd/yyyy'
d = ExecuteExcel4Macro("DATEVALUE(""" & d & """)")
If IsNumeric(d) Then
Target.NumberFormat = "dd/mm/yyyy"
Target = d
Else
Target.NumberFormat = "General"
End If
ActiveSheet.Protect "123"
End Sub

J'aimerais que ce code ne s'applique qu'aux cellules C3 à C14.
Quelques peut-il m'aider pour les dernières modifications ?

Merci beaucoup
 

CHALET53

XLDnaute Barbatruc
Bonjour,
Peut-être comme ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
'---Convertit un nombre de 7 ou 8 chiffres en date---
Dim d As Variant
If Not (Intersect(Target, Range("C3:C14")) Is Nothing) Then
Set Target = Target.Cells(1, 1)
d = Target.Value2
ActiveSheet.Unprotect "123"
If Not (d Like "#######" Or d Like "########") Then Exit Sub
d = Left(Right(d, 6), 2) & "/" & Left(Right(0 & d, 8), 2) & "/" & Right(d, 4) 'mm/dd/yyyy'
d = ExecuteExcel4Macro("DATEVALUE(""" & d & """)")
If IsNumeric(d) Then
Target.NumberFormat = "dd/mm/yyyy"
Target = d
Else
Target.NumberFormat = "General"
End If
ActiveSheet.Protect "123"
End if
End Sub


a+
 

patricktoulon

XLDnaute Barbatruc
bonjour
juste en passant
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'---Convertit un nombre de 7 ou 8 chiffres en date---
    Dim d As Variant
    If Not (Intersect(Range("C3:C14"), Target) Is Nothing) And Not Target.Value2 Like "*/*" And Target.Count = 1 Then
        d = CStr(Target.Value2)
         ActiveSheet.Unprotect "123"
        If IsNumeric(d) Then
            Select Case True
            Case Len(CStr(d)) = 5: d = DateValue(Format(d, "0/00/00"))
            Case Len(CStr(d)) = 6: d = DateValue(Format(d, "00/00/00"))
            Case Len(CStr(d)) = 7: d = DateValue(Format(d, "0/00/0000"))
            Case Len(CStr(d)) = 8: d = DateValue(Format(d, "00/00/0000"))
            End Select

            With Target
                If IsDate(d) Then
                    Application.EnableEvents = False
                    .NumberFormat = "dd/mm/yyyy": .Value = d
                Else
                    .NumberFormat = "General": .Value = d
                End If
                ActiveSheet.Protect "123"
            End With
        End If
    End If
    Application.EnableEvents = True
End Sub
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas