XL 2019 Utilisation de la fonction texte() en vba

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

thespeedy20

XLDnaute Occasionnel
Bonjour à tous

je dois convertir une colonne en format texte avec personnalisation..

sur une cellule j'utilise la fonction texte : =texte("A1";"hh:mm")

j'aimerais pouvoir automatiser cette fonction sur toute une colonne en vba.

avec l'enregistreur de macro, j'obtiens ceci : ActiveCell.FormulaR1C1 = "=TEXT(RC[-5],""hh:mm"")"

Pouvez-vous me donner un petit coup de main...

Merci d'avance

Oli
 
Solution
Autre version optimisée :
VB:
Option Explicit

Private Sub Job(cel As Range)
  Dim chn$: If cel = "" Then Exit Sub
  chn = Format(Hour(cel), "00") & ":" & Format(Minute(cel), "00")
  cel.NumberFormat = "@": cel = chn
End Sub

Sub conversion()
  Dim dlg&, lig&
  dlg = Cells(Rows.Count, 6).End(3).Row: Application.ScreenUpdating = 0
  For lig = 2 To dlg: Job Cells(lig, 6): Job Cells(lig, 7): Next lig
End Sub
soan
Ton fichier en retour ; clique sur ton bouton
➯ tes 2 colonnes sont en Format Texte.

Tu peux vérifier sur la feuille le format des cellules
des colonnes F et G ; regarde aussi le code VBA.


----------------------------------------------------------

Mais je ne pense pas que ce soit le résultat attendu !
alors envoie un autre fichier avec des heures qui
soient significatives : pas que des 00:00 !


soan
 

Pièces jointes

Désolé pour le retard. (c'était moins facile que prévu, mais cette fois ça devrait aller !)

Code:
Option Explicit

'H2S : Hour To String

Private Function H2S(HM As Date) As String
  H2S = Format(Hour(HM), "00") & ":" & Format(Minute(HM), "00")
End Function

Sub conversion()
  Dim chn$, dlg&, lig&: dlg = Cells(Rows.Count, 6).End(3).Row: Application.ScreenUpdating = 0
  For lig = 2 To dlg
    With Cells(lig, 6)
      If .Value <> "" Then chn = H2S(.Value): .NumberFormat = "@": .Value = chn
    End With
    With Cells(lig, 7)
      If .Value <> "" Then chn = H2S(.Value): .NumberFormat = "@": .Value = chn
    End With
  Next lig
End Sub
Edit : j'ai optimisé le code VBA ; voir mon post #10

soan
 

Pièces jointes

Dernière édition:
Ajout : tu pourras voir que pour des heures qui commencent par 0
comme 08:30, le zéro du début sera conservé après conversion ;
idem pour les minutes.

(même si ton fichier exemple ne contient pas de telles heures)

Si tu as besoin d'une autre adaptation, n'hésite pas à demander ! 🙂


soan
 
Dernière édition:
Autre version optimisée :
VB:
Option Explicit

Private Sub Job(cel As Range)
  Dim chn$: If cel = "" Then Exit Sub
  chn = Format(Hour(cel), "00") & ":" & Format(Minute(cel), "00")
  cel.NumberFormat = "@": cel = chn
End Sub

Sub conversion()
  Dim dlg&, lig&
  dlg = Cells(Rows.Count, 6).End(3).Row: Application.ScreenUpdating = 0
  For lig = 2 To dlg: Job Cells(lig, 6): Job Cells(lig, 7): Next lig
End Sub
soan
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 comptage d'heures
Réponses
6
Affichages
496
Réponses
20
Affichages
810
Retour