Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GRANDEUR ET DÉCADENCE DE VB2008


Information sur le tutorial

Catégorie :Tutoriaux Tutorial .NET ( DotNet ) Date de création : 10/09/2008 16:12:42 Vu : 4 755 fois

Note :
Aucune note

Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

Description

Les différences évolutives entre VB6/VBA et VB2008...
--------------------------------------------------------------------------------------------------------------------------------------------------------------

Tutorial

Grandeur et décadence de VB6/VBA vers VB2008


Ce tutoriel est un résumé succinct de quelques différences entre les fonctions et instructions de VB6 et VB2008, et des alternatives éventuelles… agrémenté de mes commentaires… Je n’ai pas grande prétention, mais je pense que cela peut être utile à d’autres qui se mettent à programmer en VB.NET ayant une base sur VB6/VBA pour se repérer… Bien sur, ce tutoriel sera aussi le reflet de mes progrès en la matière, dont vous pouvez y apporter vos suggestions


Types numériques entiers

Type VB2008

Type CLR

Nb d’octet utilisé

Valeur par défaut

Plage de valeur

Code Exemple VB2008

Type équivalent en VB6/VBA

Code Exemple VB6

Boolean

System.Boolean

1

False

False ou True

Dim x As Boolean

Dim x As System.Boolean

inchangé

Dim x As Boolean

Byte

System.Byte

1

0

0 à 255

Dim x As Byte

Dim x As System.Byte

inchangé

Dim x As Byte

Sbyte

System.SByte

1

0

-128 à 127

Dim x As SByte

Dim x As System.Sbyte

(inconnu)


Short

System.Int16

2

0

-32768 à 32767

Dim x As Short

Dim x As System.Int16

Dim x = 32767S

Integer

Dim x As Integer

UShort

System.UInt16

2

0

0 à 65535

Dim x As UShort

Dim x As System.UInt16

Dim x = 65535US

(inconnu)


Integer

System.Int32

4

0

-2147483648 à 2147483647

Dim x As Integer

Dim x As System.Int32

Dim x = 2147483647I

Long

Dim x As Long

UIteger

System.UInt32

4

0

0 à 4294967295

Dim x As UInteger

Dim x As System.UInt32

Dim x = 4294967295UI

(inconnu)


Long

System.Int64

8

0

-9223372036854775807 à 9223372036854775807

Dim x As Long

Dim x As System.Int64

Dim x = 9223372036854775807L

(inconnu)


ULong

System.UInt64

8

0

0 à 18446744073709551615

Dim x As ULong

Dim x As System.UInt64

Dim x = 18446744073709551615UL

(inconnu)



Types numériques décimaux

Type VB2008

Type CLR

Nb d’octet utilisé

Valeur par défaut

Plage de valeur

Code Exemple VB2008

Type équivalent en VB6/VBA

Code Exemple VB6

Single

System.Single

4

0

-3.402823E38 à 3.402823E38

Dim x As Single

Dim x As System.Single

inchangé

Dim x As Single

Double

System.Double

8

0

-1.79769313486231E308 à 1.79769313486247E308

Dim x As Double

Dim x As System.Double

inchangé

Dim x As Double

(inconnu)






Currency

Dim x As Currency

Decimal

System.Decimal

16

0

-79228162514264337

593543950335 à 79228162514264337

593543950335

Dim x As Decimal

Dim x As System.Decimal

Dim x = 79228162514264337

593543950335D

Rq : L’utilsation est difficile à cause des conversions implicites en Double dès qu’on utilise les fonctions mathématiques.

(inconnu)



Mots-clés obsolètes

Ce tableau regroupe les mots-clés obsolètes de VB6/VBA dans VB2008, et dans le cas ou cela est possible, son équivalent natif en VB2008.

(Bien sur, parfois il est nécessaire de mettre « toute une structure » que je ne reprends pas, mais cela devrait être suffisant pour savoir vers quoi chercher…)

Pour régler la comptabilité (ou pas) avec VB6, il suffit de cocher Microsoft.VisualBasic dans le menu Propriétés de l’application (WindowsApplication1 par défaut) > Références.

Instructions de VB6/VBA

Equivalent en VB.NET

Instruction VB6 compatible

Remarques

App.Path

Application.StartupPath



As Any

As Object



Atn

Math.Atn

X

Comme toutes les instructions de math, commencer avec l’identificateur MATH. De même avec Sin, Cos, etc…

Call

Call

X

Call devient falcultatif sous VB2008.

CallByName

CType


Microsoft.VisualBasic.CallByName

X

Ctype natif de VB2008, n’est pas exactement identique à CallByName, étant un peu moins modulable que cette dernière.

L’astuce du descripteur Microsoft.VisualBasic permet de faire touner les fonctions de VB6 sans référence à celui-ci. (Astuce décrit dans l’aide de VB2008).

Chr(X)

Char.ConvertFromUtf32(X)

System.Convert.ToChar(X)

X


Circle

Object.DrawEllipse(...)


Définitivement supprimé de VB2008.

Currency

-


Définitivement supprimé de VB2008.

Date




Date$




Debug.Assert et Debug.Print




DefType

-


Définitivement supprimé de VB2008.

DoEvents

Application.DoEvents()



Empty

nothing



Eqv



Définitivement supprimé de VB2008.

Gosub

-


Définitivement supprimé de VB2008.

Bizarrement, GOTO et les étiquettes sont encore pris en charge !

Return est utilisé pour retourner le résultat d’une fonction.

Imp




_Initialize

_Enter

-


Int

Math.Floor

X


Instancing




InStr

ch.IndexOf(rech, 1)

X


IsEmpty

System.DBNull / nothing

-


IsMissing

System.DBNull / nothing

-


IsNull

System.DBNull / nothing

-


IsObject




LCase

texte.ToLower

X


Left, Left$

-


Définitivement supprimé de VB2008.

Len

texte.Length

X


Let

-

-

Définitivement supprimé de VB2008.

Amusant tout de même, lors de la frappe de LET, VB2008 le met en bleu (donc reconnu) et le supprime tout juste après la validation effectuée !

Line

Objet.DrawLine(...)

-

Définitivement supprimé de VB2008.

Exemple en VB.NET

Dim objGraph As Graphics

objGraph = Me.CreateGraphics

objGraph.DrawLine(Pens.Black, X0, Y0, X1, Y1)

LSet

texte.PadLeft

X


LTrim

texte.TrimStart

X


Mid

Dim texte As String = "Bonjour"

texte.Substring(2, 5)

X


Msgbox

MessageBox.Show

X


Now

Dim dte As DateTime = DateTime.Now

Dim dte As Date = Date.Now

X


Null




On.. Gosub

Try... Catch... Finally


Définitivement supprimé de VB2008.

On.. GOTO

Try... Catch... Finally

X


On Error Resume Next

Try... Catch... Finally

X


Option Base

-


Définitivement supprimé de VB2008.

L’indice inférieur d’un tableau ne peut que 0 sous VB.NET.

Option Private




PSet

?


Définitivement supprimé de VB2008.

De manière détournée :

objGraph.DrawLine(Pens.Black, X0, Y0, X0, Y0+1)

Right, Right$

-


Définitivement supprimé de VB2008.

Rnd

Dim r As New Random

r.Next(min,max)

X


Round




RSet

texte.PadRight

X


RTrim

texte.TrimEnd

X


Scale




Set




Sgn

Math.Sign

X

Pour se passer de l’identificateur Math, on peut aussi mettre en tête de module la déclaration :

Imports System.Math

Sqr

Math.Sqrt

-


String()

texte.PadRight()

-


_Terminate

_FormClosed

_FormClosing

-


Time




Time$




Timer

-


En VB2008, Timer est un type.

Type




UCase

texte.ToUpper

X


Val

CDbl

X


Variant

-


Définitivement supprimé de VB2008.

VarType

objet.GetType

X

Sous VB2008 compatible Microsoft.visualBasic : Information.VarType()

vbNewLine

System.Environment.NewLine

System.Convert.ToChar(13)

Keys.Return

X


vbNullString

String.Empty

X


vbTab

System.Convert.ToChar(9)

X


Wend

While... End While


Au lieu de While… Wend. Construction automatique sous VB2008.


Les expressions d’assignation :

i=i+1, peut être remplacé par i += 1 (à la manière de C++, java, javascript…)

i=i-1 par i -= 1


Tri

Sous VB.NET, on peut utiliser la méthode de tri intégrée très pratique et inconnu sous VB6/VBA : c’est la méthode « .SORT »

Exemple code (repris du snippet : http://www.codyx.org/snippet_tri-nombres_421.aspx#1412 ) :

Tri de nombre

Function TriNombre(ByVal TabATrier As Single()) As String

'Utilisation de la méthode Sort

Dim Result As String = String.Empty

System.Array.Sort(TabATrier)

'construction de la chaine de résultat

For Each it As Single In TabATrier

Result += it.ToString & System.Environment.NewLine

Next

Return Result

End Function


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim tab(3) As Single

tab(0) = 4

tab(1) = 3

tab(2) = 9

tab(3) = 2

MessageBox.Show(TriNombre(tab))

End Sub


Tri de date : voir : http://www.vbfrance.com/forum/sujet-COMMENT-TRIER-DATES_1207751.aspx


Ecriture des procédures

La structure d’une procédure est différente entre VB2008 et VB6.

Par exemple en VB6, l’événement du « click » sur un bouton était directement le nom de la procédure :

Private Sub Command1_Click()

MsgBox "ok"

End Sub


En VB2008, le nom de la procédure peut-être quelconque auquel on associe la liste des objets+événements l’intermédiaire de « Handles ». Différents objets et événements peuvent donc être facilement associés. Dés lors, « sender » indique l’objet appelant la procédure. Exemple :

Private Sub Nom_Procedure(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged, TextBox2.TextChanged, Button1.Click

MessageBox.Show(sender.Name)

End Sub


Remarque : Dans le cas où plusieurs procédures exploitent les mêmes objets+événements, c’est le classement alphanumérique sur le nom de la procédure qui donne l’ordre d’exécution.

Chronomètre : Mesure du temps d’exécution d’une partie de code

Exemple de code natif VB.NET :

Dim Stopwatch As System.Diagnostics.Stopwatch

Stopwatch = New Stopwatch


Stopwatch.Start()

...

Stopwatch.Stop()


MessageBox.Show(Stopwatch.Elapsed().TotalMilliseconds & " millisecondes")


Autre possibilité :

Dim start As DateTime = DateTime.Now

...

MessageBox.Show((DateTime.Now - start).TotalMilliseconds & " millisecondes")


Opérations sur les bits

Opération complètement inconnue sous VB6, en VB.NET on peut jouer directement sur les « bits »…

Exemple de code

Dim octet As Byte = 128 ' vaut 10000000

octet >>= 3 ' Décalage de 3 bits vers la droite soit 00010000 soit 16 en décimal

MessageBox.Show(octet)

octet <<= 2 ' Décalage de 2 bits vers la gauche 01000000

MessageBox.Show(octet)



10 septembre 2008 20:53:45 :
Prise en compte des remarques de C. Racaud
10 septembre 2008 20:54:31 :
Prise en compte des remarques de C. Racaud
10 septembre 2008 22:09:06 :
Complément avec les remarques de Casy. + Rajout d'autres correspondances.
10 septembre 2008 22:23:42 :
P'tit mise en forme
11 septembre 2008 23:55:27 :
Compléments correspondances
16 septembre 2008 22:20:55 :
Compléments
02 octobre 2008 22:21:55 :
Ajouts.
05 octobre 2008 12:00:44 :
Ajout.
08 octobre 2008 18:30:12 :
Ajouts.
10 octobre 2008 17:55:23 :
Ajout.
08 novembre 2008 18:58:41 :
Ajouts.
signaler à un administrateur
Commentaire de Charles Racaud le 10/09/2008 18:35:55

Salut,

Il manque le type SByte (bytes signé).
Pour le type ulong, il suffit de le noter avec UL:
Dim var As ULong = 18446744073709551615UL
De même pour les autres types :
Dim var As Decimal = 79228162514264337593543950335D
Dim var As Single = 3.402823E+38F
Dim var As UInteger = 4294967295UI
Dim var As Short = 32767S
Dim var As UShort = 65535US
Dim var As Long = 9223372036854775807L

__
Kenji

signaler à un administrateur
Commentaire de us_30 le 10/09/2008 19:41:23

Bonsoir Charles Racaud,

Merci pour tes remarques. Je met à jour dès que je retrouve le lien pour modifier le tutoriel... (il semble avoir disparu avec le relookage ?)

Amicalement,
Us.

signaler à un administrateur
Commentaire de casy le 10/09/2008 21:15:10

Date existe toujours, mais ce n'est plus une fonction ou un type mais une classe.
Ainsi Now devient Date.Now

Tout ce qui touche aux string est contenu dans la classe String.
Ainsi Mid devient String.Substring, Left et Right, qui ne sont que des surchargent de Mid, ne sont pas directement maintenue. C'est Substring qui les remplacent

On Error Goto existe toujours, mais il vaut mieux utiliser la nouvelle structure Try...Catch...Finally, plus propre.

DoEvents est remplacé par Application.DoEvents

App.Path est remplacé par Application.ExecutablePath, ou Application.StartupPath

....................

Bref un bon conseil, pour définitivement se passer de VB6, systématiquement désactiver la référence Microsoft.VisualBasic dans chacun des projets. Tout ce qu'elle apporte existe d'une anière ou d'une autre dans les classes de bases de .Net

signaler à un administrateur
Commentaire de us_30 le 10/09/2008 22:06:53

Bonsoir Casy,

Merci pour ces compléments... je rajoute, je rajoute... Bien sur, on retrouve sous une forme ou une autre la majorité des instuctions de VB6 sous VB.NET... Je tente justement d'en faire un petit checklist...

Question : Justement, comment désactive-t-on la référence Microsoft.VisualBasic dans VB2008 ?

Amicalement,
Us.

signaler à un administrateur
Commentaire de Renfield le 11/09/2008 08:50:35 administrateur CS

menu Projet > Propriétés > References

signaler à un administrateur
Commentaire de us_30 le 11/09/2008 22:53:20

Bonsoir Renfied,

Merci beaucoup... c'est vu !

Amicalement,
Us.

signaler à un administrateur
Commentaire de gillardg le 12/09/2008 00:18:09

As Any vb6  = As Object vb2008

erreur  [ Dim x As System.Int16 Dim x = 32767S ??? ]

signaler à un administrateur
Commentaire de us_30 le 12/09/2008 11:30:20

Bonjour Gillardg,

Je complète As Any. Merci.

Il n'y a pas d'erreur dans " Dim x As System.Int16 Dim x = 32767S ??? "
C'est la lecture dans la présentation du tableau qui est la cause de la confusion.

Il faut lire :

Dim x As Short
Dim x As System.Int16
Dim x = 32767S

comme 3 façons différentes de déclarer x en Short. En clair, il faut une seule ligne parmi les 3...

Exemple :

Dim x As System.Int16
x = 32767

ou

Dim x = 32767S

Le "S" à la fin permet de faire une délcaration implicite en Short. Tout comme, en VB6, le $ permet une déclaraction en string...

Amicalement,
Us.

signaler à un administrateur
Commentaire de bouv le 18/09/2008 14:40:11

Concernant l'appel de Substring au lieu et place de Mid.

1°- Mid est toujours utilisable
2°- L'index de départ n'est pas le même (0 pour Mid et 1 pour Substring)
3°- Substring peut générer des erreurs que Mid n'aurait pas générées

Exemple :

Dim sText as String = "CODES-SOURCES"

Mid(sText, 7, 7) retournera la valeur "SOURCES"

sText.Substring(6, 7) retournera la valeur "SOURCES"


Mid(sText, 7, 10) retournera la valeur "SOURCES"

sText.Substring(6, 10) génerera une erreur car il n'y as pas 16 caractère dans la chaine.

++

signaler à un administrateur
Commentaire de us_30 le 19/09/2008 23:08:10

Bonsoir Bouv,

En effet, MID reste utilisable si la compatibilité avec VB6 est cochée; Il y a la petite croix dans la case correspondante.
Ensuite, en effet, il existe des différences de comportements ou de syntaxes entre les fonctions, mais le résultat (correctement paramètré) sera le même.

Merci pour ces remarques...

Amicalement,
Us.

signaler à un administrateur
Commentaire de tyogise le 02/10/2008 00:02:47

manipuler excel à partir de vb6 est bien maitrisé par beaucoup. qu'en est il de vb2008? comment écrire dans les cellules d'excel.
tyo

signaler à un administrateur
Commentaire de us_30 le 02/10/2008 21:41:15

Bonsoir,

C'est la même chose !

=

Pour exemple de codage :

    Dim ExcelApp As Object
    Dim ExcelClasseur As Object
    Dim ExcelFeuille As Object

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ExcelApp = CreateObject("excel.application")
        ExcelApp.visible = True
        ExcelClasseur = ExcelApp.Workbooks.Add
        ExcelFeuille = ExcelClasseur.sheets("Feuil1")
        ExcelFeuille.cells.item(1, 1).value = "Machin"
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        ExcelApp.quit()
    End Sub

=

Amicalement,
Us.

signaler à un administrateur
Commentaire de tyogise le 03/10/2008 00:46:02

jeter un coup sur ceci c'est la même chose non?

Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
Dim xlSheet As Object
Dim xlBook As Object
Dim xlApp As Object

'Ou bien encore ceci

Dim appExcel As Microsoft.Office.Interop.Excel.Application 'Application Excel

Dim Sheet As Object 'Déclaration des variables


'Ouverture de l'application
appExcel = CreateObject("Excel.Application")

'Ouverture d'un fichier Excel
appExcel.Workbooks.Add()
Sheet = appExcel.ActiveWorkbook.ActiveSheet
         appExcel.Visible = True
appExcel.DisplayAlerts = False

'quelle est de toutes ces méthodes celles qui convienne le mieux du point de vue optimisation de la programmation

'pour ecrire dans une cellule par exemple on fait
ExcelGlobal_definst.Worksheets(1).Range("A1").Value = TextBox1.text.
'Y a t-il meilleur moyen plus leger.

Thanks Us

Tyo

signaler à un administrateur
Commentaire de us_30 le 03/10/2008 11:43:07

Bonjour,

Je ne vois pas de différence. On crée toujours un objet, qui lie VB2008 à l'application comme objet : CreateObject("Excel.Application")
Ensuite, on passe les différentes instructions issues du VBA, on faisant référence à l'objet (Excel) créé. Là où tu penses trouver une différence, c'est dans la façon d'écrire le code. Or, ce sont que des équivalences (et peut parfois dépendre de la syntaxe choisie), rien de plus.
IL existe au moins 10 façons de faire une référence à une cellule. C'est la syntaxe du VBA qui permet cela. Ainsi, faire un "Cells.item(xx,yy)" est équivalent à "Range("X1")"... enfin, tout dépend aussi des besoins pratiques.
Je ne développerais pas plus, car cela nous emmènerait sur une longue discussion sur le sujet, et n'apporterait rien pour le tutoriel.
Pour finir, en termes de performance, il n'y a pas vraiment une meilleure façon de faire, car tout simplement le pilotage par automation dépend aussi des performances d'Excel. Sans compter qu'on voit mal l'intérêt d'optimiser un code qui sert à un pilotage (hormis les optimisations d'usages, par exemple, éviter les sélections des cellules, au lieu d'une référence directe...).
IL n'existe pas non plus de façon plus légère d'écrire le code, sauf en passant par la classique fonction WITH...

Si tu veux plus de renseignements sur le sujet, je ne peux que de conseiller d'utiliser le forum.

Amicalement,
Us.

signaler à un administrateur
Commentaire de tyogise le 03/10/2008 21:15:59

Bonsoir

parfois un conseil pratique peut éclairer mieux qu'un développement théorique fastidieux.
le problème qui se pose pour certains programmeurs c'est lorsqu'ils essaient de convertir leur propres applications de Vb6 à Vb2008 par exemple. vous avez été peut être plus que moi confronté aux applications VB qui ne tiennent pas par elle même, mais grâce à des fichiers support. les gens qui s'adonnent aux VB... espèrent qu'un jour leurs applications deviennent complètement indépendantes.

Regards
tyo  

signaler à un administrateur
Commentaire de Patrice99 le 12/11/2008 09:01:34

Salut, tu ne devrais pas dire "Définitivement supprimé de VB2008" pour les fonctions VB6, car il suffit simplement d'utiliser la librairie Microsoft.VisualBasic.Strings pour les fonctions Left$ et Right$ par exemple. L'avantage est de faciliter la migration de projets VB6, le seul inconvénient est de compliquer la migration vers des projets dans d'autres langages DotNet, comme C# par exemple, ce qui n'est pas très grave si on y réfléchi bien : peu de développeur C# passe leur temps à reprendre du code VB.Net. L'autre inconvénient est bien sûr le mélange de fonctions similaires, d'où une certaine confusion, mais cela vaut bien la facilité de migrer du VB6. En conclusion, il faudrait simplement indiquer que cela ne pose vraiment pas un problème, que les développeurs VB6 peuvent migrer sans trop de difficulté ni regret vers VB.Net.

signaler à un administrateur
Commentaire de us_30 le 12/11/2008 11:35:42

Bonjour,

Je ne vois pas où se trouve cette librairie ? (Microsoft.VisualBasic.Strings)
Si cette librairie permet de retrouver absolument toutes les fonctions de VB6 alors je suis absolument intéressé de voir comment la fonction RETURN sera traitée... Autrement, en effet, un autre commentaire devra être mieux ciblé.

Amicalement,
Us.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,031 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.