Formule récursive dans une cellule
Bonjour,
J'ai dans une colonne des champs dates en toutes lettres avec nom du jour, exemple "Jeudi 24 janvier 2019" que j'aimerais mettre sous la forme 24.01.2019. L'enregistreur de macro ne fonctionne pas car la procédure Format de cellule> Date>14.03.2012 (sous Excel 2016) elle-même est sans effet. La commande Ctrl+1 qu'on trouve dans l'aide Microsoft est sans effet non plus.
J'ai copié d'une ancienne discussion le code suivant (adapté à mon cas):
Code:
1 2
| Formule = "= TEXT(" & madate & "();" & "jj/mm/aaaa"
ActiveCell.FormulaR1C1Local = Formule |
(madate renvoie le contenu de la cellule) ce qui donne pour la procédure:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| Sub formater_les_dates()
L_tir = 1
C_tir = 1
Dim Formule As String
ligne_tireurs = 20
ThisWorkbook.Worksheets("tireurs").Select
For L_tir = 1 To ligne_tireurs
madate = Cells(L_tir, C_tir).Value
Formule = "= TEXT(" & madate & "();" & "jj/mm/aaaa"
ActiveCell.FormulaR1C1Local = Formule
Next
End Sub |
J'ai testé aussi sans Local et sans FormulaR1C1: même échec.
Est-ce parce que la formule a pour argument le contenu de la cellule elle-même ? Des erreurs de guillemets ?
Quelle mouche pique mon Excel 2016 ? Comment faire cette transformation des dates ?
Merci d'avance pour toute piste.
Cordialement
Touche_a_tout
Formule récursive dans une celllle
Bonjour Patrick,
Je trouve assez rigolo, en tant que futur membre du club inscrit pourtant depuis 12 ans et auteur de plus de 300 messages, d'être conseillé par un "débutant" dont j'ai déjà eu l'occasion de constater les vastes capacités. J'ai interrogé Pierre Fauconnier sur mon changement brusque de statut mais il n'a pas pu me l'expliquer. je vois qu'il t'est arrivé le même gag !
J'ai tourniqué pas mal autour de ta première proposition (mes mois sont ok) mais la conclusion est que l'opération ne peut pas être récursive: il faut envoyer le résultat dans une autre cellule, celle d'à côté par exemple. C'est bon à savoir (à moins que quelqu'un sorte une solution du chapeau). Ca donne ceci:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
Public Function shortdate(cel)
shortdate = DateValue(LCase(Replace(cel, Split(cel, " ")(0), "")))
End Function
'
Sub test()
MsgBox shortdate("Jeudi 24 janvier 2019")
End Sub
Sub formater_les_dates()
L_tir = 1
C_tir = 1
ligne_tireurs = 20
ThisWorkbook.Worksheets("tireurs").Select
For L_tir = 1 To ligne_tireurs
Cells(L_tir, C_tir + 1) = shortdate(Cells(L_tir, C_tir).Value)
Next
End Sub |
Dans la colonne voisine j'ai obtenu ceci, qui me satisfait tout à fait:
Citation:
24.07.2018
27.07.2018
31.07.2018
Encore merci de m'avoir dépanné.
Cordialement
touche_a_tout
Formule récursive dans une celllle
re, Patrick,
Pas vu ton post No 3 quand j'ai répondu. Grande souplesse, mais c'est trop pour mes besoins. Merci tout de même et tu pourrais en faire un article, bien meilleur que ce que F1 trouve chez Microsoft. Si tu te sens l'esprit pédagogique...
Bien à toi
touche_a_tout
Formule récursive dans une celllle
Bonsoir Patrick,
Je conserve ta première proposition (ton post No 2) qui me convient tout à fait.
Merci de ton aide. Pour moi, on peut considérer la discussion comme résolue.
Bine à toi. Et encore merci.
touche_a_tout