Besoin d'aide pour mon projet en Programmation

Signaler
Messages postés
3
Date d'inscription
jeudi 15 janvier 2009
Statut
Membre
Dernière intervention
20 janvier 2009
-
Messages postés
3
Date d'inscription
jeudi 15 janvier 2009
Statut
Membre
Dernière intervention
20 janvier 2009
-
Bonjour!

Je tiens a dire tout d'abord que je suis nul et débutant en programmation et que c'est de loin mon point fort en Informatique. J'apprécierais vraiment si quelqu'un pouvait m'aider car je suis bloqué dans mon projet depuis 1 semaine environ et ca n'avance pas...

J'ai tenté d'effectuer plusieurs recherches mais je n'ai malheureusement pas trouvé exactement ce que je cherchais. Bref, je dois concevoir un programme qui extrait les données entrées dans un textbox selon le code permanent entré. Un code permanent est un code que les établissements scolaires utilisent pour déterminer le nom de famille, le prénom ainsi que la date de naissance d'un étudiant. Par exemple: SAMJ05128207 pour Julie Samson née le 5 décembre 1982 (les deux derniers chiffres sont tenus compte mais ne sont pas nécessaires pour mon projet).

Pour mon projet, je dois afficher les initiales, la date de naissance, l'âge et le sexe selon le code permanent saisi. J'ai vu plusieurs exemples de calcul d'âge sur votre site mais avec les 4 chiffres pour l'année. Or, dans ce cas, il ne s'agit que de deux chiffres et je sais qu'on doit tenir compte si c'est une année dans les 1900 ou apres 1999 et c'est la que je suis perdu.

De plus, je me suis aussi renseigné et pour déterminer le sexe de l'étudiant(e), s'il s'agit d'une personne de sexe féminin, il faut additioner 50 au mois de la naissance donc dans le cas de l'exemple énuméré ci-haut, ce serait 62. Ca fonctionne sauf que je veux que Visual basic soustrait le 50 dans l'affichage a l'usager car sinon ce serait marqué 62 pour le mois.

Voici l'explication du code permanent selon le ministère de l'éducation local ou j'habite:

positions 1 à 3:, les
trois premiers caractères alphabétiques du nom de l'étudiant. Si la
longueur du nom est inférieure à trois caractères, remplacer les
caractères manquants par la lettre X;, ----
position 4:, le premier caractère alphabétique du prénom de l'étudiant;, ----
positions 5 à 6:, le jour de la date de
naissance de l'étudiant. Dans le cas d'un étudiant né avant 1900, le
jour est augmenté de 31, alors que s'il est né après 1999, le jour est
augmenté de 62;, ----
positions 7 à 8:, le mois de la date de naissance de l'étudiant. Dans le cas d'un étudiant de sexe féminin, il faut additionner 50 à ce mois;, ----
positions 9 à 10:, les deux dernières positions de l'année de la date de naissance de l'étudiant;, ----
position 11:, caractère de contrôle pour
distinguer les cas "jumeaux". Les valeurs sont attribuées
séquentiellement, du numérique (de 0 à 9) à l'alphabétique (de A à Z);, ----
position 12:, chiffre vérificateur.

De plus, je dois m'assurer que les 4 premiers caractères soient des lettres et les 8 autres des chiffres, je n'ai pas réussi non plus a le trouver et que le programme se souvienne des dernières données lorsqu'on exécute le logiciel (je l'ai deja intégré au code)

en 1 mois je dois deja tout comprendre ca et malheureusement, comme vous pouvez le constater, je suis pourri alors j'apprécierais énormément votre aide si c'est possible! Un gros merci a l'avance!!

Voici mon code actuel... probablement bourré de fautes mais bon le voici quand même! :)

Option Explicit

Private Sub cmdOK_Click()
If txtCodePerm.Text = " " Then
    MsgBox "Erreur: Veuillez ne pas utiliser d'espace."
ElseIf UCase(Len(txtCodePerm.Text)) <> 12 Then
        MsgBox "Erreur: Vous devez entrer un total de 12 caractères."
    ElseIf txtCodePerm.Text = " " Then
            MsgBox "Erreur: Veuillez ne pas utiliser d'espace."
Else
If Mid(txtCodePerm.Text, 7, 2) >= 50 Then
lblAff(0).Caption = "Féminin"
Else
lblAff(0).Caption = "Masculin"
End If
lblAff(2).Caption = UCase(Mid(txtCodePerm.Text, 4, 1)) + "." + UCase(Mid(txtCodePerm.Text, 1, 1)) + "."
lblAff(3).Caption = UCase(Mid(txtCodePerm.Text, 5, 2)) + "/" + UCase(Mid(txtCodePerm.Text, 7, 2)) + "/" + UCase(Mid(txtCodePerm.Text, 9, 2))
End If
End Sub

Private Sub cmdQuitter_Click()
Dim lVer As Long 'Résultat de la fonction API (pas utilisé)
lVer = WritePrivateProfileString("Etudiant", "Sexe", lblAff(0).Caption, ".\Etudiants.ini")
lVer = WritePrivateProfileString("Etudiant", "Age", lblAff(1).Caption, ".\Etudiants.ini")
lVer = WritePrivateProfileString("Etudiant", "Initiales", lblAff(2).Caption, ".\Etudiants.ini")
lVer = WritePrivateProfileString("Etudiant", "Date de naissance", lblAff(3).Caption, ".\Etudiants.ini")
End
End Sub

Private Sub cmdVider_Click()
txtCodePerm.Text = ""
lblAff(0).Caption = ""
lblAff(1).Caption = ""
lblAff(2).Caption = ""
lblAff(3).Caption = ""
End Sub

Private Sub Form_Load()
Dim lVer As Long
Dim sBuff As String 'Tampon pour lecture
sBuff = Space(255) 'Pour étirer le tampon
lVer = GetPrivateProfileString("Etudiant", "Sexe", "Inexistant", sBuff, 255, ".\Etudiants.ini")
lblAff(0).Caption = sBuff
lVer = GetPrivateProfileString("Etudiant", "Age", "Inexistant", sBuff, 255, ".\Etudiants.ini")
lblAff(1).Caption = sBuff
lVer = GetPrivateProfileString("Etudiant", "Initiales", "Inexistant", sBuff, 255, ".\Etudiants.ini")
lblAff(2).Caption = sBuff
lVer = GetPrivateProfileString("Etudiant", "Date de naissance", "Inexistant", sBuff, 255, ".\Etudiants.ini")
lblAff(3).Caption = sBuff
End Sub

4 réponses

Messages postés
3
Date d'inscription
jeudi 15 janvier 2009
Statut
Membre
Dernière intervention
20 janvier 2009

Rebonjour!

J'ai oublié de mentionner qu'il ne faut pas que l'utilisateur puisse entrer des caractères spéciaux dans le textbox ou l'on entre le code permanent, qu'il faut qu'il y ait 12 caractères ni plus ni moins et que si l'usager entre en minuscule que ce soit converti en majuscule. Encore une fois, j'apprécierais toute aide qui pourrait m'être apportée! Merci!
Messages postés
1229
Date d'inscription
vendredi 16 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2009
1
Bonjour,

Option Explicit

Private Sub cmdOK_Click()
   If instr(txtCodePerm.Text," ") > 0or len(txtCodePerm.text)<>12 Then
       MsgBox "Veuillez ne pas utiliser d'espace." & vbcrlf & "La taille de la chaine doit-être égale à 12 caractéres",vbcritical,"Gestion Ecole"
   Else
      If Mid(txtCodePerm.Text, 7, 2) >= 50 Then
         lblAff(0).Caption = "Féminin"
      Else
         lblAff(0).Caption = "Masculin"
      End If
'---> Pas vérifié
      lblAff(2).Caption = UCase(Mid(txtCodePerm.Text, 4, 1)) + "." + UCase(Mid(txtCodePerm.Text, 1, 1)) + "."
      lblAff(3).Caption = UCase(Mid(txtCodePerm.Text, 5, 2)) + "/" + UCase(Mid(txtCodePerm.Text, 7, 2)) + "/" + UCase(Mid(txtCodePerm.Text, 9, 2))
   End If
End Sub

Private Sub cmdQuitter_Click()
   Dim lVer As Long 'Résultat de la fonction API (pas utilisé)
   lVer = WritePrivateProfileString("Etudiant", "Sexe", lblAff(0).Caption, ".\Etudiants.ini")
   lVer = WritePrivateProfileString("Etudiant", "Age", lblAff(1).Caption, ".\Etudiants.ini")
   lVer = WritePrivateProfileString("Etudiant", "Initiales", lblAff(2).Caption, ".\Etudiants.ini")
   lVer = WritePrivateProfileString("Etudiant", "Date de naissance", lblAff(3).Caption, ".\Etudiants.ini")
   End
End Sub

Private Sub cmdVider_Click()
   txtCodePerm.Text = ""
   lblAff(0).Caption = ""
   lblAff(1).Caption = ""
   lblAff(2).Caption = ""
   lblAff(3).Caption = ""
End Sub

Private Sub Form_Load()
   Dim lVer As Long
   Dim sBuff As String 'Tampon pour lecture
   sBuff = Space(255) 'Pour étirer le tampon
   lVer = GetPrivateProfileString("Etudiant", "Sexe", "Inexistant", sBuff, 255, ".\Etudiants.ini")
   lblAff(0).Caption = sBuff
   lVer = GetPrivateProfileString("Etudiant", "Age", "Inexistant", sBuff, 255, ".\Etudiants.ini")
   lblAff(1).Caption = sBuff
   lVer = GetPrivateProfileString("Etudiant", "Initiales", "Inexistant", sBuff, 255, ".\Etudiants.ini")
   lblAff(2).Caption = sBuff
   lVer = GetPrivateProfileString("Etudiant", "Date de naissance", "Inexistant", sBuff, 255, ".\Etudiants.ini")
   lblAff(3).Caption = sBuff
End Sub

-----> Quelle est ta fonction API????

Je comprends pas ce que tu veux faire?

S.L.B.
<hr />
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
On ne pourra ici que te donner des idées pour résoudre tes problèmes mais on ne le réalisera pas à ta place.
Alors quelques rappels sur l'utilisation de VB6 :
Au lieu de lancer ton application avec F5, lance-le avec Ctrl-F5 : Il fera une vérification de la syntaxe avant que le programme ne tombe dessus = gain de temps.
Quand quelque chose ne fonctionne pas, il y a le mode "Debug" :
En mode conception, clique si la ligne de code sur laquelle tu veux que le programme s'arrête, puis appuie sur la touche F9 : la ligne change de couleur.
Quand le programme (en run) arrivera sur cette ligne, il passera en pause.
Pendant cette pause, en survolant les noms des variables avec la souris, l'IDE affichera son contenu = très pratique pour savoir si l'instruction précédente s'est bien déroulée.
Ensuite :
- Pour n'avancer que d'une instruction : F8
- Pour continuer le programme normalement : F5

D'autre part, je te conseille de mettre option "Déclaration obligatoire des variables" dans les Options.
C'est chiant puisqu'il faut penser à tout dimensionner, mais à l'usage, cela évite beaucoup de problème de réaction du programme + cela permet d'apprendre l'étendue des variables selon l'emplacement de leur déclaration (Dim, Private, Public : Voir l'aide)

Pour ce qui est de ton code : Il faudra le faire fonctionner en mode debug pour que tu vois ce qui cloche de toi même.
Par exemple :
   If Mid(txtCodePerm.Text, 7, 2) >= 50 Then
Mid renvoie une chaine de caractères, pas des chiffres.
VB6 fait seul la transformation, mais si Mid renvoie quelque chose qui n'est pas traduisible numériquement, c'est l'erreur !
Alors n'hésite pas à faire les traductions de type toi même :
   If Val( Mid(txtCodePerm.Text, 7, 2)) > = 50 Then
NB : Ton exemple de code permanent SAMJ05128207 est faux : Puisque Julie est une fille (jusqu'alors), le mois aurait dû être 62.

Puisque le mois de naissance peut être altéré par cette couche supplémentaire, il faut aussi en tenir compte dans l'affichage de la date de naissance et retrancher 50 si la valeur dépasse 50 (Voir l'aide : fonction Mod)

Pour ce qui est du filtrage de la saisie dans les TextBox, plein de codes sur le site proposent de filtrer les chiffres.
Charge une ou deux sources qui en parlent et analyse comment c'est fait : tu trouveras les idées pour l'adapter à ton projet (Voir dans l'aide : propriété TextBox_Change ou _KeyPress, instruction UCase)

Enfin : Pour la gestion de fichier INI, il est très facile de créer une petite application qui sache lire et écrire dasn un tel fichier : vbfrance est truffé d'exemples de code.
Je pense qu'il faut que manipules et fasses des essais par toi même pour bien comprendre comment les fichiers sont organisés (chapitres, Items) : Comme l'accès aux contenus se fait par des APIs comme GetPrivateProfileString, je te conseille la lecture et les exemples fournis par <ce logiciel> donnant la définition de chaque API courante du système. En anglais, mais bon, si tu n'es pas à l'aise, il existe des tas de sites qui proposent des explications en Fr.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
3
Date d'inscription
jeudi 15 janvier 2009
Statut
Membre
Dernière intervention
20 janvier 2009

Bonjour!

Je vous remercie infiniment pour vos réponses! Je ne m'attends pas a ce que vous fassiez le travail a ma place. En tout respect, je ne m'intéresse pas plus qu'il faut a la programmation, cela ne fait parti que d'un tout dans le programme de formation que je suis qui est  d'ordre général. Une fois le cours terminé, il est certain que je ne referai plus de programmation! Je suis plus un gars de réseau et  de réparation d'ordinateur si vous voyez ce que je veux dire. Mon professeur n'est pas très explicite lorsque je lui demande des explications et cela fait a peine 1 mois que j'ai débuté le cours et plusieurs de mes collègues sont également perdus. J'ai regardé plusieurs de vos exemples mais je n'arrivais pas a l'appliquer dans le contexte de mon programme tout comme ceux de mon professeur.

Par exemple, il ne nous a pas montré la propriété text_change et _keypress ni Val(mid etc... comme l'exemple de Lilith. Je remercie également Jack pour les liens des exemples, je vais les consulter en esperant y arriver!

Pour ce qui est de ma fonction API je veux que mes lblAff(0).caption a lblAff(3).caption en groupe de contrôle puissent être affichés lorsque le programme est exécuté de sorte qu'il affiche les dernières données saisies et lorsqu'il quitte le logiciel (présentement lorsqu'il cliqui sur le bouton Quitter) qu'il puisse écrire les données pour ensuite les lire a l'ouverture du logiciel mais cela fonctionne je l'ai testé.