Pour répondre à jpmaton à sa question [Résolu]

Messages postés
1909
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 juillet 2019
-
Bonjour
J'ai reçu un message privé de jpmaton auquel je ne puis répondre ( sûrement car celui-ci n'a pas autoriser les autres membres a lui envoyé des messages privés )
Voulant tout de même lui répondre j'ouvre ce post en espérant qu'il le verra
Voici l'intitulé du message qu'il m'a envoyé


Concernant le mot clé
Val
je maintiens que celui-ci est un mot clé de VB 6
Dans le lien que jpmaton a mis dans son message il dit que Val fait bien partie de *Microsoft Net .
jpmaton écrit : ce mot clé est cependant décrit par Micosoft .NET dans https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.conversion.val?view=netframework-4.8
Lorsque l'on ouvre ce lien on s'aperçoit que ce mot clé fait partie de l'espace de nom Microsoft VisualBasic comme le montre cette image

Cet espace de nom n'est juste que l'importation automatique dans VB Net de l'ensemble des instructions VB 6 ce qui souvent même à confusion .
Pour faire du "pur" VB Net il suffit d'aller dans les propriétés du projet et de clique dans l'onglet Reférences. Une fois ceci fait dans la liste en bas on repère l'entrée Microsoft VisualBasic et on la décoche ( la 4° entrée comme sur l'image suivante)

ainsi on ne peut plus utiliser aucun mot clé VB 6 dans VB Net .

Maintenant par quoi remplacer
Val
si on fait du "pur" VB Net
C'est là qu'entre en jeu les conversions entre type de variables
On va utiliser
Convert.ToInt32
pour convertir une chaine de caractères numérique en une valeur de type Integer
Donc
Dim intAge as Integer = Convert.ToInt32("48")
nous donne bien la valeur numérique pour l'age
Cependant l'instruction VB 6
Val
présente un avantage
On peut faire
Dim intAge as Integer = Val("48ans")
: la conversion s'arrêtera au premier caractère non numérique alors que ceci n'est pas possible avec
Convert.ToInt32
si on précise "ans" derrière "48"
Pour contrer ceci on peut faire
Dim Age as String = "48ans"
Dim intAge as Integer = 0
For i = 0 to Age.Length - 1
     ' pour chaque caractère de la chaine Age
     ' si ce n'est pas un chiffre on sort de la boucle
    If Age.Substring(i,1) < "0" And Age.Substring(i,1) > "9" then Exit For
    intAge = (intAge * 10) + Convert.Toint32(Age.Substring(i,1) )
Next 


Maintenant chacun peut choisir : ou faire du "pur" VB Net ou mélanger les torchons et les serviettes en mettant du VB 6 dans VB Net . Le premier choix est bien plus judicieux à mon avis .

Un lien intéressant en rapport avec ce sujet : https://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net ( tutoriel fait par Whismeril que je salue )

J'espère ainsi avoir répondu à la question de jpmaton
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
1909
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 juillet 2019
65
1
Merci
Pas de quoi !
Pour la prochaine fois passe par le forum : c'est plus simple et en accord avec la charte
Bonne soirée

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de vb95
Messages postés
13522
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 juillet 2019
289
1
Merci
Bonjour
cette solution, ne prend pas en compte un nombre négatif, ou décimal.

Une Regex est une option, voir ce lien (à copier / coller le bug du site sur ce genre de lien n'est toujours pas résolu)
http://regexstorm.net/tester?p=%28%3f%3c%3d%5e%29-%3f%5cd%2b%28%3f%3a%5b%2c.%5d%5cd%2b%29%3f&i=-123456789%2c0123456789+untit%c3%a9+quelquonque 


Vois verrez qu'avec ou sans le -, avec un . une , ou pas le nombre est capturé à condition d'être au début du texte

Quand j'étais petit, la mer Morte n'était que malade.
George Burns

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Whismeril
Messages postés
48
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
8 juillet 2019
1
0
Merci
Bonsoir VB95,
Grand merci pour cette réponse exhaustive qui me convient tout à fait.
Bien à toi

Jean-paul
Commenter la réponse de jpmaton
Messages postés
48
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
8 juillet 2019
1
0
Merci
Bonjour,
Juste une petite correction :
If Age.Substring(i,1) < "0" And Age.Substring(i,1) > "9" then Exit For 

à remplacer par
If Age.Substring(i,1) < "0" Or Age.Substring(i,1) > "9" then Exit For

Bonne journée
Jean-paul
Commenter la réponse de jpmaton
Messages postés
1909
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 juillet 2019
65
0
Merci
Oh la bourde !
Merci d'avoir corrigé : j'ai tapé trop vite de tête
Commenter la réponse de vb95
Messages postés
48
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
8 juillet 2019
1
0
Merci
Précision utile.
Commenter la réponse de jpmaton