XL 2019 Utilisation de la fonction texte() en vba

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

soan

XLDnaute Barbatruc
Inactif
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

  • Conversion.xlsm
    15.8 KB · Affichages: 3

soan

XLDnaute Barbatruc
Inactif
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

  • Conversion.xlsm
    19.3 KB · Affichages: 2
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
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:

soan

XLDnaute Barbatruc
Inactif
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

  • Conversion.xlsm
    19.1 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 893
Membres
103 404
dernier inscrit
sultan87