ajout des balises de code (sélection du code + # au dessus de la fenêtre de rédaction du message)
Je connais mal les fonctions Excel et je préfère le VBA.
Voici les éléments de réponse en macro:
1) utiliser l'événement Worksheet_Change
2) Utiliser la fonction Like
Exemple:
Code:
1 2 3
| Private Sub Worksheet_Change(ByVal Target As Range)
If Target Like "O?I" Then MsgBox "It's OK"
End Sub |
les codes de correspondance:
? Tout caractère unique.
* Aucun ou plusieurs caractères.
# Tout chiffre unique (de 0 à 9).
[charlist] Tout caractère unique compris dans l'argument charlist.
[!charlist] Tout caractère unique non compris dans l'argument charlist.
Tu peux aussi mettre une condition sur Target (Target.Row pour par exemple n'appliquer la condition que sur une ligne donnée etc.)
Voila :P
Désolé, je me suis mal expliqué.
Bonjour Gorfael et Many31,
D'abord, merci à vous deux. :ccool:
Mais je me suis mal expliqué et mon 'algo' n'était pas complet.
En fait, l'utilisateur ne doit pouvoir saisir que deux 'Digits' (chiffres au format ##) ou deux 'Digits' (chiffres au format ##) et un caractère (qui peut être un chiffre de [0-9] ou [A-H] ou [J-N] ou [P-N].
J'ai essayé de modifire le code mais ça ne marche pas, je crois que je prend le pb à l'envers. J'y réfléchi mais si vous avez plus d'info.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim Msg_Err As String
If Target.Cells.Count <> 1 Or Intersect(Target, Columns(4)) Is Nothing Or _
IsEmpty(Target) Then Exit Sub
'If more than one cell is modified or if the cell is not in the 'D' column, go out !
Select Case Len(Target)
Case 2
If Not (Target Like "##") Then Msg_Err = "2 Digits"
Case 4
If Not (Target Like "####") Then Msg_Err = "4 Digits"
Case 5
If Not (Target Like "####[0-9]") Then Msg_Err = "4 Digits and 1 Number"
' or
If Not (Target Like "####[A-H]") Then Msg_Err = "4 Digits and 1 Char in upper case"
' or
If Not (Target Like "####[J-N]") Then Msg_Err = "4 Digits and 1 Char in upper case"
' or
If Not (Target Like "####[P-Z]") Then Msg_Err = "4 Digits and 1 Char in upper case"
Case Else
Msg_Err = "2 Digits,4 Digits or 4 Digits and 1 Char in upper case"
End Select
If Msg_Err <> "" Then
MsgBox Msg_Err, vbCritical + vbOKOnly, "erreur de saisie"
Target.ClearContents
End If
If Target.Column = 4 And Target.Count = 1 Then
Target = UCase(Target)
End If
Application.EnableEvents = True
End Sub |
Merci à vous tous.