Ce sont queqleus conseils pour perfectionner d'un l'optimisation du code soit le gain de place, de vitesse et de taille nivo RAM; et de deux la lecture de votre code.
Ce nes ont que des conseils vous pouvez appliquer une variante pour la lecture.
Source / Exemple :
Pour coder proprement la première chose à faire, c'est d'écrire en haut de chacun de vos module, classe, form, etc ...
un Option Explicit celui ci vous obligera à déclarer chacune de vos Variables, quelqu'elle soient, comme cela vous devrait reflechir à chaque intervalle à choisir pour les nombres (ex : si vous savez que ce que vous voulez recevoir est compris entre 0 et 255 alors la variable devra etre de type Byte pour economiser de la RAM, par conséquent pour gagner de la vitesse d'execution.)
Celui-ci peut être mis automatiquement dans
Outils>>Options>>Editeur "Declaration des variables obligatoires" à cocher.
Deuxieme conseil, pour une meilleur clarté de votre code je vous conseil de mettre des tabulations à chaque fois que vs ferez des opérations avec With, Do While, For, If, ... Et vous pouvez aussi mettre des : pour caser deux implémentation sur une ligne ou deux ligne sur une. De plus n'hésitez pas à effectuer des sauts de ligne d que vous en sentez le besoin.
Ex1 :
Avant :
Private Sub Etat(MatEtat() As Byte, Optional Mode As Byte = 0, Optional PseMilli As Long = 1000)
Dim Ind As Long
If MatEtat(0) <> 0 Then
ArtTxt = False
For Ind = 0 To UBound(MatEtat)
If ArtTxt Then Exit Sub
ChgMod MatEtat(Ind)
If Ind <> UBound(MatEtat) Then Pause PseMilli
Next
ElseIf Mode <> 0 Then
ChgMod Mode
End If
End Sub
Apres :
Private Sub Etat(MatEtat() As Byte, Optional Mode As Byte = 0, Optional PseMilli As Long = 1000)
Dim Ind As Long
If MatEtat(0) <> 0 Then
ArtTxt = False
For Ind = 0 To UBound(MatEtat)
If ArtTxt Then Exit Sub
ChgMod MatEtat(Ind)
If Ind <> UBound(MatEtat) Then Pause PseMilli
Next
ElseIf Mode <> 0 Then
ChgMod Mode
End If
End Sub
Ex2 :
(Ex : Ligne1 = "Label1.Caption="10""; Ligne2="Rd=CLng(Label1.Caption)*2")
Avant :
Ligne1
Ligne2
Apres:
Ligne1:Ligne2
Troisieme conseil, pour une otpimisation vous devrez trouver toutes les solutions possibles pr choisir la meilleure (la plus rapide ou la moin massive selon vos exigence), cela veut dire que vous devriez faire attention à tous les morceaux de votre code pr le "factoriser".
Ex :
On a un menu avec un choix entre l'item Rouge, l'item Vert et l'item Bleu.
Code direct (avant) :
Private Sub Rouge_Click()
Rouge.Checked=1
Vert.Checked=0
Bleu.Checked=0
End Sub
Private Sub Vert_Click()
Rouge.Checked=0
Vert.Checked=1
Bleu.Checked=0
End Sub
Private Sub Bleu_Click()
Rouge.Checked=0
Vert.Checked=0
Bleu.Checked=1
End Sub
Code modifier (après) : 'Pr ns aider on a remplacer l'item Rouge, Vert et Bleu par un groupe de controle nommé Couleur (dindex de 0 à 2)
Private Sub Couleur(Index As Integer)
Dim Var As Byte
For Var=0 to Couleur.Count-1
If Var=Index Then Couleur(Var).Checked=1 Else Couleur(Var).Checked=0
Next
End Sub
Donc pour les controles on pourra utiliser les groupes de controles (sils ont un lien ensemble - faut il encore le trouver :)).
Sinon on peut utiliser des tableaux pour optimiser, ex :
(Propriété Interval du Timer réglé à 1000 (ms))
Code direct :
Dim Cpt As Byte
Private Sub Timer1_Timer()
Cpt=Cpt+1
If Cpt>3 Then Cpt=1
Select Case Cpt
Case 1
me.Caption="Salut"
Case 2
me.Caption="Ca va bien?"
Case 3
me.Caption="Moi tranquille ;)"
End Select
End Sub
Code optimisé :
Dim Cpt As Byte, MatTxt as Variant
Private Sub Form_Load()
MatTxt=Array("Salut", "Ca va bien?", "Moi tranquille ;)")
End Sub
Private Sub Timer1_Timer()
Cpt=Cpt+1
If Cpt>UBound(MatTxt) Then Cpt=0
me.Caption=MatTxt(Cpt)
End Sub
Ainsi on pourrait continuer librement le tableau ss avoir à changer autre chose.
N'oubliez pas une dernière chose, il faut toujours penser à la moindre faille de votre programme, en utilisant soit d On Error Resume Next qui passera une erreur comprise dans une procedure, ou un On Error Goto Ligne1 pour que votre programme aille à cette ligne s'il y a eu une erreur et un On Error Goto 0 pour réinitialiser la gestion de l'erreur dans une procédure.
Votre optimisation vous menera surement à creer des Procedures, des Fonction, mais aussi des modules Publiques, des Dll Active X et des controles OCX.
N'oubliez pas aussi la difference entre un Sub et un Function, le Function Renvoi qq chose alor que le Sub non, et faites attention au nivo des procedure public et privé.
Ex :
code direct :
''Ds un module par exemple qqconque sera utiliser par toutes les form
Sub QQonque() 'La c en publique puisquil y a rien
CreerFic "m:\a.txt"
End Sub
Sub CreerFic(Adr As String)'encore en public alor quon en a pas besoin!
Dim ff As byte
If Dir(Adr, VbHidden)<>"" Then Exit Sub
On Error Resume Next
ff=FreeFile()
Open Adr For Random As #ff
Close #ff
End Sub
code otpimisé :
''Ds un module par exemple qqconque sera utiliser par toutes les form
Sub QQonque() 'La c en publique puisquil y a rien
If CreerFic ("m:\a.txt") Then Debug.Print "Fichier crée" Else Debug.Print "Erreur"
'''Si le fichier a bien été créer CreerFic=True par conséquent il ecrit ds la fenetre espion "Fichier crée" sinon il écrit "Erreur"
End Sub
Private Function CreerFic(Adr As String) As Boolean
Dim ff As byte
If Dir(Adr, VbHidden)<>"" Then CreerFic=True:Exit Function
On Error Goto Fin
ff=FreeFile()
Open Adr For Random As #ff
Close #ff
CreerFic=True
Fin:
End Function
Une dernière chose, n'hésitez surtout pas à schématiser ce que vous voulez faire qd vous avez du mal à le penser vous verrez ça vous aidera grandement.
Conclusion :
En esperant que ça vous aide ;)
Et dsl pr deux ou trois conneries que j'ai pu dire au nivo des types.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.