Conversions de dates

Bonjour

Un grand casse-tête pour moi

Suite à un sujet posé sur le forum, j'ai créé une macro qui supprime un caractère parasite dans une cellule et ensuite transforme la dite cellule en date

Mais je me retrouve avec le mois et le jour inversé

Donc une deuxième macro et dans cette macro il y a comme format de cellule "m/d/yyyy" mais j'ai la date dans le bon ordre

"Va comprendre Charles"

Si quelqu'un a une explication, merci

Bonne journée

Bonjour Banzai64,

Une petite explication :

Lorsqu'en VBA, Excel détecte qu'une chaine de caractère ressemble à une date, si cette chaine de caractère non formatée est inscrite dans une cellule quelconque d'une feuille quelconque, il fera une conversion implicite de cette chaine en date. Et cette date se retrouvera en format anglais.

Pour s'en convaincre, si en VBA tu fais [V1] = "8/5/2010", dans la cellule V1 tu obtiendras la date 05/08/2010.

Par contre, si tu formates au préalable ta chaine de caractère en faisant [V1] = CDate("8/5/2010"), tu obtiendras bien 08/05/2010 en V1.

Dans ta version 2, étant donné que c'est une formule que tu écris, le résultat obtenu est en format français.

Bonsoir à tous,

Une piste qui n'apporte pas de réponse, mais un constat !

il se passe quelque chose avec les espaces,

fais un test dans la colonne "i",

supprime et remets les 2 espaces après le A

en version 1, çà ne remplace plus rien

en version 2, çà met #VALEUR!

Bizarre !

Amicalement

Claude

Salut claude,

En fait ce n'est pas 2 espaces qui se trouvent après le "Â " mais 2 espaces insécables.

Essaie le code suivant :

Sub espace()
MsgBox Asc(" ")
MsgBox Asc(" ")
End Sub

Le premier te renverra 32 tandis que le second te renverra 160.

Bonsoir Vba-New

Bonsoir Claude

Merci de ces explications, bien que j'ai du mal à admettre, nous sommes en France et pourquoi Excel considère la date en Anglais (oui à la base c'est un programme en langue Anglo-Saxonne)

A quoi servent les paramètres régionaux (ou un truc comme ça) ?

Bon, il faut faire avec

Je vais encore galérer la prochaine fois que je vais être confronté à ce problème

Pour la 1ère version j'ai modifier le code comme ceci

Sub Version_01()
Dim Lg As Long
Dim j As Long

  Application.ScreenUpdating = False
  Lg = Range("A65536").End(xlUp).Row
  Range("I3:I" & Lg).Copy Range("A3")

  With Range("A3:A" & Lg)
    .Replace What:="Â  ", Replacement:=""
    .HorizontalAlignment = xlCenter
  End With
  For j = 3 To Lg
    Cells(j, "A") = Format(CDate(Cells(j, "A")), "dd/mm/yyyy")
  Next j
End Sub

Pas joli, joli

Pas trouver mieux

Si tu as (ou quelqu'un d'autre) une solution autre, je serai intéressé de la connaitre

Sur ce je vous souhaite une très bonne soirée

Merci

Re,

Banzai64 a écrit :

Pas joli, joli

En effet, la manipulation directe des cellules devient lente lorsque ton tableau est grand. Le mieux est de passer par une variable tableau :

Sub Version_03()
    Dim Lg As Long, i As Long
    Dim tablo As Variant

    Application.ScreenUpdating = False
    Lg = Range("A65536").End(xlUp).Row
    tablo = Range("I3:I" & Lg).Value
    For i = LBound(tablo) To UBound(tablo)
        tablo(i, 1) = CDate(Replace(tablo(i, 1), "Â  ", ""))
    Next i
    Range("A3:A" & Lg).Value = tablo

End Sub

Merci

Cela fonctionne très bien

Je vais stocker ces petits programmes afin que je les retrouve plus quand je vais en avoir besoin

Je laisse ouvert le fil si d'autres solutions arrivent

merci

Rechercher des sujets similaires à "conversions dates"