Créer une interactivité dynamique de plage (range), Excel VBA
Créer une interactivité dynamique de plage (range) dans Excel en utilisant VBA consiste à écrire un code qui peut ajuster automatiquement les plages en fonction de certaines conditions, comme l’entrée de l’utilisateur ou des changements dans les données de la feuille de calcul. Voici une explication détaillée et un exemple de code pour vous aider à comprendre comment cela peut être réalisé en VBA.
Objectif :
Nous souhaitons créer une plage dynamique qui s’ajuste automatiquement en fonction des données présentes dans une colonne particulière. Cette plage va s’étendre ou se réduire à mesure que de nouvelles données sont ajoutées ou supprimées. Nous utiliserons également une interactivité, où l’utilisateur pourra interagir avec la plage, et celle-ci s’ajustera en fonction des besoins de l’utilisateur.
Scénario :
Imaginez que vous ayez un ensemble de données dont le nombre de lignes varie, et vous souhaitez créer une plage qui se met à jour dynamiquement pour inclure uniquement les données actuellement présentes.
Par exemple :
- Une liste de transactions de ventes où le nombre de lignes change au fil du temps.
- Une colonne de dates où de nouvelles entrées sont régulièrement ajoutées.
Nous allons nous concentrer sur la création d’une plage dynamique et interactive qui s’adapte aux données qui changent.
Code et Explication :
Sub CreateDynamicRange()
Dim ws As Worksheet
Dim lastRow As Long
Dim dynamicRange As Range
' Définir la feuille de calcul
Set ws = ThisWorkbook.Sheets("Sheet1") ' Remplacez "Sheet1" par le nom de votre feuille
' Trouver la dernière ligne de données dans la colonne A (vous pouvez changer la référence de la colonne selon vos données)
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' Vérifier s'il y a des données
If lastRow > 1 Then
' Créer la plage dynamique - suppose que les données commencent en A2 et descendent jusqu'à la dernière ligne
Set dynamicRange = ws.Range("A2:A" & lastRow)
' Vous pouvez appliquer différentes actions à la plage. Par exemple :
' Changer la couleur de la police
dynamicRange.Font.Color = RGB(0, 0, 255)
' Appliquer une mise en forme conditionnelle
dynamicRange.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="=100"
dynamicRange.FormatConditions(1).Font.Color = RGB(255, 0, 0)
' Créer une boîte de saisie pour l'interactivité
Dim inputValue As String
inputValue = InputBox("Entrez une valeur à rechercher dans la plage dynamique :", "Recherche dans la plage dynamique")
' Rechercher la valeur entrée dans la plage dynamique
Dim foundCell As Range
Set foundCell = dynamicRange.Find(inputValue)
If Not foundCell Is Nothing Then
MsgBox "Valeur trouvée à la ligne " & foundCell.Row
Else
MsgBox "Valeur non trouvée dans la plage."
End If
Else
MsgBox "Aucune donnée trouvée dans la colonne A."
End If
End Sub
Explication étape par étape :
1. Définir la feuille de calcul :
Set ws = ThisWorkbook.Sheets("Sheet1")
Cette ligne définit la feuille de travail avec laquelle vous allez travailler. Assurez-vous de remplacer « Sheet1 » par le nom réel de la feuille où se trouvent vos données.
2. Trouver la dernière ligne :
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Il s’agit d’une technique courante pour trouver la dernière ligne avec des données dans la colonne A. Elle commence depuis le bas de la feuille de calcul et remonte jusqu’à ce qu’elle trouve une cellule avec des données.
3. Créer la plage dynamique :
Set dynamicRange = ws.Range("A2:A" & lastRow)
Une fois que nous connaissons la dernière ligne avec des données, nous créons une plage dynamique de A2 jusqu’à la dernière ligne (en supposant que les données commencent à A2 et que l’en-tête se trouve en A1).
4. Appliquer des actions à la plage :
- Couleur de la police :
dynamicRange.Font.Color = RGB(0, 0, 255)
Cela change la couleur de la police de la plage dynamique en bleu.
- Mise en forme conditionnelle :
dynamicRange.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="=100" dynamicRange.FormatConditions(1).Font.Color = RGB(255, 0, 0)
Cela applique une mise en forme conditionnelle pour changer la couleur de la police en rouge pour toute valeur supérieure à 100.
5. Saisie de l’utilisateur pour la recherche :
inputValue = InputBox("Entrez une valeur à rechercher dans la plage dynamique :", "Recherche dans la plage dynamique")
La fonction InputBox demande à l’utilisateur de saisir une valeur qui sera recherchée dans la plage dynamique.
6. Rechercher la saisie de l’utilisateur dans la plage dynamique :
Set foundCell = dynamicRange.Find(inputValue)
Cette ligne effectue la recherche de la valeur saisie par l’utilisateur dans la plage dynamique.
7. Retour d’information à l’utilisateur : Si la valeur est trouvée, le numéro de la ligne est affiché dans une boîte de message. Sinon, l’utilisateur est informé que la valeur n’a pas été trouvée.
If Not foundCell Is Nothing Then MsgBox "Valeur trouvée à la ligne " & foundCell.Row Else MsgBox "Valeur non trouvée dans la plage." End If
Comment l’utiliser :
- Placez ce code dans un module VBA (Alt + F11 pour ouvrir l’éditeur VBA, puis Insertion > Module).
- Assurez-vous de modifier le nom de la feuille et la référence de la colonne (si vos données sont dans une autre colonne).
- Exécutez la macro en appuyant sur F5 dans l’éditeur VBA ou en la liant à un bouton dans la feuille de calcul.
Conclusion :
Cette méthode permet de créer une plage dynamique qui s’ajuste automatiquement en fonction des données dans la feuille de calcul. L’interactivité via la InputBox et la fonction de recherche rend cet exemple interactif et adaptable à divers scénarios. Vous pouvez étendre cela en ajoutant des interactions plus complexes, telles que permettre à l’utilisateur de modifier les données dans la plage dynamique ou d’effectuer d’autres actions en fonction des valeurs des données.