Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Pb : Trouver une date dans chaine (méthode SPLIT : problème formule avec variable)

zebanx

XLDnaute Accro
Bonjour

Il y a une série de chaines dans la colonne 1 qui se présentent tous de la même manière :
"A paris le 15 décembre 2017" avec le nom du mois complet.

Souhait : afficher 15/12/2017 (et en utilisant le VBA - méthode SPLIT bien pratique)

Réalisation : ok avec une colonne intermédiaire pour transformer "décembre" en "12"

Question : comment se passer de cette colonne intermédiaire SVP ?

Un fichier exemple et mes tentatives qui permet de mieux comprendre la demande.
Il y a en cellule "H1" une formule qui fonctionne et reprise dans le code mais ça bloque...

Merci par avance pour vos réponses.
zebanx

Code:
Sub datej()
Dim derligne%

derligne = Cells(Rows.Count, 1).End(3).Row

For i = 1 To derligne

'--- méthode split
s = Split(Cells(i, 1), " ")
s1 = s(3)
s3 = s(5)

'--- fonctionne mais oblige à utiiser une colonne supplémentaire
Cells(i, 2).Formula = "=MONTH(1&""" & s(4) & """)"
'Cells(i, 3).Formula = "=MONTH(1&" & Chr(34) & s(4) & Chr(34) & ")"  --- identique que ligne précédente
Cells(i, 3).Formula = "= DATE(" & s3 & "," & Cells(i, 2) & "," & s1 & ")"
Cells(i, 4) = Cells(i, 3).Value

'--- Ne fonctionne pas : Evaluate donne par exemple "erreur 2015" et S2 ne permet pas d'extraire un "2"
's2 = "=MONTH(1&""" & s(4) & """)" '--- formule usuelle fonctionne cf "H1"
'month_num = Evaluate("=MONTH(1" & Chr(34) & s(4) & Chr(34) & ")")
'month_num = WorksheetFunction.Text(month_num, "00")
'Cells(i, 6).Formula = "= DATE(" & s3 & "," & month_num & "," & s1 & ")"

Next i

End Sub
 

Pièces jointes

  • date_demande.xls
    33 KB · Affichages: 27

zebanx

XLDnaute Accro
Bonjour et merci @job75

Ce sera plus simple comme ça et redoutablement efficace

Cependant, je ne comprends pas pourquoi :

Cells(i, 3).Formula = "=MONTH(1&" & Chr(34) & s(4) & Chr(34) & ")" --> fonctionne

et que les deux méthodes suivantes, pour stocker le résultat d'une formule dans une variable, ne soient pas exploitables :
s2 = "=MONTH(1&""" & s(4) & """)"
month_num = Evaluate("=MONTH(1" & Chr(34) & s(4) & Chr(34) & ")")

Si tu peux m'éclairer sur ce point stp...

Très bonne journée à toi
zebanx
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Moi je ferais simplement comme ça :
VB:
Sub DateJ()
Dim DerLigne%, S$(), P&

DerLigne = Cells(Rows.Count, 1).End(3).Row

For i = 1 To DerLigne
   S = Split(Cells(i, 1), " ")
   For P = UBound(S) - 3 To 0 Step -1: S(P) = "": Next P
   Cells(i, 6).Value = CDate(Join(S))
   Next i

End Sub
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
petit raffinement au cas ou ...
VB:
Function MaDate(x$)
Dim s, ub%
' suppression des espaces superfétatoires éventuels...
s = Split(Application.Trim(x))
ub = UBound(s)
On Error Resume Next
MaDate = ""
MaDate = CDate(s(ub - 2) & " " & s(ub - 1) & " " & s(ub))
End Function
 

zebanx

XLDnaute Accro
Salut Modestegeedee

Effectivement, sur un fichier récupéré avec énormément de lignes, des espaces plus long qu'un simple " " sont possibles.
Une bonne idée, je t'en remercie -)

Bonne soirée
zebanx
 

job75

XLDnaute Barbatruc
Re, salut Modeste geedee, mapomme,

Application.Trim est utile si l'on tient à afficher la date malgré les espaces superflus.

Cela dit ne pas le mettre permet de repérer ces espaces (et de les supprimer ensuite).

A+
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…