A ma grande surprise, je constate qu'il existe encore des fichiers Excel contenant l'anomalie liée au format date anglais(cf. pièce jointe). Notez l'inversion entre le format affiché (01/02/2006) et le format enregistré (02/01/2006).
Source / Exemple :
Sub setRegionalDate(ByVal FirstLineIndex As Long, ByVal LastLineIndex As Long, ByVal ColIndex As Long)
'Version 1 : corrige pour l'intervalle spécifié toutes les dates
'enregistrées au format anglais (bogue d'inversion)
'Variables de traitement
Dim myDate As Date
Dim i As Long
' Paramètres à définir pour chaque traitement :
' - FirstLineIndex N° de la première ligne à traiter
' - LastLineIndex N° de la dernière ligne à traiter
' - ColIndex N° de la colonne à traiter
' Exemple d'utilisation :
' call setRegionalDate(1, 253, 2) Vérifie et corrige le format date pour l'intervalle
' de lignes [1, 253] de la colonne 2.
'Gestionnaire d'erreur
On Error GoTo Except
For i = FirstLineIndex To LastLineIndex
'Sélectionne la cellule
Cells(i, ColIndex).Select
With Selection
If IsDate(.Value) Then
'Condition d'inversion
If .NumberFormat = "mm/dd/yyyy" Then
'Mémorise la date
myDate = .Value
'Transforme le type du format date
.NumberFormat = "dd/mm/yyyy"
'Transforme la date en inversant les valeurs du mois et du jour
.Value = CDate(Month(myDate) & "/" & Day(myDate) & "/" & Year(myDate))
End If
End If
End With
Next i
Exit Sub
Except:
Call MsgBox(vbCr & "Erreur n° " & Err.Number & vbCr & vbCr & _
Err.Description & Space(6), vbCritical + vbOKOnly, " Fonction de correction du type date")
End Sub
-----------------------------------------------------------------------------------------
Sub setRegionalDate()
'Version 2 : corrige pour la plage sélectionnée toutes les dates
'enregistrées au format anglais (bogue d'inversion)
'Variables de traitement
Dim myDate As Date
Dim myRange As Range
Dim i As Long, j As Long
'Gestionnaire d'erreur
On Error GoTo Except
'Boîte de dialogue : demande de confirmation
i = Selection.Cells.Count
If i = 1 Then
If MsgBox(vbCr & "Demande de confirmation" & vbCr & vbCr & _
"Une seule cellule est sélectionnée. Confirmez votre sélection ?" & Space(6), vbQuestion + vbYesNo, _
" Fonction de correction du type date") = vbNo Then Exit Sub
End If
For Each myRange In Selection
If IsDate(myRange) Then
With myRange
'Condition d'inversion
If .NumberFormat = "mm/dd/yyyy" Then
'Mémorise la date
myDate = .Value
'Transforme le type du format date
.NumberFormat = "dd/mm/yyyy"
'Transforme la date en inversant les valeurs du mois et du jour
.Value = CDate(Month(myDate) & "/" & Day(myDate) & "/" & Year(myDate))
If Month(.Value) <> Month(myDate) Then j = j + 1
End If
End With
End If
Next
'Boîte de dialogue : nbre de dates corrigées sur nbre de cellules vérifiées
Call MsgBox(vbCr & "Résultat du traitement :" & vbCr & vbCr & _
j & " date(s) corrigée(s) sur " & i & " cellule(s) sélectionnée(s)." & Space(6), vbInformation + vbOKOnly, _
" Fonction de correction du type date")
Exit Sub
Except:
'Boîte de dialogue : message d'erreur
Call MsgBox(vbCr & "Erreur n° " & Err.Number & vbCr & vbCr & _
Err.Description & Space(6), vbCritical + vbOKOnly, " Fonction de correction du type date")
End Sub
-----------------------------------------------------------------------------------------
Conclusion :
catégorie : VBA Excel
voir la capture d'écran pour comprend le type d'anomalie
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.