Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Valider une donnée inscrite dans une cellule

C

Clo

Guest
Bonjour cher forum


J'aimerais savoir comment valider une donnée qui est inscrite dans une cellule. Cette donnée correspond au code postal ( au Canada ). Elle est constitué de 2 types de données différente qui s'alternent.

1. Le 1 type de donnée doit être de type caractère sauf que les lettres suivantes doivent être exclus : D, O, Q, I

2. Le 2e type de donnée doit être un chiffre de 0 à 9


donc le code postal est donc composé de 1 2 1 2 1 2.

J'aimerais que si une lettre minuscule est inscrite qu'automatiquement elle est mise en majuscule.

Je voudrai vous remercier énormément de votre aide.

Je travaille, en passant, sur la version Excel de windows 2000.

Merci à vous tous.

CLO


 
T

TempPascal

Guest
Le bout de code suivant te permet de tester tout ce que tu veux des lors que tu valides ta saisie par entree et ce par la procedure CheckEntry. tu definis le perimetre dans la procedure Formatte

Un petit inconvenient a cette procedure, c'est qu'elle s'applique a l'application Excel en totalité, c'est a dire que lorsqu'elle est active, il ne doit y avoir que ce classeur d'ouvert sous peine de reactions bizarres...


Sub Autpen()

Formatte

End Sub

Sub CheckEntry() 'macro qui controle les saisies effectuées
'cette partie de code peut contenir tous les controles imaginables
'voire meme la correction des données saisies

Columns('A:A').Select
Selection.Sort Key1:=Range('A1'), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Selection.End(xlDown).Select
Cells(ActiveCell.Rows + 1, 1).Select
End Sub

Sub Formatte()
'defini les feuilles a tester sur <ENTREE>

'toutes les feuilles du classeur
'enlever la boucle si on ne travaille que sur la feuille active
For Each ThisSheet In Sheets
If TypeName(ThisSheet) = cWorksheet Then 'si feuille (pas graphique ou autre)
ThisSheet.OnEntry = 'CheckEntry'
End If
Next
End Sub
 

ChTi160

XLDnaute Barbatruc
Salut dolphin
re le post
une version 4 et oui
je n'ai pas trouvé le moyen d'inhibe le code pour mettre le Code en Majuscule y a surement un moyen
je regarderai suis ton post
Amicalement
Jean Marie

New Edition
Pascal pourrais tu m'expliquer cette procèdure
car on y a pas accès dans l'aide merci d'avance
ThisSheet.OnEntry = 'CheckEntry'

[file name=Numero_Code_PostalV4.zip size=11777]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Numero_Code_PostalV4.zip[/file]

Message édité par: ChTi160, à: 28/04/2005 17:01

Message édité par: ChTi160, à: 28/04/2005 17:04
 
Dernière édition:
C

Clo

Guest
Salut ChTi160 et à tout le forum,


Mecri pour ta version 4, c'est exactement ce que je désirais. Pour permettre de la mettre en majuscule, je pourrais utiliser la fonction majuscule en faisant référence à la cellule de saisie.

J'aimerais savoir o&ugrave; est ton code car je devrais le modifier avec tous les restrictions nécessaire sur la première valeur ainsi que tous les autres restriction sur les lettres car la première a beaucoup plus de restrictions que les autres.

Je n'ai pas voulu faire un demande compliquer en vous mentionnant toutes les restrictions, c'est pour cette raison que j'aimerais savoir o&ugrave; est ton code ou par quelle moyen tu la fait, si c'est possible.

Je voulais te remercier de ta précieuse aide, j'apprécie énormément.

Dolphin
 

ChTi160

XLDnaute Barbatruc
Salut Clo
pour voir le code
tu fais Alt Plus F11
et dans la fenêtre de Gauche tu sélectionnes WorkSheet
n'hésites pas a revenir
Amicalement
Jean Marie

Message édité par: ChTi160, à: 28/04/2005 18:45
 

Dan

XLDnaute Barbatruc
Salut Clo, Chti160,

Excellent ce que tu as fait, chti160 !
Je n'aurais pas fait mieux malgré le temps que j'ai travaillé sur cela par une prpcédure sans macro.

Désolé Clo mais je pense que la solution de Chti160 sera meilleure.

 

Hellboy

XLDnaute Accro
Bonjour clo et tout les autres qui ont vaillemmant participé a la solution.

J'aimerais apporter mon grain de sel avec une autre approche. c-a-d que l'on pourrais traiter les erreurs au fur et a mesure que l'utilisateur tape un caractère. Ainsi ont peut avertir l'utilisateur de l'erreur qu'il est entrain de commette. &Ccedil;a peu réduire le niveau de frustration....

Je l'ai fait en VBA voici ce que je veux dire:
Code:
Option Explicit

Private Sub TextBox1_Change()
Dim TargetCible As Object
Application.ScreenUpdating = False
'Détermine la Targetlule de saisie
Set TargetCible = Worksheets('Test').TextBox1
With TargetCible
     If .Value = '' Then Exit Sub
     Select Case Right(.Value, 1)
            Case 'D', 'O', 'Q', 'I' ' est-ce que le zéro es exclu aussi, si oui le rajouter comme critère mais pas entre guillemets
                 MsgBox ' Les caractères D, O, Q, I sont exclus du code postal'
                 .Value = Mid(.Value, 1, Len(.Value) - 1)
     End Select
     Select Case Len(.Value)
            Case Is > 7
                 MsgBox ' Vous tentez d'inséré un trop grand nombre de caractères '
                 .Value = Mid(.Value, 1, Len(.Value) - 1)
            Case 1, 3, 6
                 If IsNumeric(Right(.Value, 1)) Then
                    .Value = Mid(.Value, 1, Len(.Value) - 1)
                    MsgBox ' Le prochain caractère doit être une lettre'
                 End If
            Case 2, 5, 7
                 If Not IsNumeric(Right(.Value, 1)) Then
                    .Value = Mid(.Value, 1, Len(.Value) - 1)
                    MsgBox ' Le prochain caractère doit être un chiffre'
                 End If
     End Select
     TargetCible = Mid(.Value, 1, Len(TargetCible) - 1) & UCase(Right(.Value, 1))
     If Len(.Value) = 3 Then TargetCible = TargetCible & '-'
End With
Application.ScreenUpdating = True
End Sub

Private Sub TextBox1_LostFocus()
If Len(Worksheets('Test').TextBox1.Value) < 7 Then
   MsgBox ' Vous tenter de valider un code postal avec seulement' & Chr(10) & Len(Worksheets('Test').TextBox1.Value) & ' caractères!!!' & Chr(10) & 'Vous devez avoir absolument 7 caractères incluant le - '
   Worksheets('Test').TextBox1.Value = '' 'peut être un peu sauvage, peut être travailler a souhait
End If
End Sub

[file name=Numero_Code_PostalV4_20050428235200.zip size=12609]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Numero_Code_PostalV4_20050428235200.zip[/file]

En espérant que &cedil;a puisse servir a un/e ou un/e autre

Philippe
 

Pièces jointes

  • Numero_Code_PostalV4_20050428235200.zip
    12.3 KB · Affichages: 8

dolphin

XLDnaute Occasionnel
Bonsoir Jean_marie, Bonsoir Philippe et bonsoir Forum,


Vous êtes complètement génial, je ne pourrais pas vous remerciez assez pour tout l'aide que vous m'apportez.


Je l'apprécie énormément.


Merci


Clo
 

Hellboy

XLDnaute Accro
Bonjour clo et a tous

Voici le code avec un peu plus de protection:

Code:
Option Explicit

Private Sub TextBox1_Change()
Dim TargetCible As Object
Application.ScreenUpdating = False
'Détermine la Targetlule de saisie
Set TargetCible = Worksheets('Test'Â'Â').TextBox1
With TargetCible
     If .Value = '' Then Exit Sub
     Select Case Len(.Value) 'Passe en revue ce qui peu etre numérique et ce qui peux être des lettres
            Case 1, 3, 6
                 If IsNumeric(Right(.Value, 1)) Then
                    .Value = Mid(.Value, 1, Len(.Value) - 1)
                    MsgBox ' Le prochain caractère doit être une lettre'
                 End If
            Case 2, 5, 7
                 If Not IsNumeric(Right(.Value, 1)) Then
                    .Value = Mid(.Value, 1, Len(.Value) - 1)
                    MsgBox ' Le prochain caractère doit être un chiffre'
                 End If
     End Select
     Select Case UCase(Right(.Value, 1)) ' Vérifie ce qui est acceptable comme caractère
            Case Empty, 'A', 'B', 'C', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
                    ' &Ccedil;a semble niais comme ça, mais c'est plus facile de lister ce que l'on accepte dans ce cas ci, que de lister ce que l'on accepte pas.
                    TargetCible = UCase(TargetCible) 
                    Len(TargetCible) - 1) & UCase(Right(.Value, 1))
                    If Len(.Value) = 3 Then TargetCible = TargetCible & '-'
                    If Len(.Value) = 7 Then Cells(1, 1).Select
 
            Case Else
                     If Len(.Value) <> 4 Then
                        MsgBox ' Le caractère ' & UCase(Right(.Value, 1)) & ' est exclus du code postal'
                       .Value = Mid(.Value, 1, Len(.Value) - 1)
                    End If
End Select
End With
Application.ScreenUpdating = True
End Sub

Private Sub TextBox1_LostFocus()
If Len(Worksheets('Test'Â'Â').TextBox1.Value) < 7 Then
   MsgBox ' Vous tenter de valider un code postal avec seulement' & Chr(10) & Len(Worksheets('Test'Â'Â').TextBox1.Value) & ' caractères!!!' & Chr(10) & 'Vous devez avoir absolument 7 caractères incluant le - '
   Worksheets('Test'Â'Â').TextBox1.Value = '' 'peut être un peu sauvage, peut être travailler a souhait
End If
End Sub

Bonne journée


Philippe [file name=Numero_Code_PostalV4_20050429141554.zip size=13923]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Numero_Code_PostalV4_20050429141554.zip[/file]

Déplacement de trois ligne !!! OK J'arrête la :woohoo:

Message édité par: Hellboy, à: 29/04/2005 16:32
 

Pièces jointes

  • Numero_Code_PostalV4_20050429141554.zip
    13.6 KB · Affichages: 10

Discussions similaires

Réponses
8
Affichages
316
Réponses
8
Affichages
657
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…