Do If MsgBox ("Continuer ?", MsgBoxStyle.YesNo) = Then Exit Do End If MsgBox ("Alors on recommence…", MsgBoxStyle.Information) Loop MsgBox ("C’est ici que cela se termine!", MsgBoxStyle.Information) InputBox ( Message [,Titre] [,Defaut] [,xPos] [,yPos] ) Le paramètre optionnel Defaut permet de préciser la saisie par défaut affichée à l’utilisateur : Dim strReponse As String strReponse = InputBox("Entrez votre nom", , "Votre nom") Ce qui produit le résultat ci-contre. Remarquez que du texte est déjà présent dans la zone de saisie et qu’il ne reste à l’utilisateur qu’à le modifier. Les paramètres optionnels xPos et yPos permettent de préciser la position exprimée en pixels à laquelle la boîte de saisie devra s’afficher. La boîte s’affiche au centre de l’écran si aucune valeur pour ces paramètres n’est précisée. Dim dNaissance As System.String '********************************************************************' '* S'assure de récupérer une date valide. *' '********************************************************************' Do dNaissance = InputBox("Entrez votre date de naissance." & d & vbCrLf & vbCrLf & "Spécifiez la date dans le format " d & " yyyy-mm-dd") Loop Until IsDate(dNaissance) | Maintenant, reste à récupérer la réponse de l’utilisateur. La fonction InputBox permet de connaître la réponse de l’utilisateur en récupérant la valeur retournée par cette fonction. Dans l’exemple suivant, l’utilisateur est invité à préciser sa date de naissance et cette information est ultérieurement stockée dans la variable dNaissance. Ensuite, cette variable peut être testée afin d’en assurer la validité. L’exemple suivant recommence la saisie de la date de naissance si l’information saisie par l’utilisateur est invalide : Notez que la fonction InputBox retourne une chaîne vide "" lorsque l’utilisateur appuie sur le bouton Annuler de la boîte de saisie. Autrefois, les chaînes de caractères étaient constituées de caractères codés sur 8 bits regroupés arbitrairement au sein d’une table dite ASCII. Selon cette table, les lettres majuscules occupaient les positions 65 à 90 (A à Z), les lettre minuscules occupaient les positions 97 à 122 (a à z), les nombres occupaient les positions 48 à 57 (0 à 9) et les autres symboles occupaient diverses autres positions. La valeur ordinale des caractères était et est toujours reconnu internationalement pour les caractères de 0 à 127 dont la table d’association est inscrite cidessous. La valeur des caractères supplémentaires étaient alors attribuée selon le système d’exploitation, DOS ou Windows. Figure 5.1 – Table ASCII des caractères standards (0 à 127) Avec les années 90 et l’avènement de l’Internet et l’internationalisation des communications informatiques, la codification ASCII des caractères s’est avérée désuète puisqu’elle ne savait pas intégrer les caractères des différents langages internationaux tels l’arabe et le chinois. Un consortium de fabricants mis alors au point la codification Unicode maintenant reconnue internationalement. Cette nouvelle codification code les caractères sur 16 bits et permet jusqu’à 65536 caractères différents. Visual Basic s’est adapté à cette nouvelle codification et certaines de ses fonctions natives de traitement des chaînes de caractères ont été adaptées afin de traiter cette nouvelle approche de la codification des caractères. Notez donc que l’ensemble des fonctions de traitement des chaînes de caractères de Visual Basic ont été prévues pour traiter des caractères ASCII codés sur 8 bits mais que certaines fonctions prévoient l’utilisation de caractères Unicode codés sur 16 bits. Ces dernières sont explicitement identifiées à l’aide d’un W majuscule (pour Wide Unicode). Fonction | Signification | Exemple | Asc | AscW | Retourne la valeur Wide Unicode du premier caractère de la chaîne de caractères spécifiée. | Dim C As Short C = AscW("A") | Chr | Retourne le caractère correspondant à la Dim C As String valeur ASCII spécifiée. C = Chr(65) | ChrW | Retourne le caractère correspondant à la valeur Unicode spécifiée. | Dim C As String C = ChrW(65) | Filter | Dim C1() As String= Retourne un tableau indexé à zéro contenant {"Allo", planète"} les sous-éléments de la chaîne de caractères Dim C2() As String spécifiée selon un critère de filtre. C2 = Filter(C1, "Allo", True) | Format | Retourne l’expression spécifiée au sein d’un format spécifié. | Dim dtA As Date Dim St As String dtA = Today() St = Format(dtA, "d MMM yyyy") | FormatCurrency Retourne en format monétaire l’expression spécifiée. | Dim stArgent As String stArgent = FormatCurrency(12.2) 'Retourne "12.20" | FormatDateTime | Retourne en format date l’expression spécifiée. | Dim stDate As String stDate = FormatDateTime(Now(), vbLongDate) | FormatNumber | Retourne en format numérique l’expression spécifiée. | Dim P, N As Single N = 5.6 P = FormatNumber(N, 2) 'Retourne 5.60 | FormatPercent | Retourne en pourcentage l’expression spécifiée où 1 vaut 100%. | Dim st As String st= FormatPercent(.85) 'Retourne "85%" | GetChar | Dim St As String Retourne le caractère contenu à la position Dim C As Char St = "Allo" spécifiée au sein d’une chaîne de caractères. C = GetChar(St, 3) 'Retourne "o" | InStr | Retourne un entier spécifiant la position de départ d’une occurrence d’une chaîne de caractères au sein d’une autre chaîne de caractères. | Dim P As Integer Dim St As String St = "Allo" P = InStr(st, "o") | InStrRev | Dim P As Integer Dim St As String St = "Allo" P = InStrRev(st, "o") | Join | Retourne une chaîne de caractères résultant de la concaténation de deux chaînes spécifiées au sein d’un tableau. | Dim Ch() As String= {"Allo","planète"} MsgBox(Join(Ch)) | LCase | Retourne une chaîne de caractères copiée d’une chaîne de caractères spécifiée dont les caractères sont convertis en minuscules. | Dim St1, St2 As String St1 = "Une phrase" St2 = LCase(St1) | Left | Retourne une chaîne de caractères constituée des premiers caractères d’une autre chaîne de caractères selon le nombre de caractères spécifié. | Dim St1, St2 As String St1 = "Une phrase" St2 = Left(St1, 3) | Len | Retourne le nombre de caractères constituants la chaîne de caractères spécifiée. | Dim X As Integer X = Len("Une phrase") | LTrim | Retourne une chaîne de caractères constituée d’une copie de la chaîne de caractères spécifiée sans espaces avant le premier caractère imprimable. | Dim St1, St2 As String St1 = " Une phrase " St2 = LTrim(St1) 'Donne "Une phrase " | LSet | Retourne la chaîne de caractère spécifiée à la longueur spécifiée en ajoutant des espaces si la longueur de la chaîne source est insuffisante. | Dim St1, St2 As String St1 = "Left" St2 = LSet(St1, 10) 'Retourne "Left " | Mid | Retourne la chaîne de caractères contenue à un endroit spécifié au sein d’une autre chaîne de caractères. | Dim St1, St2 As String St1 = "Bonjour" St2 = Mid(St1, 3, 4) 'Donne "njou" | Replace | Retourne une chaîne de caractères copiée d’une autre au sein de laquelle une expression est remplacée par une expression différente. | Dim St1, St2 As String St1 = "Bonjour" St2 = Replace(St1, "o", "?") 'Donne "B?nj?ur" | Right | Dim St1, St2 As String St1 = "Une phrase" St2 = Right(St1, 3) | RSet | Retourne la chaîne de caractère spécifiée à la longueur spécifiée en ajoutant des espaces si la longueur de la chaîne source est insuffisante. | Dim St1, St2 As String St1 = "Right" St2 = RSet(St1, 10) 'Donne " Right" | RTrim | Retourne une chaîne de caractères constituée d’une copie de la chaîne de caractères spécifiée sans espaces après le premier caractère imprimable. | Dim St1, St2 As String St1 = " Une phrase " St2 = RTrim(St1) 'Donne " Une phrase" | Space Retourne une chaîne de caractères consistant au nombre d’espaces spécifiées. Dim St As String St = Space(10) 'Donne " " Split | Retourne un tableau uni-dimensionnnel constitué des mots d’une chaîne de caractères spécifiée séparés par le caractère délimiteur spécifié (par défaut le caractère d’espacement) | Dim St1 As String Dim St2() As String St1 = "Look at these!" St2 = Split(St1) 'Donne ["Look", "at", "these!"] | Str Retourne une chaîne de caractères représentant l’expression spécifiée. Dim St As String St = Str(Today()) StrComp | Retourne -1, 0, ou 1 selon le résultat de la comparaison des chaînes de caractères. Les chaînes sont comparées selon un tri alphanumérique. | Dim St1, St2 As String Dim C As Integer St1 = "ABCD" St2 = "abcd" C =StrComp(S11, St2) 'C donne 0 | StrConv Retourne une chaîne de caractères convertie dans le format spécifié. vbProperCase)Dim St1, St2 As String St2 = StrConv(St1, StrDup | Retourne une chaîne de caractères constituée d’une répétition de n fois le caractère spécifié. | Dim St As String St = StrDup(5, "A") 'Donne "AAAAA" | StrReverse | Retourne une chaîne de caractères résultant de l’inversion de l’ordre de tous les caractères de la chaîne spécifiée. St1 = "Allô" St2 = StrReverse(St1) | Trim | Retourne une chaîne de caractères constituée d’une copie de la chaîne de caractères spécifiée sans espaces avant et après le premier caractère imprimable. | Dim St1, St2 As String St1 = " Une phrase " St2 = Trim(St1) 'Donne "Une phrase" | UCase | Retourne une chaîne de caractères copiée d’une chaîne de caractères spécifiée dont les caractères sont convertis en majuscules. | Dim St1, St2 As String St1 = "Une phrase" St2 = UCase(St1) 'Donne "UNE PHRASE" | Notez que la fonction Left() peut entrer en conflit avec la propriété Left du formulaire si vous utilisez Visual au sein de Windows Forms. Dans ce cas, il peut être nécessaire de spécifier la librairie à laquelle la fonction appartient, en l’occurrence Microsoft.VisualBasic comme le démontre l’exemple suivant : Dim K As Integer Dim MaPhrase As String = "Allô les programmeurs" K = (MaPhrase, 3) Fonctions mathématiques En plus des opérateurs arithmétiques de base, Visual Basic dispose de plusieurs fonctions permettant d’effectuer des calculs mathématiques. À part Fix() et Int(), les fonctions mathématiques sont déclarées au sein de qui doit être inclus au sein du code désirant utiliser ces fonctions à l’aide de l’instruction suivante : Imports Examinons ces fonctions mathématiques. Fonction | Signification | Exemple | Abs Retourne la valeur absolue de l’expression numérique (sans le signe). Abs(-2.5) ‘Retourne 2.5 Atan | Retourne l’arc tangente en radians d’un angle exprimé par le ratio de deux côtés d’un triangle rectangle. Le ratio est la longueur du côté opposé à l’angle divisé par la longueur du côté adjacent à l’angle. Pour convertir les radians en degrés, multipliez les radians par 180/pi. | Dim PI As Double PI = 4 * Atan(1) Cos Le ratio est la longueur du côté adjacent à l’angle divisé par la longueur de l’hypothénuse. Pour Dim Sect As Double Sect = 1 / Cos(1.3) convertir les radians en degrés, multipliez les radians par 180/pi. Exp | Retourne la valeur de ex pour un x donné. | Exp(1) ‘Retourne 2.718282 | Fix | Retourne la partie entière d’un nombre sans les décimales et sans arrondissement. | Fix(-5.7) ‘Retourne –5 | Int | Retourne la partie entière d’un nombre sans les décimales après arrondissement. | Int(-5.7) ‘Retourne –6 | Log | Retourne le logarithme naturel d’un nombre. Le logarithme naturel, ou népérien, est le logarithme sur la base e valant approximativement 2.718282. | Lg10 = Log(x)/Log(10#) ‘Calcule le logarithme de 10 | Round | Retourne un nombre aléatoire situé entre 0 inclusivement et 1 exclusivement. | (Max – Min + 1) * Round() + Min | Retourne une valeur indiquant le signe du nombre spécifié. Cette valeur vaut –1 lorsque le nombre Sign(-3)Sign(8) ‘Retourne 1‘Retourne –1 Sign est négatif, 1 lorsque le nombre est positif et 0 lorsque le nombre est nul. Sign(0) ‘Retourne 0 Sin | Retourne le sinus en radians d’un angle exprimé par le ratio de deux côtés d’un triangle rectangle. Le ratio est la longueur du côté opposé à l’angle divisé par la longueur de l’hypothénuse. Pour convertir les radians en degrés, multipliez les radians par 180/pi. | Dim CoSec As Double CoSec = 1 / Sin(1.3) | Sqrt Retourne la racine carrée d’un nombre. Sqrt(25) ‘ Retourne 5 Tan | Dim CoTan As Double CoTan = 1 / Tan(1.3) | Plusieurs fonctions mathématiques ne sont pas intrinsèques à Visual telles le calcul de la sécante ou le calcul d’un sinus hyperbolique. Cependant, ces fonctions mathématiques peuvent être connues à l’aide des fonctions mathématiques intrinsèques à Visual Basic : Fonction | Équivalent | Cosécante | Csc(x) | 1 / Sin(x) | Cotangente | Ctan(x) | 1 / Tan(x) | Sécante | Sec(x) | 1 / Cos(x) | Sinus inverse | Asin(x) | Atan(x / Sqrt(-x * x + 1)) | Cosinus inverse | Acos(x) | Atan(-x / Sqrt(-x * x + 1)) + 2 * Atan(1) | Sécante inverse | Asec(x) | 2 * Atan(1) – Atan(Sgn(x)/Sqrt(x * x – 1)) | Cosécante inverse | Acsc(x) | Atan(Sgn(x) / Sqrt(x * x – 1)) | Cotangente inverse | Acot(x) | 2 * Atan(1) – Atan(x) | Sinus hyperbole | Sinh(x) | (Exp(x) – Exp(-x)) / 2 | Cosinus hyperbole | Cosh(x) | (Exp(x) + Exp(-x)) / 2 | Tangente hyperbole | Tanh(x) | (Exp(x) – Exp(-x)) / (Exp(x) + Exp(-x)) | Sécante hyperbole | Sech(x) | 2 / (Exp(x) + Exp(-x)) | Cosécante hyperbole | Csch(x) | 2 / (Exp(x) - Exp(-x)) | Cotangente hyperbole | Coth(x) | (Exp(x) + Exp(-x)) / (Exp(x) - Exp(-x)) | Fonctions financières Visual Basic dispose de plusieurs fonctions permettant d’effectuer des calculs pour des fins financières comme le calcul de taux d’intérêts et d’annuités. Voici la liste de ces fonctions financières : Fonction | Signification | Exemple | DDB | Retourne l’amortissement d’un bien pour une période déterminée selon la méthode « double-declining balance ». | Dim X As Double X = DDB(cout, val_resid, duree, per) | FV | Retourne la valeur future d’une annuité selon des versements périodiques et un taux d’intérêts constant. | Dim X As Double X = FV(taux, npmt, pmt, va, type) | IPmt | Dim X As Double X = IPmt(APR / 12, Per, TotPmts, -PVal, Fval, PayType) | IRR | Retourne une valeur spécifiant le taux de rendement interne d'une série de mouvements de trésorerie périodiques. | Dim X As Double X = IRR(Values, Guess) * 100 | MIRR | Retourne une valeur spécifiant le taux de rendement interne modifié d'une série de mouvements de trésorerie périodiques. | Dim X As Double X = MIRR(Values, LoanAPR, InvAPR) | NPer | Retourne une valeur spécifiant le nombre d'échéances d'une annuité basée sur des versements constants et périodiques et sur un taux d'intérêt fixe. | Dim X As Double X = NPer(APR / 12, -Payment, PVal, FVal, PayType) | NPV | Retourne une valeur spécifiant la valeur nette actuelle d'un investissement, calculée en fonction d'une série de mouvements de trésorerie périodiques et d'un taux d'escompte. | Dim X As Double X = NPV(RetRate, valeurs) | PPmt | Retourne une valeur spécifiant le remboursement du capital, pour une échéance donnée, d'une annuité basée sur des versements constants et périodiques et sur un taux d'intérêt fixe. | Dim X As Double X = PPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType) | PV | Retourne une valeur spécifiant le montant actuel d'une annuité basée sur des échéances futures constantes et périodiques, et sur un taux d'intérêt fixe. | Dim X As Double X = PV(APR, TotPmts, -YrIncome, FVal, PayType) | Rate | Retourne une valeur spécifiant le taux d'intérêt par échéance pour une annuité | Dim X As Double X = (Rate(TotPmts, -Payment, PVal, FVal, PayType, Guess) * 12) * 100 | SLN | Dim X As Double Retourne une valeur spécifiant l'amortissement X = SLN(InitCost, linéaire d'un bien sur une période donnée. SalvageVal, LifeTime) | SYD | Dim X As Double X = SYD(InitCost, SlvgVal, LifeTime, DepYear) | Exemple d’une application financière L’exemple suivant met en œuvre la conception d’une interface utilisateur à l’aide des contrôles de base de Visual Basic, l’utilisation des fonctions de traitement des chaînes de caractères et l’utilisation de fonctions financières. L’exemple suivant est constitué d’une application financière permettant de connaître les montants en capital et en intérêts payés sur un emprunt ou sur un prêt selon un taux d’intérêts, un nombre de mensualités et un montant des mensualités précisés par l’utilisateur. Les informations spécifiées par l’utilisateur seront constamment validées afin que celui-ci ne puisse inscrire que des valeurs valides. De plus, les calculs s’effectueront à mesure que l’utilisateur modifiera les valeurs contenues au sein des boîtes de texte. Figure 5.2 – Interface utilisateur de l’application financière La section gauche de l’interface utilisateur est composée de trois boîtes de texte (TextBox) et d’autant d’étiquettes (Label) permettant d’identifier à l’utilisateur l’utilité de chacune des boîtes de texte. Composant | Description | TxtTaux | Boîte de texte permettant la saisie du taux d’intérêt. | TxtNbr | Boîte de texte permettant la saisie du nombre de mensualités. | TxtMontant | Boîte de texte permettant la saisie du montant versé mensuellement. | La section droite de l’interface utilisateur est quant à elle composée de six étiquettes (Label) regroupés par paire et permettant d’afficher les résultats des calculs de l’application. Les étiquettes au sein de lesquelles les valeurs seront affichées sont identifiées comme suit au sein du code de l’exemple : Composant | Description | LblCapital | Étiquette affichant le total de capital payé. | LblInterets | LblTotal | Étiquette affichant le montant total payé pour ce prêt. | D’abord, initialisez les propriétés Text de chacun des composants afin qu’ils possèdent les bonnes valeurs au démarrage de l’application. Ensuite, créez la procédure Calculer()comme suit : Imports Public Class Form1 Inherits Region " Windows Form Designer generated code " Private Sub Calculer() Dim Taux As Double, Montant As Double Dim Total As Double, Nbr As Integer End Sub | La fonction Calculer() effectuera l’ensemble des calculs et des mises à jour de l’affichage à l’utilisateur. Quatre variables sont déclarées afin de stocker les informations saisies par l’utilisateur. Cependant, ces informations peuvent contenir des caractères indésirables tels les symboles $ et % que nous devrons supprimer afin de rendre les informations utilisables. Nous pouvons utiliser la fonction Replace() afin de remplacer les caractères indésirables par des chaînes vides : Nbr = CInt() Montant = CDbl(Replace(Replace(,"$", ""), ".", ",")) Taux = CDbl(Replace(Replace(, "%", ""), ".", ",")) La fonction financière FV() nous permettra ensuite de connaître le montant total d’un prêt : Total = Abs(FV(Taux / 100 / Nbr, Nbr, Montant)) Les valeurs trouvées peuvent être affichées à l’utilisateur. La fonction Format() nous permettra ici de mettre en forme le texte afin qu’il s’affiche en format monétaire ou en pourcentage : = Format(Total, "0.00") & "$" = Format(Montant * Nbr, "0.00") & "$" = Format(Total - (Montant * Nbr), "0.00") & "$" Finalement, on pourrait remettre en forme le texte saisie par l’utilisateur si jamais celui-ci avait supprimé les caractères $ et %. = Format(Taux, "0.0") & "%" = Format(Montant, "0.00") & "$" Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Calculer() End Sub Private Sub txtTaux_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtTaux.Validating Calculer() End Sub | Voici donc le code complet de l’application financière : Imports Public Class Form1 Inherits Region " Windows Form Designer generated code " Private Sub Calculer() Dim Taux As Double, Montant As Double Dim Total As Double, Nbr As Integer '******* Assure la validité des valeurs ************' Nbr = CInt() Montant = CDbl(Replace(Replace(,"$", ""), ".", ",")) Taux = CDbl(Replace(Replace(, "%", ""), ".", ",")) '*********** Calcule les valeurs *******************' Total = FV(Taux / 100 / Nbr, Nbr, Montant) * -1 '******* Affiche les valeurs à l’utilisateur *********' = Format(Total, "0.00") & "$" = Format(Montant * Nbr, "0.00") & "$" = Format(Total - (Montant * Nbr), "0.00") & "$" = Format(Taux, "0.0") & "%" = Format(Montant, "0.00") & "$" End Sub | Le code se poursuit sur la page suivante Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Calculer() End Sub Private Sub txtTaux_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtTaux.Validating Calculer() End Sub Private Sub txtMontant_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMontant.Validating Calculer() End Sub Private Sub txtNbr_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Calculer() End Sub End Class | Testez votre application de calcul des taux d’intérêts en sélectionnant le menu Déboguer / Démarrer ou en appuyant simplement sur la touche F5 ou CTRL+F5 selon la configuration de votre clavier. Fonctions de traitement des dates et de l’heure Visual Basic dispose d’une pluralité de fonctions permettant d’effectuer des calculs et divers traitements sur les dates. Les fonctions suivantes sont intrinsèques au langage et ne nécessitent l’inclusion d’aucune référence. Examinons ces fonctions de traitement des dates et de l’heure. Fonction | Signification | Exemple | DateAdd | Retourne une date résultant de l’addition d’un nombre de jour, de mois ou d’années spécifié. La fonction soustrait si la valeur spécifiée est négative. | Dim dt1, dt2 As Date dt1 = Today() dt2 = DateAdd("d",15, dt1) | DateDiff | Retourne le nombre de jours, de mois ou d’années espaçant deux dates spécifiées. Les constantes utilisées sont "d" = jours, "m"= mois, "yyyy" = années, "h" = heures, "n" = minutes et "s" = secondes. | Dim dDiff As Date dDiff = DateDiff("m", dNaissance, Today()) | DatePart | Retourne une partie spécifique de la date spécifiée. Peut être le jour, le mois, etc. | Dim nMois As Integer Dim dA As Date dA = Today() nMois =DatePart(dA, "m") 'Retourne le mois | DateSerial | Retourne une date en format Date à partir d’informations en format sériel. | MsgBox(DateSerial(1975, 11, 3)) 'Donne "3 novembre 1975" | DateString | Retourne la date courante en format String selon l’heure système. | MsgBox(DateString) | DateValue | Retourne une date en format Date à partir d’informations spécifiées en format String. | Dim dtA As Date dtA = DateValue("1/31/2000") | Day | Retourne le numéro du jour contenu au sein d’une expression spécifiée. | Hour | Retourne les heures contenues au sein d’une expression spécifiée. | Dim nHr As Integer nHr=Hour(TimeOfDay()) | Minute | Retourne les minutes contenues au sein d’une expression spécifiée. | Dim nMin As Integer nMin=Minute(TimeOfDay()) | Month | Retourne le numéro du mois (entre 1 et 12) contenu au sein d’une expression spécifiée. | Dim nMois As Integer nMois = Month(Today()) | MonthName | Dim nMois As Integer Retourne le nom du mois correspondant au nMois = Month(Today()) numéro de mois spécifié. MsgBox "Nous sommes au mois "& MonthName(nMois) | Now | Retourne la date du jour courant et l’heure courante selon les date et heure systèmes. | MsgBox Now() | Second | Retourne les secondes contenues au sein Dim nSec As Integer d’une expression spécifiée. nSec=Second(TimeOfDay()) | TimeOfDay | Retourne l’heure courante selon l’heure système. | MsgBox(TimeOfDay) | TimeSerial | Retourne une date en format Date à partir MsgBox(TimeSerial( 23, 75, 0)) d’informations en format sériel. '"1/2/0001 12:15:00 AM" | TimeString | Retourne l’heure courante en format String selon l’heure système. | MsgBox(TimeString) | TimeValue | Retourne une date en format Date à partir d’informations spécifiées en format String. | Dim dtA As Date dtA = TimeValue("4:35:17 PM") | Today | Retourne la date du jour courant selon la date système. | MsgBox Today() | WeekDay | Retourne le numéro du jour de la semaine (entre 1 et 7) contenu au sein d’une expression date spécifiée. | Dim nJour As Integer nJour = WeekDay(Today()) | WeekDayName | Retourne le nom du jour de la semaine correspondant au numéro de jour spécifié. | Year Retourne l’année contenu au sein d’une expression date spécifiée. | Dim nAn As Integer nAn = Year(Today()) | Exemple d’une application manipulant les dates L’exemple suivant met en œuvre la conception d’un interface utilisateur à l’aide des contrôles de base de Visual Basic et l’utilisation des fonctions de traitement des dates. L’exemple suivant est constitué d’une application permettant de connaître l’âge exact d’une personne selon sa date de naissance. Les informations spécifiées par l’utilisateur seront saisies par un contrôle DateTimePicker assurant que celui-ci ne puisse inscrire que des dates valides. Le calcul s’effectuera lorsque l’utilisateur appuiera sur le bouton Calculer l’âge. Figure 5.3 – Interface utilisateur de l’application Outre les étiquettes permettant d’identifier les contrôles, l’interface utilisateur est composée d’un contrôle DateTimePicker et d’un bouton. Composant | Description | dtNaissance | Contrôle permettant la saisie de la date de naissance. | btnCalculerAge | Bouton permettant de lancer le calcul de l’âge de la personne. | D’abord, initialisez les propriétés de chacun des composants afin qu’ils possèdent les bonnes valeurs au démarrage de l’application. Ensuite, codez l’événement Click du bouton comme suit: Private Sub btnCalculerAge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculerAge.Click Dim dNaissance As Date Dim nDiff, nJours As Long Dim StrDate As String '**** Stocke la date de naissance dans la variable *******' dNaissance = dtNaissance.Value '*********** Calcule le nombre de mois restants *********' nDiff = DateDiff(DateInterval.Month, dNaissance, Today()) '********** Calcule le nombre de jours restants *********' nJours = DateDiff("d", DateAdd(DateInterval.Month, nDiff, dNaissance), Today()) & Microsoft.VisualBasic.Day(dNaissance) & " " & MonthName(Month(dNaissance)) & " " & Year(dNaissance) MsgBox("Si vous êtes né(e) " & StrDate & " vous avez " & nDiff \ 12 & " ans, " & nDiff Mod 12 & " mois et " & nJours & " jours.", MsgBoxStyle.Information) End Sub | Fonctions de traitement des fichiers et des répertoires Visual Basic dispose d’une pluralité de fonctions permettant d’effectuer différentes tâches sur les fichiers et les répertoires (modifier, renommer, créer, supprimer, etc). Les fonctions suivantes sont intrinsèques au langage et ne nécessitent l’inclusion d’aucune référence. Examinons ces fonctions de traitement des fichiers et des répertoires. Fonction | Signification | Exemple | ChDir | Change le répertoire de travail courant. | ChDir("c:\winnt") | ChDrive | Change le lecteur de travail courant. | ChDir("e") | CurDir | Retourne le chemin du répertoire de travail courant. | Dim St As String St = CurDir() | Dir | Retourne le nom d’un fichier, d’un répertoire ou d’un lecteur. La fonction retourne une chaîne vide "" si le fichier ou le répertoire n’existe pas. | Dim StFile As String StFile = Dir("c:\Winnt\") 'Retourne "" | FileCopy | Copie le fichier spécifié en un nouveau fichier au nom spécifié. | FileCopy("c:\", "d:\") | FileDateTime | Retourne les informations de date de création et de modification d’un fichier. | FileLen | Retourne le nombre d’octets occupés par le fichier spécifié. | Dim Lng As Long Lng = FileLen("c:\") | GetAttr | Retourne les attributs (caché, système, etc) d’un fichier ou d’un répertoire. | Dim N As Long N = GetAttr("c:\") If N And vbHidden Then 'Un fichier caché! End If | Kill | Procède à la suppression du fichier spécifié. | Kill ("c:\") | Procède à la création du répertoire spécifié. | MkDir("c:\dossier") | Rename | Renomme le répertoire ou le fichier spécifié. | Rename("c:\dossier1", "c:\dossier2") | RmDir | Procède à la suppression du répertoire spécifié. | RmDir("c:\dossier") | SetAttr | Spécifie les attributs (caché, système, etc) d’un fichier ou d’un répertoire. | SetAttr("c:\", vbHidden) 'Cache le fichier | Les fonctions Dir, Constante | Description | vbNormal | Ne possède aucun attribut particulier. | vbReadOnly | Est en lecture seulement. | vbHidden | Est un fichier ou un dossier caché. | vbSystem | Est un fichier ou un dossier système. | vbDirectory | Est un dossier. | vbArchive | Est un fichier ou un dossier archivé. | vbAlias | Est un alias (raccourci) vers un autre fichier ou dossier. | GetAttr et SetAttr utilisent les constantes suivantes afin de connaître les attributs d’un fichier ou d’un dossier. Voyez l’exemple complet suivant afin de mieux comprendre l’utilisation de ces constantes. Exemple d’une application traitant les fichiers L’exemple suivant met en œuvre la conception d’une interface utilisateur à l’aide des contrôles de base et l’utilisation de fonctions de traitement des fichiers et des répertoires. L’exemple suivant est constitué d’une application permettant de connaître les attributs d’un fichier ainsi que la date et l’heure de création ou dernière modification de ce fichier. Un traitement spécial est appliqué si le fichier spécifié par l’utilisateur n’existe pas. Figure 5.4 – Interface utilisateur de l’application L’interface utilisateur est composée d’une zone de texte (TextBox) et d’un bouton permettant de parcourir les répertoires afin de sélectionner un fichier. Composant | Description | txtFichier | btnParcourir | Bouton activant une boîte de dialogue commun permettant de parcourir les dossiers à la recherche d’un fichier. Les contrôles de boîte de dialogue commun sera exploré en profondeur au chapitre 6. | Trois cases à cocher permettent d’afficher les attributs du fichier sélectionné par l’utilisateur et un étiquette (Label) permet d’afficher la date de création ou de dernière modification du fichier. lblDateCreation Étiquette affichant la date de création ou de dernière modification du fichier. lblAvertissement | Étiquette affiché à l’utilisateur lorsque le fichier n’existe pas. | chkHidden Case à cocher affichant si le fichier spécifié est caché. chkSysten | Case à cocher affichant si le fichier spécifié est un fichier système. | chkReadOnly Case à cocher affichant si le fichier spécifié est en lecture seule. Lorsque l’utilisateur spécifie un nom de fichier dans la zone de texte, le contrôle soulève l’événement TextChanged. Lorsque l’utilisateur utilise le bouton Parcourir pour sélectionner un fichier, le chemin de ce dernier est stocké dans la zone de texte ce qui a pour effet de changer le contenu de celle-ci et de soulever également l’événement TextChanged. Nous utiliserons donc cet événement afin de récupérer les attributs du fichier sélectionné par l’utilisateur. La première chose à faire est de désactiver le groupe des contrôles affichant les attributs du fichier si ce dernier n’existe pas. En effet, le fait de lire les attributs d’un fichier inexistant provoquerait une erreur. Ainsi, nous utiliserons la fonction Dir() qui retourne une chaîne vide si le fichier spécifié n’existe pas. Private SubtxtFichier_TextChanged(ByVal sender As Object, '******* Affiche si le fichier existe ou non ***************' LblAvertissement.Visible = Dir() = "" GroupBox1.Enabled = Not LblAvertissement.Visible | Ensuite, notre code récupérera les attributs du fichier à l’aide de la fonction GetAttr() seulement si le fichier spécifié existe. La fonction GetAttr() vous retourne l’ensemble des valeurs numériques représentant les attributs du fichier au sein d’une même valeur. Vous pouvez connaître si le fichier possédait un attribut particulier en testant cette valeur à l’aide de l’opérateur And. L’exemple suivant permet de savoir si un fichier est en lecture seule : If GetAttr("c:\") And vbReadOnly Then ‘Le fichier est en lecture seule End If Finalement, nous utiliserons la fonction FileDateTime() afin de connaître la date de création ou de dernière modification du fichier. '************* Affiche les attributs du fichier ************' Dim nAttributs As Long If Dir() <> "" Then nAttributs = GetAttr() chkHidden.Checked = nAttributs And vbHidden chkSystem.Checked = nAttributs And vbSystem chkReadOnly.Checked = nAttributs And vbReadOnly '********** Date de création du fichier ********' = FileDateTime() End If End Sub | Voici donc le code complet de l’application de traitement des fichiers : Public Class FrmFichiers Inherits Region " Windows Form Designer generated code " Private Sub btnParcourir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnParcourir.Click '******* Permet à l'utilisateur de choisir un fichier ******' If OpenDialog.ShowDialog() = Then = OpenDialog.FileName End If End Sub ByVal e As System.EventArgs) Handles txtFichier.TextChanged '********** Affiche si le fichier existe ou non ***********' LblAvertissement.Visible = Dir() = "" GroupBox1.Enabled = Not LblAvertissement.Visible '************ Affiche les attributs du fichier ************' Dim nAttributs As Long If Dir() <> "" Then nAttributs = GetAttr() chkHidden.Checked = nAttributs And vbHidden chkSystem.Checked = nAttributs And vbSystem chkReadOnly.Checked = nAttributs And vbReadOnly '********** Date de création du fichier ********' = FileDateTime() End If End Sub End Class | Testez votre application de traitement des fichiers en sélectionnant le menu Déboguer ?Démarrer ou en appuyant simplement sur la touche F5 ou CTRL+F5 selon la configuration de votre clavier. Fonctions de lecture et d’écriture des fichiers Les fonctions suivantes ne permettent pas de traiter différentes informations des fichiers (date de création, attributs, etc.) mais permettent plutôt de procéder à l’ouverture de fichiers, et d’y effectuer des opérations de lecture ou d’écriture. La plateforme .NET prévoit des fonctionnalités équivalentes accessibles par l’ensemble des langages et sont regroupées au sein de l’espace nominé . Fonction | Signification | Exemple | EOF | Retourne True lorsque la fin d’un fichier ouvert en mode Random ou Input est atteinte. | fch = "c:\" md = OpenMode.Input FileOpen(1, fch, md) Do Until EOF(1) txt = LineInput(1) Loop FileClose(1) | FileClose | Ferme le fichier spécifié. Si aucun fichier n’est précisé, tous les fichiers couramment ouverts sont fermés. | fch = "c:\" md = OpenMode.Input FileOpen(1, fch, md) FileClose(1) Lit les données d’un fichier ouvert et les fch = "c:\" FileGet retourne au sein de la variable spécifiée. Valide que lorsque le fichier est ouvert md = OpenMode.Binary FileOpen(1, fch, md) en mode Random ou Binary. FileGet(1, S) FileClose(1) FileGetObject | Lit les données d’un fichier ouvert et les retourne au sein de la variable spécifiée. Valide que lorsque le fichier est ouvert en mode Random ou Binary. Cette fonction est plus typée que FileGet et permet donc d’éviter toute ambiguïté de types lors de la compilation. | Dim S As New String(" ", 9) fch = "c:\" md = OpenMode.Binary FileOpen(1, fch, md) FileGetObject(1, S) FileClose(1) | Retourne les dimensions en octets du fch = "c:\" FileLen fichier spécifié. Le fichier est spécifié à Longueur = FileLen(fch) l’aide de son chemin et de son nom. FileOpen | Procède à l’ouverture du fichier spécifié dans le mode spécifié. Voyez plus loin les différents modes d’ouverture de fichiers. | fch = "c:\" md = OpenMode.Input FileOpen(1, fch, md) FileClose(1) | Dim S As String = "Allo" Écrit les données de la variable spécifiée fch = "c:\" FilePut au sein d’un fichier ouvert. Valide que lorsque le fichier est ouvert en mode md = OpenMode.Binary FileOpen(1, fch, md) Random ou Binary. FilePut(1, S) FileClose(1) FilePutObject | Écrit les données de la variable spécifiée au sein d’un fichier ouvert. Valide que lorsque le fichier est ouvert en mode Random ou Binary. Cette fonction est plus typée que FilePut et permet donc d’éviter toute ambiguïté de types lors de la compilation. | Dim S As String = "Allo" fch = "c:\" md = OpenMode.Binary FileOpen(1, fch, md) FileClose(1) | Fixe la largeur d’une ligne d’un fichier Dim F As Integer F = FreeFile() FileWidth largeur maximale n’est imposée lorsque ouvert à l’aide de FileOpen. Aucune FileOpen(F, fch, md) FileWidth(F, 5) la valeur spécifiée vaut zéro. FileClose(F) FreeFile | Retourne un identificateur numérique de fichier disponible. Utilisez cette méthode afin d’obtenir un numéro identifiant de manière unique le fichier à ouvrir. | Dim F As Integer F = FreeFile() FileOpen(F, fch, md) FileClose(F) | Lit le nombre de caractères spécifié d’un fichier ouvert et les retourne au sein de Dim C As Char FileOpen(1, fch, md) Do While Not EOF(1) InputString la chaîne de caractères spécifiée. Valide C = InputString(1, 1) que lorsque le fichier est ouvert en mode Loop Input ou Binary. FileClose(1) LineInput | Lit une ligne d’un fichier ouvert et la retourne au sein de la chaîne de caractères spécifiée. Valide que lorsque le fichier est ouvert en mode Input ou Binary. | Dim Txt As String FileOpen(1, fch, md) Do Until EOF(1) Txt = LineInput(1) Loop FileClose(1) | Retourne un entier long contenant la Do While Not EOF(1) Loc position courant au sein d’un fichier Console.WriteLine(Loc(1)) ouvert en lecture ou en écriture. Loop Lock | Verrouille un fichier ouvert afin que les autres processus ne puisse y accéder. | FileOpen(1, fch, md) Lock(1) FilePut(1, S) FileClose(1) | LOF | fch = "c:\" md = OpenMode.Input FileOpen(1, fch, md) Longueur = LOF(1) FileClose(1) | Print | Écrit une ligne dans un fichier ouvert. Valide que lorsque le fichier est ouvert en mode Input ou Binary. | Dim Txt As String = "Allô" FileOpen(1, fch, md) Print(1, Txt) FileClose(1) | PrintLine | Écrit une ligne dans un fichier ouvert. Ajoute automatiquement un saut de ligne après la ligne écrite. Valide que lorsque le fichier est ouvert en mode Input ou Binary. | Dim Txt As String = "Allô" FileOpen(1, fch, md) PrintLine(1, Txt) FileClose(1) | Reset | Ferme l’ensemble des fichiers couramment ouverts. Possède la même utilité que FileClose lorsqu’aucun paramètre ne lui est spécifié. | fch = "c:\" md = OpenMode.Input FileOpen(1, fch, md) Reset() | Seek | Retourne ou détermine la position au sein d’un fichier ouvert en lecture ou en écriture. | FileOpen(1, fch, md) Seek(1, 72) FileClose(1) | Unlock | Déverrouille un fichier ouvert et préalablement verrouillé à l’aide de la fonction Lock et permet aux autres processus d’y accéder. | FileOpen(1, fch, md) Lock(1) FilePut(1, S) Unlock(1) FileClose(1) | Fonctions d’accès à la base de registre La base de registre est une base de données permettant de centraliser les différentes configurations des applications, des préférences utilisateurs, des configurations matérielles, etc. Les informations stockées dans la base de registre sont conservées entre les différentes exécutions du système d’exploitation. La base de registre vous permet donc de stocker des informations concernant vos applications et de les récupérer au prochain démarrage de votre application. Visual Basic prévoit quatre fonctions natives d’accès à la base de registres. Ces fonctions permettent de stocker et récupérer des informations au sein de la base de registres au informations que votre application stockera au sein de la base de registre seront conséquemment utilisables séparément par chacun des utilisateurs. Si vous désirez lire, écrire ou supprimer des informations stockées au sein d’autres clés que celle utilisée nativement par le langage Visual Basic, vous devrez utiliser les fonctions .NET prévues au sein de l’espace nominé (namespace) System.Win32. Fonction | Signification | Exemple | DeleteSetting | Provoque la suppression de la clé spécifiée. | DeleteSetting("MonApp", Cfg") | GetSetting | Retourne la valeur contenue au sein de la base de registre pour la clé spécifiée. | Dim St As String St = GetSetting("MonApp", "Cfg", "Valeur", "0") | GetAllSettings | Retourne la valeur contenue au sein de la base de registre pour la clé spécifiée. | Dim St(,) As String St =GetAllSettings("MonApp", "Cfg") | SaveSetting | Spécifie la valeur à inscrire au sein de la base de registre pour la clé spécifiée. La clé est créée si celleci n’existe pas. | SaveSetting("MonApp", "Cfg", "Valeur", "0") | Exemple d’une application utilisant la base de registre L’exemple suivant met en œuvre la conception d’un interface utilisateur à l’aide des contrôles de base de Visual Basic, l’utilisation des événements du formulaire et l’utilisation de fonctions d’accès à la base de registre. L’exemple suivant est constitué d’une application permettant de conserver les préférences de l’utilisateur au sein de la base de registre pour d’ultérieures utilisations. Figure 5.5 – Interface utilisateur de l’application Les nom, prénom et dimensions du formulaire seront conservés entre chacune des utilisations du logiciel afin d’être rappelés au démarrage de celui-ci. Composant | Description | TxtNom | Boîte de texte permettant la saisie du nom de l’utilisateur. | TxtPrenom | Boîte de texte permettant la saisie du prénom de l’utilisateur. | Finalement, un bouton permet à l’utilisateur de quitter l’application. Composant | Description | BtnQuitter | Bouton permettant de mettre fin à l’application. | D’abord, localisez l’événement Closing du formulaire, événement soulevé lorsque le formulaire est fermé. Ainsi, lorsque l’utilisateur quittera l’application, notre code en profitera pour enregistrer les préférences de l’utilisateur au sein de la base de registre. Inscrivez votre code avant celui automatiquement généré par l’assistant de Visual comme suit : Private SubFrmRegistre_Closing( ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.ClosingOverloads '**** Inscrit les informations dans la base de registre *****' SaveSetting("", "Config", "Nom", ) SaveSetting("", "Config", "Prenom", ) SaveSetting("", "Config", "Hauteur", Me.Height) SaveSetting("", "Config", "Largeur", Me.Width) End Sub | Maintenant , il suffit de récupérer les enregistrements au démarrage de l’application. La fonction GetSetting nous permet de lire au sein de la base de registre. Par contre, il est important de porter attention de lire les mêmes clés que celles qui ont été précédemment inscrites. Private Sub FrmRegistre_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles '****** Charge les informations de la base de registre *****' = GetSetting("", "Config", "Nom", "") = GetSetting("", "Config", "Prenom", "") Me.Width = CLng(GetSetting("", "Config", "Largeur", Me.Width)) "Hauteur", Me.Height)) End Sub | Finalement, nous pouvons rendre notre application plus fonctionnelle en permettant à l’utilisateur de quitter l’application en cliquant sur le bouton Quitter. L’objet Form possède la méthode Dispose() qui permet de forcer la fermeture du formulaire. Lorsque l’ensemble des formulaires sont fermés, l’application est automatiquement stoppée. Vous pouvez également utiliser la méthode afin de quitter l’application si les permissions de l’utilisateur en cours le permettent. Private Sub btnQuitter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnQuitter.Click () End Sub | Testez votre application d’accès à la base de registres en sélectionnant le menu Déboguer ?Démarrer ou en appuyant simplement sur la touche F5 ou CTRL+F5 selon la configuration de votre clavier.
| | |