Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Excel 97] Validation de format dans une plage de cellules

3 réponses
Avatar
Stéphan
Bonjour à tous,

J'ai une plage de cellules dans laquelle des utilisateurs vont entrer un
nombre d'heures et de minutes (qui peuvent dépasser 24 h).
Ces données sont reprises dans d'autres cellules où elles sont additionnées,
et afin d'éviter des erreurs, je voudrais que les utilisateurs ne puissent
taper que des données au format hhh:mm et non pas des tabulations ou des ";"
ou autres caractères.

J'ai essayé par la validation des données mais je n'y arrive pas, et je ne
trouve nulle part la solution sur Internet, je me tourne donc vers ce forum
en espérant que vous pourrez m'aider.

Je pense que la solution doit se trouver du coté de VBA dans des modules de
feuilles (d'après mes recherches) mais je n'ai pas encore les compétences
requises.
Si quelqu'un pouvait m'envoyer un petit bout de code (commenté svp), ce
serait vraiment gentil.

Merci pour vos futures réponses,
Stéphan

3 réponses

Avatar
twinley
Bonjour,

J'ai posé une question similaire pour simplifier la saisie et la
reformatter.

Voici des liens pour formatter la saisie. Une réponse à mon post par
E.Kergesse

Une réponse est dans Excelabo. Ci-jointes, les recettes de CHISV et de
Frédéric SIGONNEAU;


Saisie rapide de dates comme 1425 pour 14 H 25
Je voudrais pouvoir saisir 1425 et que dans ma cellule ce soit 14 H 25 qui
soit entré. Si je
mets 0#" H "#0 comme format personnalisé cela fonctionne mais excel ne
consdère plus
la valeur comme une date... Sub formH()
Application.ScreenUpdating = False
For Each c In Selection
c.Value = TimeValue(Left(Application.Text(c.Value, "0000"), 2) _
& ":" & Right(c.Value, 2))
c.NumberFormat = "h"" H ""mm"
Next c
End Sub

ChrisV
******************
Autre solution :

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 8 And Not Target.HasFormula Then
Application.EnableEvents = False
Target.Value = (Target.Value 100) & ":" & (Target.Value Mod 100)
Application.EnableEvents = True
End If

End Sub

Dans cet exemple de code, tu peux taper 1400 dans une cellule de la colonne
H et
tu auras 14:00 dans la cellule, que tu peux mettre en forme avec ton format
personnalisé (0#" H "#0).
*Attention de toujours bien saisir 2 chiffres pour les minutes*.
A adapter selon ton besoin. ChrisV, Frédéric Sigonneau, (N°599)



Voici un exemple donné par AV il y a quelque jours

Private Sub Worksheet_Change(ByVal zz As Excel.Range)
If IsNumeric(zz.Value) And zz.Value > 1 Then
X = zz.Value
zz = TimeSerial(Int(txt / 10000), Int((X Mod 10000) / 100), X Mod 100)
zz.NumberFormat = "[hh]:mm:ss"
End If
End Sub


Dans le site exelabo tu fais une recherche sur le mot saisie

Il y a aussi une sub d'un site anglais qui traite les erreur de saisie :
j'ai pas retenu le nom de l'auteur, honte sur moi.
The next procedure will test the location and value of the changed cell. If
it is in the range A1:A10, the value is converted to a proper time. The
value in the cell must be between 1 and 6 numbers in length. Otherwise an
error will occur. The rules for conversion are described below:

Digits
Example
Remarks

1
1
Converted to 12:01:00 AM

2
23
Converted to 12:23:00 AM

3
123
Converted to 1:23:00 AM

4
1234
Converted to 12:34:00

5
12345
Converted to 1:23:45, NOT 12:03:45

6
123456
Converted to 12:34:56


.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
Exit Sub
End If
If Target.Cells.Count > 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
Select Case Len(.Value)
Case 1 ' e.g., 1 = 00:01 AM
TimeStr = "00:0" & .Value
Case 2 ' e.g., 12 = 00:12 AM
TimeStr = "00:" & .Value
Case 3 ' e.g., 735 = 7:35 AM
TimeStr = Left(.Value, 1) & ":" & _
Right(.Value, 2)
Case 4 ' e.g., 1234 = 12:34
TimeStr = Left(.Value, 2) & ":" & _
Right(.Value, 2)
Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
TimeStr = Left(.Value, 1) & ":" & _
Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
Case 6 ' e.g., 123456 = 12:34:56
TimeStr = Left(.Value, 2) & ":" & _
Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
Case Else
Err.Raise 0
End Select
.Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub


--
à+twinley
"Stéphan" a écrit dans le message de
news:
Bonjour à tous,

J'ai une plage de cellules dans laquelle des utilisateurs vont entrer un
nombre d'heures et de minutes (qui peuvent dépasser 24 h).
Ces données sont reprises dans d'autres cellules où elles sont
additionnées,

et afin d'éviter des erreurs, je voudrais que les utilisateurs ne puissent
taper que des données au format hhh:mm et non pas des tabulations ou des
";"

ou autres caractères.

J'ai essayé par la validation des données mais je n'y arrive pas, et je ne
trouve nulle part la solution sur Internet, je me tourne donc vers ce
forum

en espérant que vous pourrez m'aider.

Je pense que la solution doit se trouver du coté de VBA dans des modules
de

feuilles (d'après mes recherches) mais je n'ai pas encore les compétences
requises.
Si quelqu'un pouvait m'envoyer un petit bout de code (commenté svp), ce
serait vraiment gentil.

Merci pour vos futures réponses,
Stéphan


Avatar
twinley
ouf, c'est sur le site de Chip Pearson

http://www.cpearson.com/excel/DateTimeEntry.htm

--
à+twinley
"Stéphan" a écrit dans le message de
news:
Bonjour à tous,

J'ai une plage de cellules dans laquelle des utilisateurs vont entrer un
nombre d'heures et de minutes (qui peuvent dépasser 24 h).
Ces données sont reprises dans d'autres cellules où elles sont
additionnées,

et afin d'éviter des erreurs, je voudrais que les utilisateurs ne puissent
taper que des données au format hhh:mm et non pas des tabulations ou des
";"

ou autres caractères.

J'ai essayé par la validation des données mais je n'y arrive pas, et je ne
trouve nulle part la solution sur Internet, je me tourne donc vers ce
forum

en espérant que vous pourrez m'aider.

Je pense que la solution doit se trouver du coté de VBA dans des modules
de

feuilles (d'après mes recherches) mais je n'ai pas encore les compétences
requises.
Si quelqu'un pouvait m'envoyer un petit bout de code (commenté svp), ce
serait vraiment gentil.

Merci pour vos futures réponses,
Stéphan


Avatar
Stéphan
Merci pour ces réponses Twinley, je vais essayer de me débrouiiler avec tout
ça ...

@+
Stéphan

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

"twinley" wrote:

ouf, c'est sur le site de Chip Pearson

http://www.cpearson.com/excel/DateTimeEntry.htm

--
à+twinley
"Stéphan" a écrit dans le message de
news:
Bonjour à tous,

J'ai une plage de cellules dans laquelle des utilisateurs vont entrer un
nombre d'heures et de minutes (qui peuvent dépasser 24 h).
Ces données sont reprises dans d'autres cellules où elles sont
additionnées,

et afin d'éviter des erreurs, je voudrais que les utilisateurs ne puissent
taper que des données au format hhh:mm et non pas des tabulations ou des
";"

ou autres caractères.

J'ai essayé par la validation des données mais je n'y arrive pas, et je ne
trouve nulle part la solution sur Internet, je me tourne donc vers ce
forum

en espérant que vous pourrez m'aider.

Je pense que la solution doit se trouver du coté de VBA dans des modules
de

feuilles (d'après mes recherches) mais je n'ai pas encore les compétences
requises.
Si quelqu'un pouvait m'envoyer un petit bout de code (commenté svp), ce
serait vraiment gentil.

Merci pour vos futures réponses,
Stéphan