Conflit de code dans même application (vb)

Fermé
raro Messages postés 140 Date d'inscription vendredi 5 septembre 2003 Statut Membre Dernière intervention 7 avril 2016 - 4 mai 2005 à 21:49
 Utilisateur anonyme - 10 mai 2005 à 05:42
Salut à tous !

j'espère bien me faire comprendre....

je suis en train de faire une application (genre visdata) me permettant de rentrer des données dans une base access qui doit permettre d'ajouter,modifier,et supprimer des données .
du fait de certaines regles de gestion (saisie obligatoire, format date etc) je me retrouve en conflit car lorsque je veux modifier le programme reprend les règles de gestion d'ajouter et je suis donc obliger de modifier toutes les zones textes là ou je ne veux en modifier qu'une seule
voici mon code:
commande ajouter click + regles de gestion vérifiées en quittant le focus
Private Sub cmd_ajouter_Click()
'se référer aux commentaires sub p_afficher_frame2
p_afficher_frame2
'text_licence prend le focus
text_licence.SetFocus
'remettre les zones textes à blanc
p_blanc

text_nom.Visible = False
text_prenom.Visible = False
text_datnais.Visible = False
text_sexe.Visible = False

'créer un nouvel enregistrement
rs.AddNew
If rs.EOF Then rs.MoveLast

End Sub
Sub p_test_entree()

Const Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZÜÄËÏÉÈÀÙabcdefghijklmnopqrstuvwxyzùéèàäëï-"

'verification du type de caractères saisi: alpha obligatoire
'déclaration et initialisation du pointeur a
Dim h As Integer
Dim Dum As String
Dim Rep As Long

Dum = "Caractère"
h = 0
'pointer a sur toute la longueur de la saisie à partir du premier caractère
For h = 1 To Len(Dum)
'si un ou plusieurs caractères saisis sont différents de A à Z alors
Rep = InStr(1, Alphabet, UCase(Trim(Mid(Dum, h, 1))), vbTextCompare)
If (Rep = 0) Then
'message
MsgBox "la saisie ne peut comporter que des lettres"
'remise à blanc et reprise du focus par text_prenom
Dum = ""

'sortir
Exit Sub
'fin de if
End If
'fin de la boucle a
Next h

End Sub

Sub text_licence_lostfocus()
If Screen.ActiveControl.Name = "cmd_annuler" Then Exit Sub
If Screen.ActiveControl.Name = "cmd_fermer" Then Exit Sub

'verification du type de caractères saisi: numérique obligatoire
'déclaration et initialisation du pointeur i
Dim i As Integer
'pointer i sur toute la longueur de la saisie à partir du premier caractère
For i = 1 To Len(text_licence.Text)
'si un ou plusieurs caractères saisis sont différents de 0 à 9 alors
  If UCase(Trim(Mid(text_licence.Text, i, 1))) Like "[!0-9]" Then
  'message
   MsgBox "la saisie ne peut comporter que des chiffres"
   'remise à blanc de text_licence
   text_licence.Text = ""
   'repositionner le focus sur text_licence
   text_licence.SetFocus
   'sortir de la boucle for
   Exit Sub
   'fin de if
   End If
   'fin de for
Next i


'si la zone texte de text_licence ne contient pas 15 caractère alors
If Len(text_licence) <> 15 Then
'message
MsgBox "la saisie de 15 caractères numérique  est obligatoire"
'remise à blanc de la zone texte et reprise du focus
text_licence.Text = ""
text_licence.SetFocus
'sortir du if
Exit Sub
'fin de if
End If

'le texte nom devient visible et prend le focus
text_nom.Visible = True
text_nom.SetFocus


End Sub



Sub text_nom_lostfocus()

'texte_nom en majuscules
text_nom.Text = UCase(text_nom.Text)

'verification du type de caractères saisi: alpha obligatoire

p_test_entree


'text_prenom devient visible et prend le focus
text_prenom.Visible = True
text_prenom.SetFocus

End Sub





Private Sub text_prenom_LostFocus()

'la premiere lettre du prénom en majuscule les autres en minuscules
'si c'est un prénom composé la première lettre de chaque prénom en maj les autres en min

'déclaration et initialisation du pointeur m
Dim m As Integer
m = 0

'dans la saisie, la première lette à partir de la gauche  est en majuscule
'et à partir de la deuxième lettre en minuscule
text_prenom = UCase(Left(text_prenom, 1)) & LCase(Mid(text_prenom, 2))
'si le pointeur repère un blanc " " un point "." ou un tiret "-"
If InStr(text_prenom, " ") > 0 Or InStr(text_prenom, "-") > 0 Or InStr(text_prenom, ".") > 0 Then
'le pointeur repère ou commence blanc,point ou tiret + le premier caractère alpha suivant
For m = 2 To Len(text_prenom)
'sélectionner le tiret le blanc ou le point
Select Case Mid(text_prenom, m, 1)
'dans le cas ou il s'agit d'un tiret d'un point ou d'un blanc
Case " ", "-", "."
'afficher le second prénom précédé d'un blanc avec le prochain caractère en majuscule et à partir du second en min
text_prenom = Trim(Left(text_prenom, m - 1)) & " " & UCase(Mid(text_prenom, m + 1, 1)) & Mid(text_prenom, m + 2)
'fin de select
End Select
'fin de la boucle m
Next m
'fin de if
End If

'verification du type de caractères saisi: alpha obligatoire
p_test_entree

text_datnais.Visible = True
text_datnais.SetFocus


End Sub

Private Sub text_datnais_LostFocus()
'saisir la date selon un format imposé
'si la saisie de la date n'est pas du format jj/mm/aa alors
   If (text_datnais Like "##/##/####") = False Then
   'message
MsgBox "Format valide = JJ/MM/AAAA "
'remise à blanc et reprise de focus par text_datnais
text_datnais = ""
text_datnais.SetFocus
'sortir
Exit Sub
'fin de if
End If

'text_sexe visible et prise de focus
text_sexe.Visible = True
text_sexe.SetFocus

End Sub


Private Sub text_sexe_LostFocus()
'verification du type de caractères saisi: alpha obligatoire
'déclaration et initialisation du pointeur e
Dim e As Integer
e = 0
'pointer e sur toute la longueur de la saisie à partir du premier caractère
For e = 1 To Len(text_sexe.Text)
'si un ou plusieurs caractères saisis sont différents de A à Z alors
If UCase(Trim(Mid(text_sexe.Text, e, 1))) Like "[!A-Z]" Then
'message
MsgBox "la saisie ne peut comporter que des lettres"
'remise à blanc et reprise du focus de text_sexe
text_sexe.Text = ""
text_sexe.SetFocus
'sortir
Exit Sub
'fin de if
End If
'fin de la boucle for
Next e
'si la longueur de la saisie est différente d'un caractère alors
'If Len(text_sexe) <> 1 Then
If (text_sexe.Text) = "F" Then
If (text_sexe.Text) = "M" Then
Else
MsgBox "saisie incorrecte : M ou F"

Exit Sub
End If
End If
'afficher le caractère en majuscule
text_sexe = UCase(text_sexe.Text)

End Sub

code de modifier
Private Sub cmd_modifier_Click()
rs.Edit
p_transfere_donnees_disque
rs.Update

'afficher la frame 2
Frame2.Visible = True
'toutes les zones textes sont invisibles sauf text_licence
text_nom.Visible = True
text_prenom.Visible = True
text_datnais.Visible = True
text_sexe.Visible = True
p_synchro_ecran

End Sub


j'espère avoir une réponse en tout cas merci d'avance
A voir également:

3 réponses

Utilisateur anonyme
4 mai 2005 à 22:51
Salut,

Je ne comprends pas bien la question ???

Note : Dans ton code, je vois la partie que tu as soulevé dans un autre message, et je vois que tu as conservé la variable [Dum] qui remplace ta variable [text_prenom.Text].

De plus, la constante Alphabet ne necessite pas que tu y ajoute
les minuscules puisque UCase(Trim(Mid(Dum, h, 1))) effectue le test sur la valeur majuscule du caractère.

Pour ce qui est de du mode [Modifier] versus le mode [Ajout], je ne saisie pas bien!!!

Lupin
0
raro Messages postés 140 Date d'inscription vendredi 5 septembre 2003 Statut Membre Dernière intervention 7 avril 2016 37
5 mai 2005 à 00:41
en fait , pour les minuscules je pensais bien faire je te remercie de me le préciser je croyais que ucase ne lirait que les majuscules

en ce qui concerne ajouter vs modifier :

lorsque je clique sur "ajouter" les 5 zones textes sont soumises a des règles de gestion (majuscules, format date , nombre de caractères etc)
le problème c'est que dans" modifier" je ne veux modifier qu'une zone texte, imaginons que j'ai mal saisi le nom,que je l'ai enregistrer dans la base et que je m'apercoive ensuite de mon erreur, je ne veux changer que le nom, or,après avoir changer l'ortohraphe du nom, si je veux valider la msgbox me demande de saisir un prénom et une date de naissance etc je me demande si je n'ai pas interet à faire une frame pour modifier tu comprends mieux là?
0
Utilisateur anonyme
5 mai 2005 à 20:42
Salut,

J'ai tester le code que tu as fourni, et je comprends mieux le problème, le système doit gérer un état distinct entre une modification et un ajout. Or sur la perte de [focus], le systeme recommence toute les validations.

Je recommande de te faire un algorithme du genre d'une séquence qui te donneras toujours l'état du système. La validation d'un champs donné doit être unique au champs en ajout comme en modification, ce n'est que lors de l'écriture qu'il est important de valider tous les champs avant l'opération.

Suis assez clair, la perte du focus d'un champs ne doit valider que le champs en question. Une fonction spécifique qui produit l'écriture des données se chargeras de faire toutes les validations des champs en cause.

Les champs [text box] possède une propriété [Tag] que tu peux utiliser a souhait. Lorsque la routine de ferte de focus d'un champs valide celui-ci tu peux donner la valeur [True] au champs [Tag], et la routine d'écriture valide tous les champs [Tag] nécessaires !


Autre observation, j'ai remodeler cette partie qui suit !

Peux-tu comprendre le changement (pas de [Exit])

'Sub text_Licence2_lostfocus()
'
' 'verification du type de caractères saisi: numérique obligatoire
' 'déclaration et initialisation du pointeur i
' Dim I As Integer
'
' If ((Screen.ActiveControl.Name <> "cmd_annuler") And (Screen.ActiveControl.Name <> "cmd_fermer")) Then
' 'pointer i sur toute la longueur de la saisie à partir du premier caractère
' 'si la zone texte de text_licence ne contient pas 15 caractère alors
' If (Len(Text_Licence) = 15) Then
' For I = 1 To 15
' 'si un ou plusieurs caractères saisis sont différents de 0 à 9 alors
' If UCase(Trim(Mid(Text_Licence.Text, I, 1))) Like "[!0-9]" Then
' MsgBox "la saisie ne peut comporter que des chiffres"
' 'remise à blanc de text_licence
' Text_Licence.Text = ""
' I = (16)
' End If
' Next I
' Else
' MsgBox "la saisie de 15 caractères numérique est obligatoire"
' 'remise à blanc de la zone texte et reprise du focus
' Text_Licence.Text = ""
' End If
' End If
'
'End Sub'

Lupin
0
raro Messages postés 140 Date d'inscription vendredi 5 septembre 2003 Statut Membre Dernière intervention 7 avril 2016 37
6 mai 2005 à 01:52
aurais-tu un exemple concret concernant "TAG" car je t'avoue que je ne sais pas du tout comment l'utiliser:
est-ce le "tag" dans la fenêtre des propriétés ou une fonction?
je t'avoue que j'aimerai en savoir plus car à vouloir trop cadenasser mon appli avec mes règles de gestion je doit reconnaitre que mes faibles connaissances en vb ne me permettent pas de trouver une solution fiable. A l'heure actuelle mon appli fonctionne parfaitement concernant l'envoi de données sur la base à condition de ne pas faire d'erreurs de saisie, d'autant que rien que le numéro de licence d'un nageur contient 15 caractères et un espace et qu'il me faut cette base à la rentrée (septembre) car je suis en train de créer un site internet(www.toutelanat.org) permettant d'accéder à des résultats de compétitions que la ffn ne publie pas. Actuellement je crée ma base sous access ensuite je l'installerai sur mon site en faisant une migration de base , cette base me servira à donner des stats sur les progressions, les records de la saison etc je fait cela surtout pour les petits (poussin/avenirs, benjamins) car la ffn ne publie que les résultats de niveau régional ou national et donc les petits sont exclus
et ne peuvent pas accéder aux résultats .

voila, je t'ai un peu raconter ma vie mais c'est simplement pour te dire que ce projet me tient à coeur et que j'aimerai être prêt pour le début de la saison prochaine à+ et merci encore
0
Utilisateur anonyme
10 mai 2005 à 05:42
Re :

VB en accès sur une bd Access.

LA DONNEE
Les champs [textbox] sont flotants, ou attaché sur un objet, ou attacher par programmation ?

Ex.: posons que les champs sont flotants.

LA RELATION
Créer un ensemble des objets [textbox]
(Donner le même noms à tous les objets [textbox], au deuxième VB demande la création d'un ensemble)


Champs(0) = text_nom
Champs(1) = text_prenom
Champs(2) = text_datedenaissance
Champs(3) = text_sexe
Champs(4) = text_licence


LES COMMANDES

Lecture
Création
Modification

Le mode [Création] est en fait le mode [Modification] plus quelques intructions.
(Pointeur de fin égale pointeur de fin + 1, mise à zéro de tous les champs)


LE CONTROLE

Private Sub Champs_LostFocus(Index As Integer)

Select Case (Index)
Case 0: Text_Nom
Case 1: Text_Prenom
Case 2: Text_DatNais
Case 3: Text_Sexe
Case 4: Text_Licence
Case Else: DoEvents
End Select

End Sub

'Fonction a appeller avant écriture
'Avec vrai ou faux en réponse

Function ValideSaisies() As Boolean

Dim Boucle As Integer

ValideSaisies = True
For Boucle = 0 To 4
Call Champs_LostFocue(Boucle)
If (Champs(Boucle).Tag = False) Then
ValideSaisies = False
Boucle = 5
End If
Next Boucle

End Function


'Fonction appeller par [Text_Nom] & [Text_Pronom]
Function Caracteres(Indice As Integer) As Boolean

Const Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZÜÄËÏÉÈÀÙ-"

'verification du type de caractères saisi: alpha obligatoire
'déclaration et initialisation du pointeur a
Dim Cmpt As Integer
Dim Rep As Long

'pointer a sur toute la longueur de la saisie à partir du premier caractère
For Cmpt = 1 To Len(Champs(Indice))
'si un ou plusieurs caractères saisis sont différents de A à Z alors
Rep = InStr(1, Alphabet, UCase(Mid(Champs(Indice).Text, Cmpt, 1)), vbTextCompare)
If (Rep = 0) Then
'remise à blanc et reprise du focus par text_prenom
Champs(Indice) = ""
Champs(Indice).Tag = False
Cmpt = (Len(Champs(Indice)) + 1)
Caracteres = False
End If
Next h
Caracteres = True

End Function

'Un exemple type de :
Private Sub Text_Nom()

If (Caracteres(0))then
Champs(1).SetFocus
Else
MsgBox "la saisie ne peut comporter que des lettres"
End If

End Sub

Ca donne a peu de choses près cela :-)

Lupin
0