Formater le contenu d'une cellule dans Excel

Bonjour,

J'ai besoin d'obliger l'utilisateur à saisir un Time Code (TC) dans une cellule et uniquement celui-ci avec un format bien précis exemple: 01:25:12:12

J'aimerai que tout autre saisie différente de celle ci soit refusée.

j'ai tenté pas mal de chose mais ce format n'est pas reconnu par Excel dans le "Format de cellule" ni dans "validation de données".

Si vous avez une petite idée, je suis preneur :-)

merci

Bonjour Nagra,

01:25:12:12

Correspond à quoi?

En ce qui me concerne, je "lis" une heure vingt cinq minutes douze secondes et un cinquième (12/60 secondes).

Concernant les décimales des secondes il me semble qu'elles doivent être rédigées de façon décimale et en centièmes ce qui donnerait

01:25:12,20

Mon seul conseil serait d'utiliser un format reconnu

[HH]:MM:SS,00

[HH] qui permet de cumuler les heures au delà de vingt quatre heures, pour comptabiliser les heures mensuelles...

Bonjour Nagra, njhub,

Si le souci majeur est la validation de la saisie et non la mise en forme, peut-être que quelque chose comme ça peut marcher :

'MODULE NORMAL

Sub ValidationHeure(Cible As Range)

Dim FormatHeure as Boolean
If not FormatHeure = Cible.Value Like "##:##:##:##" then
    msgbox "Saisie incorrecte ! Veuillez saisir au format 00:00:00:00.", vbcritical, "Validation des données"
end if

End Sub

'MODULE DE LA FEUILLE VISÉE PAR LA VALIDATION
Private Sub worksheet_change(byval target as range)
if not intersect(target, range("???")) is nothing then
    if not target.count > 1 then
        call ValidationHeure(target)
    end if
end if
end sub
        

Il faudra remplacer les "???" par l'adresse de la plage soumise à validation.

Cordialement,

Bonjour,

j'avais fais un fichier pour une demande sur les time code.
J'ai adapté une des fonctions à ton problème :

Function controleTC(T, Optional imgs As Long = 25)
    ' conversion images ou TC "hh:mm:ss:img" en images
    ' imgs : images par seconde
    If T Like "##:[0-5]#:[0-5]#:##" Then
        controleTC = CDate(Left(T, 8)) * convSec * imgs + CLng(Right(T, 2))
'    ElseIf IsNumeric(T) Then ' saisie en nombre d'image non validée
'        controleTC = CLng(T)
    Else
        controleTC = CVErr(xlErrValue)
    End If
End Function

à voir si tu désires ajouter un contrôle des 2 derniers chiffres.

Si ok retourne le nombre d'images, valeur d'erreur sinon
eric

2timecode-1-1.xlsm (21.96 Ko)

Salut njhub,

merci pour ta réponse, en fait ce sont des TC (Time Code) pour la vidéo ou le son lorsque l'on travaille à l'image, c'est in time code temporel.

Ce format n'est pas reconnu par Excel de base.

Je vais tenter la solution de eriiic.

merci

Oups, en fait je vais utiliser la solution de 3GB et non celle de eriic.

la solution de eriic est très intéressante meme si ce n'est pas ce que je recherche et je vais la garder au chaud :-)

Salut 3GB,

Merci pour ta réponse.

Faut il vraiment passer par un script VBA, il n'existe pas de formules pour cela ?

Cela m'oblige enregistrer le ficher avec le mode prise en compte des macros (xlsm), non ?

Je ne suis pas très calé en VBA, je viens de tenter et .... je bug :-(

ou indique t'on la plage de cellule pour laquelle il faut respecter la saisie du time code ?

merci pour ton aide.

Alors il faudra au moins y mettre une partie de la solution d'eriiic

Like "##:[0-5]#:[0-5]#:##"

au lieu de

Like "##:##:##:##"

car je n'avais pas géré correctement les minutes et secondes.

A ma connaissance, oui. Sinon, je n'aurais pas proposé de solution VBA.

Pour ma proposition, il faut en effet enregistrer le classeur en xlsm, activer l'onglet développeur, ouvrir l'éditeur visual basic, y insérer un module où mettre le code de la macro ValidationHeure et aller sur le module de la feuille sur laquelle la validation est à faire et y coller la code worksheet_change.

Ensuite, si vos heures sont saisies en A1:A100 par exemple, il faut y remplacer intersect(target, range("???")) par intersect(target, range("A1:A100")).

3GB,

Un grand merci, j'y suis presque mais j' encore besoin d'aide :-)

J'ai essayé de suivre tes conseils et peut être que je n'ai pas tout fait correctement car a chaque saisie d'un TC, j'ai la fenêtre qui s'ouvre avec le message d'erreur.

Et cela que je tape un bon TC ou un mauvais !

J'ai ouvert l'éditeur et dans la feuille de mon classeur j'y ai collé ceci:

'MODULE DE LA FEUILLE VISÉE PAR LA VALIDATION
Private Sub worksheet_change(ByVal target As Range)
If Not Intersect(target, Range("C7:D600")) Is Nothing Then
If Not target.Count > 1 Then
Call ValidationHeure(target)
End If
End If
End Sub

et dans un module j'y ai collé ceci:

Sub tc()
'MODULE NORMAL

Sub ValidationHeure(Cible As Range)

Dim FormatHeure As Boolean
If Not FormatHeure = Cible.Value Like "##:[0-5]#:[0-5]#:##" Then
    MsgBox "Saisie incorrecte ! Veuillez saisir au format 00:00:00:00", vbCritical, "Validation des données"
End If

End Sub

Le souci est que j'ai le message a tous les coups comme précisé plus haut et que si le TC entré n'est pas bon, cela n'empêche pas l'utilisateur de valider et de continuer sa saisie en laissant un TC erroné.

Je se sais pas si je suis très clair :-)

Encore merci pour ton aide.

la solution de eriic est très intéressante meme si ce n'est pas ce que je recherche

si, c'est ce que tu cherches, mais tu ne sais pas l'utiliser. Pas pareil...

Une autre façon de faire serait d'ouvrir une boite de dialogue avec 4 champs à la sélection d'une cellule à contrôler. Si les 4 champs saisis ont des critères corrects alors un bouton Ok est dégrisé. Sinon l'utilisateur n'a qu'un bouton Annuler
eric

oui excuse moi eriic, dans ton fichier il y a également ce que je recherche en cellule H3 & H4 et c'est pas mal, je l'avoue, mais moi je ne cherche pas à corriger un mauvais Tc mais surtout le fait qu'il soit bien saisi et que le nombre de chiffre soit respecté ainsi que la séparation par les ":" comme ceci: 10:00:00:00

Merci :-)

Bonjour Nagra,

Mon code présentait une erreur de syntaxe. Comme ça, il fonctionne de mon côté :

Sub ValidationHeure(Cible As Range)

Dim FormatHeure as Boolean
FormatHeure = Cible.Value Like "##:[0-5]#:[0-5]#:##" 
If not FormatHeure then
    msgbox "Saisie incorrecte ! Veuillez saisir au format 00:00:00:00.", vbcritical, "Validation des données"
    Cible.clearcontents
end if

End Sub

Sinon, il vaut mieux saisir la macro évènementielle comme ceci :

Private Sub worksheet_change(ByVal target As Range)
If Not Intersect(target, Range("C7:D600")) Is Nothing Then
    If Not target.Count > 1 Then
        If Not target.Value = "" Then
            Call ValidationHeure(target)
        End If
    End If
End If
End Sub

Cela signifie que les cellules vides sont autorisées et que la validation n'est pas effective lorsque plusieurs cellules sont modifiées simultanément.

Merci 3GB, ça fonctionne !

Rechercher des sujets similaires à "formater contenu"