par , 06/10/2020 à 11h31 (492 Affichages)
Bonjour à tous,
Que ce soit pour une fonction ou une procédure, pour ma part, la complète déclaration des paramètres est, pour ainsi dire, obligatoire.
En effet, l'on voit trop de lignes de code contenant ce type de syntaxe
macel = laplage.fonctionx(« Toto », , , , False)
De quoi se gratter la tête !! ![:koi:](https://www.developpez.net/forums/images/smilies/koi.gif)
Si les paramètres ont été définis, alors la lecture du code est d’autant plus facilitée lorsqu’ils sont mentionnés
Exemple :
1 2 3 4 5 6 7 8
| Dim lemessage As Variant
lemessage = MsgBox( _
Prompt:="Une extraction est possible" & Chr(13) & _
"Souhaitez-vous la créer?", _
Buttons:=vbYesNo, _
Title:="Tableau récapitualatif.")
If lemessage = vbYes Then…… |
Pour une procédure (ou une fonction) paramétrée, cela devient encore plus évident.
Supposons une procédure - basique - ayant pour objet la protection de certaines cellules d’une feuille de travail à définir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Option Explicit
Public Sub protéger(lafeuil As String, motpasse As String, celdep As String, laprotection As Boolean, Optional nblignes As Long, Optional nbcolonnes As Integer)
With Worksheets(lafeuil)
.Unprotect Password:= motpasse
.Cells.Locked = False
'Pour contrôle
Debug.Print .Range(celdep).Resize(IIf(nblignes = 0, 1, nblignes), IIf(nbcolonnes = 0, 1, nbcolonnes)).Address
.Range(celdep).Resize(IIf(nblignes = 0, 1, nblignes), IIf(nbcolonnes = 0, 1, nbcolonnes)).Locked = laprotection
.Protect Password:= motpasse
End With
End Sub |
Il est certain que le code suivant est effectif
1 2 3 4 5
| Sub essai()
protéger "VENETA", "PUGLIA", "A1", True, , 10
End Sub |
L’on remarquera au passage
Ce qui signifie qu’un paramètre optionnel n’a pas été informé.
Mais que voit-on ?
Un mot « protéger » qui signifie sans-doute qu’une procédure est appelée, 2 chaînes de caractères, une adresse, une valeur booléenne, un blanc et un nombre.
Explicite, non ?
Réponse: non!
De – très - loin, ma préférence va à
1 2 3 4 5
| Sub essai()
Call protéger(lafeuil:="VENETA", motpasse:="PUGLIA", celdep:="A1", laprotection:=True, nbcolonnes:=10)
End Sub |
Et ce d’autant plus que la saisie semi-automatique au sein de l’éditeur VBE reporte, en info-bulle, les paramètres à considérer
Dès que l’appel de procédure suivi d’une parenthèse est saisi, alors l’éditeur reportera successivement, comme pour toute propriété ou méthode natives de VBA, la nature des paramètres à considérer, chacun en caractères gras. Les paramètres optionnels figurent entre crochets.
Il suffit alors, comme ci-dessus, de les reporter, suivis de « := »
Certes, pour des méthodes simples (Offset...), la lisibilité n'est pas affectée si ces paramètres (RowOffset, ColumnOffset) sont implicites.
Une exception, qui est pour ma part, un anomalie.
La précision des paramètres ne peut être effectuée dès lors que l'un d'eux est de nature Paramarray
Voir l'explication de Microsoft.
Au demeurant, pour des procédures comme pour des fonctions (personnalisées ou non), il ne faut pas perdre de vue qu’un code peut être consulté (d’abord à postériori pour soi-même) et peut évoluer.
Pour un code VBA, rigueur et lisibilité vont de pair.
La déclaration des paramètres est donc un apport constructif pour pouvoir facilement se repérer dans nos développements, surtout s’ils sont complexes.
Voilà.
C’était l’humeur du jour.
Par avance, je vous remercie pour vos remarques constructives.