Transformer une date (chaine) en date

Bonjour,

J'ai un fichier dans lequel mes libellés de colonnes se présente sous le forme

JAN-2013 FEV-2013 MAR-2013 AVR-2013

Dans un code VBA, je reprend ces libellés et je les mets en lignes :

JANV-2013

FEV-2013

MAR-2013

Dans le tableau que j'obtiens, je n'arrive pas à les transformer en date sous la forme : JJ/MM/AA 00:00:00

Cells(Lg, "A").Resize(1, 10) = Array(Range("A" & J), Range("B" & J), Range("C" & J), Range("D" & J), Range("E" & J), _

Cells(J, ColonneC17), Range("G" & J), Cells(J, ColonneMETIER), Cells(1, I), Cells(J, I))

C'est la donnée Cells(1, I) qui me pose problème.

  • J'ai essayé la fonction CONVERTIR mais toutes les dates ne sont pas converties.
  • j'ai essayé de multiplié par 1, sans succès.

Pouvez-vous m'aider ?

Bonjour

Ton fichier (ou du moins la partie qui bloque) serait utile

Mon avis

Il y en principe que cette date FEV-2013 qui ne passe pas (manque l'accent sur le E)

Je joins un fichier pour illustrer le problème.

En résumé, je transforme un tableau avec des libellés de dates en colonnes en un tableau avec une date pour chaque ligne. Et je voudrais transformer ces : JAN-2013, FEV-2013, MAR-2013 en 01/01/2013 00:00:00, 01/02/2013 00:00:00 , 01/03/2013 00:00:00

Pour retrouver la zone qui pose, à mon avis problème, vous pouvez faire un CTRL+V dans le code avec le mot "indice".

Par ailleurs , je suis un débutant en VBA, vos propositions d'amélioration sont les bienvenues.

Cordialement

Bonjour

Un fichier sans macro n'est pas utile dans ce cas

Il faut que tu l'enregistres au format xlsm ou mieux au format xls (meilleure compatibilité 2003)

Ci-joint un fichier que j'ai enregistrer en 2003.

Je ne sais pas si la macro est enregistrer avec !

Dans le doute, voilà :

'Option Explicit

Sub Organise()

Dim J As Long

Dim I As Integer

Dim NbCol As Integer

Dim Lg As Long

Dim Colonnes_A_Supprimer As String

Dim MétierAPrendreEnCompte As String

Dim ColonneMETIER As Long

Dim ColonneZ438NOM As Long

Dim ColonneJAN2013 As Long

Dim DateEnChiffres As Date

Dim x As Date

Dim y As Date

'---------BLOC 1 pour trouver les n° de colonnes des données sensibles et pour filtrer les données utiles------------------------------------------

' colonne METIER

' Pour éviter les erreurs dues à une modification d'emplacement d'une colonne, je vais attribuer un nom à la colonne METIER que je

' vais mettre dans le tableau en liste

' Pour cela, je vais :

' 1- Chercher le titre "METIER"

' 2- Récupérer le n° de la colonne

' 3- Associer le n° de ligne (J) au n° de la colonne (ColonneMETIER), pour faire apparaître la référence dans le tableau "Array"

'COLONNE METIER

'Je sélectionne la cellule en haut à gauche

Range("A1").Activate

ActiveCell.Select

'je cherche le mot METIER dans la 1ère ligne

ActiveCell.Rows("1:1").EntireRow.Select

Selection.Find(What:="METIER", After:=ActiveCell, LookIn:=xlValues, _

LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _

MatchCase:=True, SearchFormat:=False).Activate

'Je sélectionne la cellule trouvée

ActiveCell.Select

' J'affecte le n° de colonne de la cellule active à la valeur ColonneMETIER

ColonneMETIER = ActiveCell.Column

'---------BLOC 2 Pour constituer le tableau final------------------------------------------

' Lg indique où commence le tableau en liste : ici ligne 1

Lg = 1

Application.ScreenUpdating = False

With Sheets("Fichier à plat")

NbCol = Cells(1, Columns.Count).End(xlToLeft).Column

.Cells(Lg, "A").Resize(1, 8) = Array(Range("A1"), Range("B1"), Range("C1"), Range("D1"), Range("E1"), _

Range("F1"), "Date", "Valeur")

For J = 2 To Range("A" & Rows.Count).End(xlUp).Row

' I indique le rang de la colonne de début (col A étant 1, col B étant 2...)

' Ici la procédure doit commencer à la 54ème colonne et se finir à la 88

' 7 est le n° de la colonne du mois JAN-2013, 9 le dernier mois

For I = 7 To 9

If Cells(J, ColonneMETIER).Value = "BOUCHER" Or Cells(J, ColonneMETIER).Value = "ELECTRICIEN" _

Or Cells(J, ColonneMETIER).Value = "SOUDEUR" Then

'INDICE 1 Ci-dessous le tableau qui copie la valeur DATE

Lg = Lg + 1

.Cells(Lg, "A").Resize(1, 8) = Array(Range("A" & J), Range("B" & J), Range("C" & J), Range("D" & J), Range("E" & J), _

Cells(J, ColonneMETIER), Cells(1, I), Cells(J, I))

End If

Next I

Next J

End With

MsgBox ("Fin de la procédure")

End Sub

Bonjour

C'est bien ce que j'avais pensé

Modifies le texte de la cellule H1 : Manque l'accent sur le nom du mois

'FÉV-2013

Ensuite dans la code modifies la ligne suivante

          .Cells(Lg, "A").Resize(1, 8) = Array(Range("A" & J), Range("B" & J), Range("C" & J), Range("D" & J), Range("E" & J), _
          Cells(J, ColonneMETIER), DateValue(Cells(1, I)), Cells(J, I))

mets la colonne G de la feuille "Fichier à plat" au format personnalisé jj/mm/aaaa hh:mm

Désolé, mais çà ne marche pas d'autant qu'il y a plusieurs mois pour lesquels se pose le même problème.

Je vais représenté une autre question.

Rechercher des sujets similaires à "transformer date chaine"