Inversion des caractères

Bonjour,

J'ai un petit problème qui ne devrait pas être très compliqué à résoudre. J'ai créé une fonction ExtractionDate qui me récupère les 10 premiers caractères en partant de la gauche d'une cellule. J'ai également créé une macro qui me permet d'appliquer cette fonction à toutes les cellules de la colonne A et de noter les résultats dans la colonne B. Cela fonctionne, le seul problème c'est que mes premières lignes sont de la forme mm/jj/aaaa et les suivantes de la forme normale jj/mm/aaaa... J'aimerais que toutes les lignes soient de la forme jj/mm/aaaa. Avez-vous une idée ?

6classeur1.xlsm (91.99 Ko)

Bonjour,

La fonction VBA CDate() devrait faire ça très bien :

Public Function ExtractionDate(ChaineCaractere As String) As Date
    ExtractionDate = CDate(Left(ChaineCaractere, 10))
End Function

Bonjour,

Je vous remercie de votre réponse mais ça ne fonctionne pas

Je viens de re-tester, ce code fonctionne.

Qu'entendez-vous par "ça ne fonctionne pas"?

Peut-être est-ce du à votre version Mac???

J'ai également essayé sur un ordinateur windows et j'ai une erreur "erreur d'exécution '13': incompatibilité de type" due à la ligne Cdate.

Bonjour lea_VBA, pijaku, le forum,

un essai à tout hasard....en modifiant le format....

Sub test()
 Dim Plage As Variant
  Plage = Range("A2").CurrentRegion
   For i = 1 To UBound(Plage)
    Range("B" & i) = Format(Range("A" & i), "mm/dd/yyyy")
   Next i
End Sub
3classeur1.xlsm (91.17 Ko)

Cordialement,

Bonjour à tous,

Je ne suis pas certain d'avoir tout compris...

Je propose une fonction pour convertir des dates sous forme de texte au format MMJJAA en vraies dates :

Function MMJJtoJJMM(sdate$, Optional sep$ = "/") As Date 'ou as long
t = Split(sdate, sep)
MMJJtoJJMM = DateSerial(t(2), t(0), t(1))
'MMJJtoJJMM = clng(DateSerial(t(2), t(0), t(1))) si type long
End Function

Il est possible de modifier la fonction et de renvoyer une valeur de type long pour être certain d'obtenir le bon résultat.

Sinon, pour garantir de restituer les bonnes dates, en partant de l'exemple :

Sub test()
t = [A2:A19].Value2 'récupère dates indépendamment du format
For i = LBound(t) To UBound(t)
    t(i, 1) = CDate(Int(t(i, 1))) 'garde la valeur entière et convertit en Date (conversion pas nécessaire d'ailleurs).
Next i
[B2].Resize(UBound(t)).Value = t 'collage
End Sub

Cependant, avant le collage, il faut peut-être modifier le format de date.

Cdlt,

J'ai également essayé sur un ordinateur windows et j'ai une erreur "erreur d'exécution '13': incompatibilité de type" due à la ligne Cdate.

Cela est dû à une mauvaise donnée injectée à la formule.

Du genre : CDate("aaa") ou CDate("")

Faites un test avant :

Public Function ExtractionDate(ChaineCaractere As String) As Date
    If IsDate(ChaineCaractere) Then
        ExtractionDate = CDate(Left(ChaineCaractere, 10))
    End If
End Function
Rechercher des sujets similaires à "inversion caracteres"