Transformer 20161108 en 08/11/2016

Bonjour à tous,

Petit nouveau à la retraite, je me remets sur mon fichier de météorologie.

Le fichier extrait de la station me donne les dates de la façon suivante:

20161108

J'ai trouvé des solutions par insertion de colonnes et diverses formules, mais mon but serait de ne pas avoir à ajouter de colonnes pour obtenir:

08/11/2016

Auriez-vous une formule miracle ou un code vba sous le coude pour me sortir la tête de l'eau ?

Je suis sous excel 2007

Pour l'instant, j'ai trouvé cette formule, mais à mettre dans une autre colonne.

En B21, je traite A21

=(STXT(A21;7;1)&STXT(A21;8;1)&"/"&STXT(A21;5;1)&STXT(A21;6;1)&"/"&STXT(A21;1;4))

J'obtients

17/06/2015

Reste à trouver pour que ça ne travail que sur la colonne A

Merci pour votre aide

@+

Robert

Salut Boby,

quelque chose comme ça, sans doute ?

Private Sub Worksheet_Change(ByVal Target As Range)
'
Application.EnableEvents = False
'
sFlag = Target.Value
If Target.Column = 1 And Mid(sFlag, 5, 1) <> "/" And sFlag <> "" And Len(sFlag) = 8 And IsNumeric(sFlag) = True Then
    Cells(Target.Row, 1) = Format(Right(sFlag, 2), "00") & "/" & Format(Mid(sFlag, 5, 2), "00") & "/" & Left(sFlag, 4)
Else
    Cells(Target.Row, 1) = ""
End If
'
Application.EnableEvents = True
'
End Sub

A+

Bonjour,

Merci pour votre aide.

J'ai essayé, mais ça ne fonctionne pas. Peut être ai-je mal placé le code ou je ne l'utilise pas correctement ?

Voici un extrait de mon fichier.

Comme voilà dans cet exemple, j'importe 198000 lignes à modifier en dates.

@+

Robert

bonsoir

vois si cela convient.

CORDIA5

Salut Boby,

je te renvoie ton fichier.

J'ai évidemment fait en fonction de la présentation de tes données. Dans la réalité, sont-elles aussi bien sagement rangées depuis la ligne 2 (pas de contrôle).

Tu sélectionnes la colonne à traiter et le résultat s'affiche en colonne B.

A adapter à la situation réelle de tes données, bien sûr!

A+

10dateconvert.xlsm (68.58 Ko)

Bonjour,

Messieurs, chapeau bas, ça fonctionne très bien.

La méthode de Curulis57 fonctionne beaucoup plus vite que celle de CORDIAS mais j’apprécie vos deux aides. Je vais continuer à élaborer mon fichier.

Merci à vous

@+

Robert

Bonjour,

à essayer, sur base de ton exemple en colonne A, résultat en colonne C

Option Explicit
Sub Dates()
Dim a, Last&, i&
Dim t
Last = [A65000].End(xlUp).Row
a = Range("A1:A" & Last)
ReDim t(1 To Last, 1 To 1)
For i = 2 To UBound(a)
   t(i, 1) = DateSerial(Left(a(i, 1), 4), Mid(a(i, 1), 5, 2), Right(a(i, 1), 2))
Next
[C1].Resize(UBound(t, 1)) = t
[C:C].NumberFormat = "dd\/mm\/yyyy"
End Sub

Bonjour,

J'ai clos le sujet un peut vite.

Les dates ou les jours du 01 au 12 sont inversées.

Boby71C a écrit :

Bonjour,

J'ai clos le sujet un peut vite.

Les dates ou les jours du 01 au 12 sont inversées.

Tu as testé le code envoyé dans le message précédant ?

P.

Hello l'ami

écoute, c'est une solution homme des cavernes, une bonne vieille formule (voir ci-joint le fichier =DATE(GAUCHE(A3;4);DROITE(GAUCHE(A3;6);2);DROITE(A3;2))) mais elle a deux avantages :

  • elle te donne un résultat bien en format date (et pas en format texte)
  • il y a probablement moyen de la faire en SQL au niveau de ta base de donnée pour convertir dans ta requête d'extraction

Bien à toi

Ewok

Re

Alors avec le code de Patrick1957, ça fonctionne, mais il y a une petite anomalie que je n'arrive pas à corriger dans le code, en exemple, j'ai l'impression que le résultat est décalé d'une ligne vers le haut.

J'ai mis quelques exemples en rouge.

Merci à tous pour votre précieuse aide.

Merci également à Ewok pour la formule que je vais tester. Mais j'avais essayé avec une formule mais il faut une manipulation supplémentaire de copier les valeurs.

@+

Robert

re,

petite modif

Option Explicit
Option Base 1
Sub Dates()
Dim a, Last&, i&
Dim t
Last = [A65000].End(xlUp).Row
a = Range("A2:A" & Last)
ReDim t(1 To Last, 1 To 1)
For i = LBound(a) To UBound(a)
   t(i, 1) = DateSerial(Left(a(i, 1), 4), Mid(a(i, 1), 5, 2), Right(a(i, 1), 2))
Next
[B2].Resize(UBound(t, 1)) = t
Range("B2:B" & Last).NumberFormat = "dd\/mm\/yyyy": [B1] = "New"
End Sub
Rechercher des sujets similaires à "transformer 20161108 2016"