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") :

liste proprietes

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 :

liste3 proprietes

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

liste4 proprietes
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
N'oubliez pas que seule une toute petite partie des possibilités de personnalisation sont indiquées ici. Si la propriété dont vous avez besoin n'est pas détaillée sur cette page, n'ayez pas peur d'utiliser l'enregistreur de macro pour vous éviter de longues recherches (en enregistrant la manipulation dont vous avez besoin, vous pourrez retrouver plus facilement la propriété recherchée pour pouvoir ensuite l'utiliser dans votre macro).

Modifier la valeur d'une cellule en fonction d'une autre

valeur proprietes

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
Ce qui est à gauche du = prend la valeur de ce qui est à droite du =.

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