Convertir des dates texte en format date rapidement en VBA

Résolu
cyllou Messages postés 8 Date d'inscription jeudi 26 février 2009 Statut Membre Dernière intervention 14 décembre 2011 - 26 févr. 2009 à 16:47
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 26 févr. 2009 à 19:20
Bonjour,

Je cherche à convertir des dates en format texte (type 20090226 par ex) en dates 'lisibles" (ici 26 février 2009).

Mon problème est que le code que j'utilise est TRES lent , alors que je dois faire cette opération pour environ 500 données à chaque fois. 

Voilà ce que j'utilisais (je demandais à l'ulisateur de selectionner la plage de données à convertir avec une Application.inputbox): 

Sub essai()


Dim annee, mois, jour As String
Dim dates As Range
Dim la_date As Date
Dim i As Integer


On Error Resume Next


Set dates = Application.InputBox( _
prompt:="selectionnez la plage de dates à convertir", _
Title:="dates à transformer", _
Type:=8)


If Err > 0 Then Exit Sub 
On Error GoTo 0


Dim derniere As Integer
derniere = 7 + dates.Rows.Count

Application.ScreenUpdating = False
For i = 8 To derniere
annee = Mid(Cells(i, 5).Value, 1, 4)
mois = Mid(Cells(i, 5).Value, 5, 2)
jour = Mid(Cells(i, 5).Value, 7, 2)
la_date = CDate(jour & "/" & mois & "/" & annee)
Cells(i, 8) = la_date


Next


Application.ScreenUpdating = True
End Sub


Quelqu'un aurait il une idée ?






"L'homme de génie est celui qui m'en donne"

6 réponses

cyllou Messages postés 8 Date d'inscription jeudi 26 février 2009 Statut Membre Dernière intervention 14 décembre 2011
26 févr. 2009 à 18:48
Merci pour ta réponse, effectivement ta synthaxe fonctionne également (je l'ai juste légèrement modifiée pour que ça passe sur mes données du point de vue des indices que tu avais mis en particulier ta 1ère ligne: strDate = Mid(Cells(i, 5).Value, 1 , 8) )pour que VB se place sur le 1er chiffre et prenne les 8 caractères) et ça améliore la rapidité du code, malheureusement vrt pas assez .

Je viens de touver une solution qui fonctionne très bien en utilisant un enregistrement de macro. En voici le code, les dates sont calculées en 2s chrono (pour 500 données qd meme!):

Sub autre()
Dim annee, mois, jour As String
Dim dates As Range
Dim la_date As Date
Dim i As Integer



On Error Resume Next



Set dates = Application.InputBox( _
prompt:="selectionnez la plage de dates à convertir", _
Title:="dates à transformer", _
Type:=8)



If Err > 0 Then Exit Sub           
On Error GoTo 0



Dim derniere As Integer           
dates.Select



derniere = 7 + dates.Rows.Count     'total nbr de lignes



Dim objcell As Range
Set objcell = Range("H8 : H" & derniere & "")



Dim cell As Range



'objcell.Cells.FormulaR1C1 = "=DATE(LEFT(RC[-3],4),RIGHT(LEFT(RC[-3],6),2),RIGHT(RC[-3],2))"
objcell.FormulaR1C1 = _
        "=DATE(LEFT(RC[-3],4),RIGHT(LEFT(RC[-3],6),2),RIGHT(RC[-3],2))"

End Sub


Merci à tous pour le coup de main

"L'homme de génie est celui qui m'en donne"
3