Cours VBA : les propriétés
Nous allons maintenant agir sur le contenu et l'apparence des cellules et des feuilles.
Commencez par ouvrir l'éditeur, ajoutez-y un module, copiez la macro ci-dessous et associez-la à un bouton de formulaire (relisez la page des Sélections en cas de besoin) :
Sub proprietes()
'Macro incomplète
Range("A8")
End Sub
Nous voulons effectuer une action sur la cellule A8 avec ce début de macro.
Pour afficher la liste des possibilités que l'on peut associer à l'objet Range, ajoutez un . après Range("A8") :

L'éditeur affiche alors les différentes possibilités ...
Pour ce premier exemple, cliquez sur Value puis appuyez sur la touche Tab pour valider ce choix :
Sub proprietes()
'Macro incomplète
Range("A8").Value
End Sub
La propriété Value représente ici le contenu de la cellule.
Nous voulons maintenant donner la valeur 48 à la cellule A8 :
Sub proprietes()
'Cellule A8 = 48
Range("A8").Value = 48
'Traduction :
'La valeur de la cellule A8 est désormais : 48
End Sub
Puis, la valeur Exemple de texte à A8 (le texte doit être mis entre " ") :
Sub proprietes()
'Cellule A8 = Exemple de texte
Range("A8").Value = "Exemple de texte"
End Sub
Dans ce cas, c'est bien la cellule A8 de la feuille où est lancée la procédure (ici, celle où se trouve le bouton formulaire) qui sera modifiée.
Si vous créez un second bouton sur la feuille 2, ce sera alors la cellule A8 de la feuille 2 qui sera modifiée.
Pour modifier la cellule A8 de la feuille 2 en cliquant sur le bouton de la feuille 1, il faut préciser le nom de la feuille en ajoutant Sheets("Nom_de_la_feuille") avant Range :
Sub proprietes()
'Cellule A8 de la feuille 2 = Exemple de texte
Sheets("Feuil2").Range("A8").Value = "Exemple de texte"
End Sub
De même, si l'on souhaite modifier la cellule A8 de la feuille 2 d'un autre classeur ouvert, il faut préciser le nom du classeur en début de ligne à l'aide de Workbooks("Nom_du_fichier") :
Sub proprietes()
'Cellule A8 de la feuille 2 du classeur 2 = Exemple de texte
Workbooks("Classeur2.xlsx").Sheets("Feuil2").Range("A8").Value = "Exemple de texte"
End Sub
Bien que Value ait été utilisé pour illustrer ces différents exemples, il n'est pas nécessaire de l'indiquer, car c'est automatiquement la valeur de la cellule qui est modifiée si rien n'est précisé.
Ces 2 lignes génèrent un résultat identique :
Range("A8").Value = 48
Range("A8") = 48
Mise en forme du texte
Après avoir sélectionné la propriété Font et ajouté un ., la liste des propriétés que l'on peut attribuer à la mise en forme du texte apparaît :

La modification des couleurs sera détaillée à la page suivante ...
Mise en forme : taille du texte
Sub proprietes()
'Modifier la taille du texte des cellules A1 à A8
Range("A1:A8").Font.Size = 18
End Sub
Mise en forme : texte en gras
Sub proprietes()
'Mettre en gras les cellules A1 à A8
Range("A1:A8").Font.Bold = True
End Sub
Bold = True signifie Caractères en gras = Oui.
Pour retirer la mise en forme Bold à un texte, il faut donc remplacer Oui par Non, autrement dit, True par False :
Sub proprietes()
'Enlever la mise en forme "gras" des cellules A1 à A8
Range("A1:A8").Font.Bold = False
End Sub
Mise en forme : texte en italique
Sub proprietes()
'Mettre en italique les cellules A1 à A8
Range("A1:A8").Font.Italic = True
End Sub
Mise en forme : texte souligné
Sub proprietes()
'Souligner les cellules A1 à A8
Range("A1:A8").Font.Underline = True
End Sub
Mise en forme : police
Sub proprietes()
'Modifier la police de caractères des cellules A1 à A8
Range("A1:A8").Font.Name = "Arial"
End Sub
Ajouter des bordures

Sub proprietes()
'Ajouter une bordure aux cellules A1 à A8
Range("A1:A8").Borders.Value = 1
'Value = 0 : pas de bordure
End Sub
Modifier la mise en forme de la sélection actuelle
Sub proprietes()
'Ajouter une bordure aux cellules sélectionnées
Selection.Borders.Value = 1
End Sub
Modifier les propriétés d'une feuille
Sub proprietes()
'Masquer une feuille
Sheets("Feuil3").Visible = 2
'Visible = -1 : afficher la feuille
End Sub
Modifier la valeur d'une cellule en fonction d'une autre

L'objectif ici est que A7 prenne la valeur de A1, ce qui nous donne :
Sub proprietes()
'A7 = A1
Range("A7") = Range("A1")
'Ou :
'Range("A7").Value = Range("A1").Value
End Sub
Ou pour copier par exemple la taille du texte :
Sub proprietes()
Range("A7").Font.Size = Range("A1").Font.Size
End Sub
Modifier la valeur d'une cellule en fonction de sa propre valeur
Nous allons maintenant créer ici un compteur de clics.
A chaque clic, la valeur de A1 sera augmentée de 1 :
Sub proprietes()
'Compteur de clics en A1
Range("A1") = Range("A1") + 1
End Sub
Cette ligne ne doit pas être interprétée comme une opération mathématique (rappelez-vous que ce qui est à gauche du = prend la valeur de ce qui est à droite du =).
Excel exécute le code ligne par ligne en respectant certaines priorités, ces commentaires devraient vous aider à mieux comprendre ce même code :
'Pour cet exemple : A1 vaut 10 avant l'exécution du code
Sub proprietes()
'Un clic a été fait sur le bouton, nous entrons dans la procédure
'Pour le moment A1 vaut encore 10
'Pendant l'exécution de la ligne ci-dessous :
'- la valeur à droite du = est calculée en priorité (A1 vaut toujours 10, cela donne 10 + 1)
'- après calcul, la valeur à droite du = vaut donc 11
'- A1 prend ensuite la valeur à droite du = (soit la valeur 11)
Range("A1") = Range("A1") + 1
'A1 vaut alors 11 seulement après l'exécution de la ligne de code
End Sub
With
Ce code permet de définir différentes propriétés à la cellule A8 de la feuille 2 :
Sub proprietes()
Sheets("Feuil2").Range("A8").Borders.Weight = 3
Sheets("Feuil2").Range("A8").Font.Bold = True
Sheets("Feuil2").Range("A8").Font.Size = 18
Sheets("Feuil2").Range("A8").Font.Italic = True
Sheets("Feuil2").Range("A8").Font.Name = "Arial"
End Sub
Nous pouvons utiliser With pour éviter les répétitions de Sheets("Feuil2").Range("A8") :
Sub proprietes()
'Début de l'instruction avec : With
With Sheets("Feuil2").Range("A8")
.Borders.Weight = 3
.Font.Bold = True
.Font.Size = 18
.Font.Italic = True
.Font.Name = "Arial"
'Fin de l'instruction avec : End With
End With
End Sub
Sheets("Feuil2").Range("A8") n'est donc plus répété.
Bien que ce ne soit pas indispensable dans ce cas, il est également possible de faire de même pour .Font, ce qui nous donnerait :
Sub proprietes()
With Sheets("Feuil2").Range("A8")
.Borders.Weight = 3
With .Font
.Bold = True
.Size = 18
.Italic = True
.Name = "Arial"
End With
End With
End Sub