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

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,
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

teclim

XLDnaute Nouveau
Merci à tous de m'avoir aidé.
J'ai trouvé quand supprimant le tiret et le jour de la semaine dans le texte de la date excel la reconnaissait bien comme une date et en lui appliquant le format que je voulais ça fonctionne.
 

Discussions similaires

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