Gestion dates VB Excel

Résolu
Bonjour,

J'ai un souci dans une macro excel.
J'extrais des données d'une base de données que je colle dans excel et une macro les traite ensuite.

Le problème que j'ai est que cette extraction donne les dates au format dd.mm.yy
J'aimerais les avoir au format dd/mm/yyyy

Je vois deux problème de mon côté...

Le premier est que l'année est représentée par 2 chiffres au lieu de 4. Les deux premiers chiffres doivent être 20 pour avoir une date au format dd/mm/20yy

Ensuite j'ai l'impression qu'excel ne comprend pas que les 2 premiers caractères sont des jours et non des mois. pour toutes les dates dont les jours sont supérieur à 12, le résultat n'est pas reconnu comme un date...

voici le code que j'ai... Si vous avez un conseil je suis preneur!

Range("K2").Select
Range(selection, selection.End(xlDown)).Select
selection.NumberFormat = "dd.mm.yy"
selection.Replace What:=".", Replacement:="/", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
selection.NumberFormat = "dd/mm/yyyy"
Configuration: Windows XP
Internet Explorer 6.0

8 réponses

  1. salut,
    affecter a la cellule le format suivant, exemple:
    Feuil1.cells(14, 3) = Format$(Date, "dd mm yyyy")
    1. Salut Archi-dessin,

      ne t'affole pas plusieurs discutions sont ouvertes sur ce thème par booby311

      A+
  2. Sur mon post 3 je proposais qu'un exemple du problème soit mis sur le forum, je pense qu'il y a mauvaise saisie de la date au départ ce qui est interprété par excel comme du texte.
    Si on saisie 06/05/08 par exemple et que l'on applique dans le code macro
    Selection.NumberFormat = "m/d/yyyy"
    il n'y a aucun problème.
    Par contre si il est saisie 06.05.08 la macro ne modifie pas cette saisie qui est considérée comme du texte.
    Les séparateurs de date étant / si l'on souhaite qu'ils soient remplacé par un point il convient de modifier les paramètres ce qui risque poser d'autre problèmes

    A+
    1. selection.NumberFormat =format(date,"dd/mm/yyyy") ne marche pas (ou je n'ai pas su?)

      alors j'ai fait un mix:

      Range("K2").Select
      Range(Selection, Selection.End(xlDown)).Select
      Selection.Replace What:=".", Replacement:="/", LookAt:=xlPart, _
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
      ReplaceFormat:=False
      For Each c In Selection.Cells
      c.Value = Format(c.Value, "dd/mm/yyyy")
      Next
      Selection.HorizontalAlignment = xlRight

      l'alignement (a droite ou à gauche) est nécessaire car les fameuses dates avec jours > 12 sont alignées à gauches tandis que les autres le sont à droite
      1. après de gros soucis sur les dates ou le jour est supérieur à 12, des essai avec datval(), j'ai trouvé ça.

        Range("K2").Select
        Range(Selection, Selection.End(xlDown)).Select
        For Each c In Selection.Cells
        c.Value = Mid(c, 1, 2) & "/" & Mid(c, 4, 2) & "/20" & Mid(c, 7, 2)
        Next
        Selection.NumberFormat = "dd/mm/yyyy"
        Selection.HorizontalAlignment = xlRight

        Si ca peut t'aider....
        1. J'ai essayé ca me donne le même problème:
          pour une date initialement "06.06.08" le résulat est "06/06/2008" donc parfait de ce côté
          par contre pour un date initialement "23.06.08" le résultat est "23/06/08" et excel ne le reconnaite pas comme date...

          Tu as une autre idée?

          Merci en tout cas de te pencher sur ce cas!

          @+
          1. Salut,

            essayes avec ce code

            Selection.NumberFormat = "m/d/yyyy"

            A+