XL 2019 [vba] retourner une chaine de caractères depuis une fonction

teclim

XLDnaute Nouveau
bonjour(soir) à tous,
Je débute en vba et j'ai créer une fonction qui me converti du texte en date mais à la fin de la fonction, pour retourner la chaine de caractères convertie ça ne fonctionne pas.
Voila le code pour l'appel de la fonction :
VB:
Cells(1, i).Value = converti_en_date(Cells(1, i).Value)

et voici la fin de la fonction :
Code:
date_transfome = jour_sem & vbCrLf & jour & " " & mois
    
 converti_en_date = date_transforme
 
End Function

j'ai vérifié le contenu de l variable "date_transforme" et il y a bien la chaine converti mais la fonction be retourne pas la chaine dans ma procédure.
Voyez-vous pourquoi ?
 

Gégé-45550

XLDnaute Accro
bonjour(soir) à tous,
Je débute en vba et j'ai créer une fonction qui me converti du texte en date mais à la fin de la fonction, pour retourner la chaine de caractères convertie ça ne fonctionne pas.
Voila le code pour l'appel de la fonction :
VB:
Cells(1, i).Value = converti_en_date(Cells(1, i).Value)

et voici la fin de la fonction :
Code:
date_transfome = jour_sem & vbCrLf & jour & " " & mois
  
 converti_en_date = date_transforme
 
End Function

j'ai vérifié le contenu de l variable "date_transforme" et il y a bien la chaine converti mais la fonction be retourne pas la chaine dans ma procédure.
Voyez-vous pourquoi ?
Bonjour,
Comment voulez-vous qu'une fonction convertisse le contenu d'une cellule dans cette cellule elle-même ?
  • Cells(1, i).Value = converti_en_date(Cells(1, i).Value)
Par ailleurs, il est toujours plus simple d'aider lorsqu'on dispose d'un fichier et du code complet de votre fonction.
Cordialement,
 

Dranreb

XLDnaute Barbatruc
Bonsoir
Il faudrait savoir, votre fonction retourne t-elle du texte (As String) ou une date (As Date) ?
Si vos cellules contiennent déjà des dates vous auriez meilleur temps de les laisser comme elle sont mais à les afficher avec un format personnalisé "jjjj j mmmm"
Mais sinon cette fonction renvoie du texte :
VB:
Function DateJSJM(ByVal Z) As String
   If TypeOf Z Is Range Then Z = Z.Value
   If VarType(Z) = vbString Then Z = CDate(Z)
   DateJSJM = Format(Z, "dddd" & vbLf & "d mmmm")
   End Function
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour teclim, le forum,

Attention vous avez écrit date_transfome au lieu de date_transforme, voici le code complet :
VB:
Sub Test()
Dim i As Integer
Cells(1, 1) = Date 'aujourd'hui
Cells(1, 1).Resize(, 10).DataSeries 'série chronologique
For i = 1 To 10
    Cells(1, i).Value = converti_en_date(Cells(1, i).Value)
Next
End Sub

Function converti_en_date(dat As Date) As String
Dim jour_sem As String, jour As Byte, mois As String, date_transforme As String
jour_sem = Application.Proper(Format(dat, "dddd"))
jour = Day(dat)
mois = Format(dat, "mmmm")
date_transforme = jour_sem & vbCrLf & jour & " " & mois
converti_en_date = date_transforme
End Function
A+
 

Pièces jointes

  • Test.xlsm
    15.7 KB · Affichages: 0

job75

XLDnaute Barbatruc
En fait pas besoin de fonction, on peut écrire plus simplement :
VB:
Sub Test()
Dim dat As Date, i As Integer
dat = DateSerial(Year(Date), Month(Date), 1)
Rows(1).ClearContents 'RAZ
For i = 1 To 31
    If Month(dat + i - 1) = Month(dat) Then Cells(1, i) = Application.Proper(Format(dat + i - 1, "dddd")) & vbCrLf & Format(dat + i - 1, "d mmmm")
Next
End Sub
 

Pièces jointes

  • Test.xlsm
    15.3 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
315 057
Messages
2 115 795
Membres
112 542
dernier inscrit
J-c2417