3 méthodes pour factoriser les macros VBA

05/09/2017

Qu’est-ce que factoriser ?

En mathématiques, factoriser c’est remplacer la répétition du facteur commun par un seul produit.

Exemple : ka + kb = k(a + b)

En informatique, la notion est similaire. La factorisation permet d’unifier les appels à du code qui est redondant afin qu’il n’apparaisse qu’une seule fois.

Nous vous proposons dans cet article 3 méthodes de factorisation que vous pouvez facilement mettre en place.

 

 3 méthodes de factorisation avec VBA

Si vous vous apprêtez à utiliser les mêmes instructions au moins deux fois dans votre programme, n’hésitez pas à démarrer une boucle. Les structures avec « For … Next » ou « Do While/Until … Loop » vous seront alors d’une grande utilité !

Si vous faites plusieurs opérations avec le même objet, nous vous conseillons d’utiliser l’instruction « With » : elle vous permettra de vous référer à cet objet qu’une seule fois !

Si votre macro principale est chargée en instructions ou si elle utilise une même suite d’actions à des endroits différents (vous ne pouvez donc pas y faire une boucle), il faudrait la décomposer !

Pour ce faire, on isole le code répété dans une nouvelle procédure, puis on l’appelle depuis la macro principale grâce à la fonction Call. Pour savoir comment appeler une macro depuis une autre macro, lisez cet article.

Cette méthode est utile également si vous devez executer une même suite d’actions dans les macros différentes de votre projet VBA.
Dans notre exemple ci-dessous vous pouvez observer les trois méthodes de factorisation à la fois :

 

Sub maj_fiches_locataires()
 
    Dim i As Integer, first_row As Integer, last_row As Integer
    
    'factorisation avec un "with"
    With sh_new_loc
 
        first_row = .Range("rng_first_row").Row + 1
        last_row = .Range("rng_last_row").Row - 1
 
        'factorisation grâce à une boucle
        For i = first_row To last_row
            Call creer_fiche_locataire(i) 'utilisation d'une macro intermédiaire
        Next i
 
    End With
 
End Sub

Sub creer_fiche_locataire(loc_row As Integer)
 
    Dim sh_new_loc As Worksheet
 
    Const col_id = 1
    Const col_loc_name = 2
 
    sh_template.Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
 
    Set sh_new_loc = ActiveSheet
 
    'factorisation avec un "with"
    With sh_new_loc
        .Range("rng_id").Value = sh_etat_loc.Cells(loc_row, col_id).Value
        .Name = sh_etat_loc.Cells(loc_row, col_loc_name).Value
    End With
 
End Sub

 

Les avantages de la factorisation