Ciao Norman la domanda era rivolta a gtsolid anche se avrei potuto specificarlo :-)
Dopo aver letto alcuni link postati da Mauro e il tuo intervento (e testato :-) ) mi è venuto in mente che nel programmino che utilizzo per le mie fatture ho una procedura che replica l'inserimento in fomato ggmmaa o ggmmaaaa (oltre ai classici formati gg/mm/aaaa
e varianti).
Premetto che per mia abitudine, data dall'utilizzo di gestionali contabili e fiscali che impongono proprio l'inserimento "semplificato" (per poi trasformalo in data in formato gg/mm/aaaa), tendo ad inserire le date proprio in questo modo e quindi ai tempi
(diversi anni fa al dire il vero) provai a replicare una cosa del genere.
La procedura soffre di un difetto, che nel mio caso viene controllato dal fatto che alla fine di tutto comunque ho un controllo sull'anno di inserimento della data fattura e se l'anno non è quello di riferimento viene dato un avviso di data errata e cancellata
la data inserita.
Il difetto è che se inserisco ad es. 320516 (inserimento semplificato di solo 6 caratteri), che non è una data valida in "formato" gg/mm/aa", excel la riconosce comunque come data "anglosassone" e cioé aa/mm/dd e se il formato assegnato è gg/mm/aaaa ovviamente
viene trasformata in 16/05/1932.
Errore in cui non si incorre (o meglio si incorre ma che può essere "ingabbiato" con On Error GoTo "Esci" e if Error.Number <> 0) nel caso si inserisca 32052016.
Questa la procedura (che ho riadattato per tener conto che non deve essere utilizzata per una sola cella come nel mio caso specifico).
Magari tuo o Mauro avete idee per "superare" l'inconveniente in caso di inserimento errato in formato ggmmaa :-)
'-----
Private Sub Worksheet_Change(ByVal Target As Range)
'Inserimento date facilitato
'Inserire le date in fomrato ggmmaa o ggmmaaa o nei normali formati data
'Le celle devono essere formatate come testo
Const Cella1 As String = "A1"
Dim AnnoLimite As Integer
Dim StringaData As String
Dim GG As String, MM As String, AA As String
Dim Data As String
Dim NunChrAnno As Integer
On Error GoTo Esci
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
AnnoLimite = 2010 '<=== nel mio caso faccio riferimento ad una cella nominata "AnnoLimite"
If Target.Row > Me.Range(Cella1).Row And _
Target.Column = Me.Range(Cella1).Column Then
StringaData = Target.Value
If StringaData = "" Then GoTo Esci
If Not IsDate(StringaData) Then
If Len(StringaData) <> 6 And Len(StringaData) <> 8 Then
MsgBox "Data errata", vbExclamation, "Data Fattura"
Target.Value = Empty
GoTo Esci
End If
If Len(StringaData) = 6 Then
NunChrAnno = 2
ElseIf Len(StringaData) = 8 Then
NunChrAnno = 4
End If
GG = Mid(StringaData, 1, 2)
MM = Mid(StringaData, 3, 2)
AA = Mid(StringaData, 5, NunChrAnno)
Data = GG & "/" & MM & "/" & AA
Else
Data = Format(CDate(Target), "dd/mm/yyyy")
End If
If IsDate(Data) And Year(Data) >= AnnoLimite Then '<--- nel mio caso la condizione Year(Data) è solo =
Target.Value = Format(CDate(Data), "dd/mm/yyyy")
Else
MsgBox "Data errata", vbExclamation, "Data Fattura"
Target.Value = Empty
End If
End If
Esci:
If Err.Number <> 0 Then
MsgBox "Data errata", vbExclamation, "Data Fattura"
Target.Value = Empty
End If
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
'----