[Excel 97] Validation de format dans une plage de cellules
3 réponses
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <Stphan@discussions.microsoft.com> a écrit dans le message de
news:AF4E358B-00F8-4FF2-9666-D27D7F74B59A@microsoft.com...
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.
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
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
ouf, c'est sur le site de Chip Pearson
http://www.cpearson.com/excel/DateTimeEntry.htm
--
à+twinley
"Stéphan" <Stphan@discussions.microsoft.com> a écrit dans le message de
news:AF4E358B-00F8-4FF2-9666-D27D7F74B59A@microsoft.com...
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.
-- à+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
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
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" <Stphan@discussions.microsoft.com> a écrit dans le message de
news:AF4E358B-00F8-4FF2-9666-D27D7F74B59A@microsoft.com...
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 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.