Conseil d'optimisation et de lecture de code

Contenu du snippet

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.

A voir également

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.