Créer une transparence dynamique sur une plage de cellules, Excel VBA
Voici un code VBA détaillé pour créer une transparence dynamique sur une plage de cellules dans Excel. L’idée ici est d’ajuster la transparence d’une forme (par exemple, un rectangle) superposée à une plage de cellules. Comme Excel ne permet pas directement de définir la transparence pour les plages de cellules, nous utilisons une forme semi-transparente pour recouvrir la plage sélectionnée.
Explication détaillée
1. Concept :
- Excel ne permet pas de définir la transparence directement pour les plages de cellules.
- Nous superposons une forme (rectangle) sur la plage sélectionnée et ajustons sa transparence dynamiquement.
- La transparence peut être contrôlée par VBA en modifiant la propriété
Fill.Transparencyde la forme.
2. Étapes du code VBA :
- L’utilisateur sélectionne une plage de cellules.
- Une forme (rectangle) est créée sur cette plage.
- Le code ajuste la position, la taille et la transparence de la forme.
- La transparence peut être définie dynamiquement (par exemple, en fonction d’une entrée utilisateur ou d’un processus en boucle).
Code VBA
Sub CreateDynamicRangeTransparency()
Dim ws As Worksheet
Dim rng As Range
Dim shp As Shape
Dim transparencyLevel As Double
Dim leftPos As Double, topPos As Double, widthSize As Double, heightSize As Double
' Définir la feuille active
Set ws = ActiveSheet
' Demander à l'utilisateur de sélectionner une plage
On Error Resume Next
Set rng = Application.InputBox("Sélectionnez une plage pour appliquer la transparence :", Type:=8)
On Error GoTo 0
' Quitter si aucune plage n'est sélectionnée
If rng Is Nothing Then Exit Sub
' Supprimer la forme existante si elle est présente
For Each shp In ws.Shapes
If shp.Name = "TransparencyOverlay" Then
shp.Delete
Exit For
End If
Next shp
' Récupérer la position et la taille de la plage sélectionnée
leftPos = rng.Left
topPos = rng.Top
widthSize = rng.Width
heightSize = rng.Height
' Créer une forme rectangle au-dessus de la plage sélectionnée
Set shp = ws.Shapes.AddShape(msoShapeRectangle, leftPos, topPos, widthSize, heightSize)
' Définir les propriétés de la forme
With shp
.Name = "TransparencyOverlay" ' Donner un nom unique à la forme
.Fill.ForeColor.RGB = RGB(200, 200, 200) ' Couleur gris clair
.Fill.Transparency = 0.5 ' Définir le niveau de transparence (0 = opaque, 1 = totalement transparent)
.Line.Visible = msoFalse ' Supprimer la bordure
End With
' Optionnel : Permettre à l'utilisateur de définir un niveau de transparence
transparencyLevel = InputBox("Entrez le niveau de transparence (de 0 à 1) :", "Contrôle de transparence", 0.5)
' Vérifier que l'entrée est valide
If transparencyLevel >= 0 And transparencyLevel <= 1 Then
shp.Fill.Transparency = transparencyLevel
Else
MsgBox "Valeur de transparence invalide. Elle doit être comprise entre 0 et 1.", vbExclamation
End If
' Nettoyage
Set rng = Nothing
Set shp = Nothing
End Sub
Comment cela fonctionne
1. Entrée de l’utilisateur :
- L’utilisateur sélectionne une plage de cellules via
Application.InputBox(Type:=8), ce qui garantit que l’objet sélectionné est une plage valide. - Si l’utilisateur annule, la macro se termine.
2. Création de la forme :
- Le code supprime toute forme existante nommée
"TransparencyOverlay", garantissant qu’une seule forme soit présente. - La position et la taille de la plage sélectionnée sont récupérées (les propriétés
Left,Top,WidthetHeight). - Un rectangle est dessiné sur cette plage en utilisant
Shapes.AddShape.
3. Contrôle de la transparence :
- La transparence est définie par défaut à
0.5(50 % de transparence). - L’utilisateur est invité à entrer un niveau de transparence personnalisé via une
InputBox(0pour opaque,1pour totalement transparent). - La validation de l’entrée garantit que la valeur est comprise entre
0et1.
4. Ajustements finaux :
- La forme est formatée sans bordure et avec un remplissage gris clair par défaut.
- Enfin, les objets sont nettoyés en libérant les références aux variables.
Améliorations possibles
- Mises à jour dynamiques : Lier la transparence à une valeur de cellule pour une mise à jour en temps réel.
- Personnalisation des couleurs : Permettre à l’utilisateur de choisir une couleur de remplissage pour la forme.
- Déplacement de la forme : Ajuster la transparence dynamiquement lorsque l’utilisateur fait défiler ou modifie la sélection.