Comment sélectionner des cellules en fonction de leur valeur en 1 clic sur Excel
Dans ce tutoriel, je vais vous montrer comment sélectionner automatiquement toutes les cellules dont la valeur est supérieure à la valeur contenue dans une cellule définie. Nous verrons pour cela comment faire pour mettre en place une petite macro-commande VBA très simple, pour laquelle nous détaillerons chacune des étapes afin de pouvoir suivre ce tutoriel, même sans connaissance dans le développement VBA.
Téléchargement
Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :
Tutoriel Vidéo
1. Présentation
Pour pouvoir simplement choisir des cellules, en fonction de leur valeur, nous allons bien entendu devoir passer par le développement d’une mini-macro-commande en VBA.
Mais avant de voir comment nous allons nous y prendre, découvrons le fichier de travail qui va nous servir de support.
Il s’agit d’un fichier qui reprend l’ensemble des membres du personnel d’une entreprise et dans lequel nous retrouvons les informations habituelles, telle que les noms et prénoms, les âges, etc… et les salaires annuels.
Et c’est justement en fonction de ces salaires que nous allons souhaiter automatiser la sélection des cellules :
Nous allons en effet, souhaiter qu’en un seul clic, tous les salaires dont le montant annuel dépasse de la valeur saisie dans la cellule J5 soient sélectionnés.
Pour simplifier la création de la macro, nous allons nommer deux plages de cellules, ce qui permettra ensuite de les appeler directement par leur nom, plutôt que par leurs coordonnées.
Pour cela, nous commençons par sélectionner la cellule J5, puis dans la zone de nom (située juste à gauche de la barre des formules) nous saisissons le nom « _montantFiltre » :
Ensuite, nous validons en appuyant sur la touche [Entrée] du clavier.
Nous faisons de même pour l’ensemble des cellules dans lesquelles sont saisies les salaires (nous nommons la plage « salaires »)
2. Création de la macro-commande VBA
La première opération à réaliser va évidemment consister à créer une nouvelle macro-commande en VBA.
Pour cela et pour bien comprendre tout ce que nous allons voir, il est préférable d’avoir suivi la formation dédiée à l’apprentissage de VBA mais bien entendu, cela n’est pas obligatoire, nous détaillerons ici chaque opération.
Pour saisir du code VBA, nous allons tout d’abord devoir lancer l’éditeur de code VBE.
Pour cela, appuyez simplement sur les touches [Alt]+[F11] en même temps.
VBE se lance alors, et le projet en cours est proposé par défaut.
Pour commencer, nous allons insérer un nouveau module, qui est en quelque sorte une nouvelle feuille blanche, dans laquelle nous allons pouvoir saisir nos lignes de code.
Pour ajouter ce module, rendez-vous dans le menu Insertion > Module :
Chez moi, le nouveau module contient déjà une nouvelle ligne avec le code « Option Explicit » :
Il s’agit d’une ligne qui impose de déclarer explicitement toutes les variables au sein du module.
Ne vous embêtez pas avec cette ligne, nous reviendrons ensuite sur ce qu’est une déclaration de variable.
Maintenant que le module est prêt, nous allons pouvoir créer notre macro.
Pour cela, saisissez simplement le mot clé « Sub », puis le nom de la macro et validez en appuyant sur la touche [Entrée] du clavier :
Sub selectionValeur()
End Sub
Vous pouvez alors constater qu’Excel ajoute une ligne en toute fin de code (« End Sub »), cela permet de marquer la fin de la macro.
La validation de la création de la procédure a également automatisé l’insertion des parenthèses (sans rien à l’intérieur).
Tout comme lorsque nous saisissons une fonction dans une formule Excel, ces parenthèses permettent de venir saisir des arguments.
Nous allons justement insérer deux arguments :
- Un premier argument que nous allons appeler « plage » et qui va permettre de spécifier à Excel les coordonnées des cellules sur lesquelles nous allons limiter la recherche,
- Puis un second argument que nous allons ici appeler « valeurMin » et qui va permettre de renseigner la valeur minimale des cellules à sélectionner
Sub selectionValeur(plage As Range, valeurMin As Double)
Comme vous pouvez le constater, nous avons ici utilisé le mot-clé « As » pour donner un type à ces arguments.
Typer ainsi une variable permet de spécifier à Excel quelle genre de données vont être insérées dans les variables :
- Le type Range correspond à l’enregistrement de plages contenant une ou plusieurs cellules,
- Le type Double permet quant à lui de stocker une valeur décimale
Maintenant que notre macro est correctement déclarée, nous allons pouvoir mettre en place le code VBA à proprement parler.
La première chose à faire va être de déclarer deux variables :
- Une variable que nous allons simplement appeler « c » et qui va permettre de passer en revue toutes les cellules contenues dans la plage de cellules « plage » passée en argument. Cette variable est typée en tant que Range,
- Une seconde variable que nous allons cette fois-ci appeler « resultat » et qui va être une plage dans laquelle nous allons enregistrer toutes les cellules à sélectionner. Cette variable est également typée en tant que Range
Dim c As Range, resultat As Range
Ensuite, et comme nous venons de le voir, nous allons maintenant chercher à passer en revue toutes les cellules de la plage de cellules passée en argument.
Pour cela, nous allons utiliser une boucle For Each, qui permet de boucler sur toutes les cellules contenues dans une plage, la cellule en cours étant retournée par la variable « c » :
For Each c In plage
Next
Pour en savoir plus sur les boucles, vous pouvez consulter le chapitre dédié, extrait de la formation sur l’apprentissage de VBA pour les débutants.
Maintenant que nous nous retrouvons avec une cellule qui va être extraite de la plage de cellules de tests, nous allons pouvoir réaliser deux tests successifs avec celle-ci :
- Tout d’abord, nous allons chercher à savoir si celle-ci est effectivement une valeur numérique,
- Ensuite, nous allons vouloir savoir si la valeur contenue dans celle-ci est plus importante que la valeur de test :
If IsNumeric(c) Then
If c > valeurMin Then
End If
End If
Encore une fois, nous passons rapidement sur la notion de test IF, étant donné qu’un chapitre entier lui est dédié dans la formation sur l’apprentissage de VBA (cliquez-ici pour le consulter).
Une fois que nous avons effectivement obtenu la confirmation que la cellule doit être sélectionnée, nous allons pouvoir stocker celle-ci dans la plage de cellule « resultat ».
Pour cela, nous allons utiliser la fonction VBA qui permet de retourner une plage de cellule résultant de l’union de deux plages passées en arguments :
Set resultat = Union(resultat, c)
Vous noterez également l’utilisation du mot-clé d’affectation Set, étant donné que la variable résultat est un objet.
Encore une dernière subtilité, quant à l’utilisation de la fonction Union : étant de donné que par défaut la variable résultat ne contient aucune cellule, celle-ci a pour valeur Nothing (« rien »).
Or, lorsque nous allons demander à VBA d’unir les plages resultat et c, cela va forcément se traduire par une erreur.
Nous allons donc devoir effectuer un test supplémentaire, lequel va consister à analyser la variable resultat pour déterminer si celle-ci est égale à Nothing.
Lorsque tel est le cas, alors nous allons devoir affecter la cellule c une première fois de manière tout à fait classique, sans utiliser la fonction Union.
Par la suite nous pourrons sans aucun problème utiliser Union comme nous venons de le voir.
Remplacer donc la ligne précédente par :
If resultat Is Nothing Then
Set resultat = c
Else
Set resultat = Union(resultat, c)
End If
Cela étant fait, il ne reste plus qu’à sélectionner les cellules contenues dans la plage resultat en utilisant la méthode « Select » en toute fin de macro :
resultat.Select
Et voilà, notre macro est maintenant terminée !
Seulement pour pouvoir l’appeler facilement depuis un bouton, nous allons devoir passer par une mini-macro intermédiaire.
En effet, les boutons placés sur les feuilles de calculs ne permettent pas de passer d’argument aux macros qu’ils appellent.
Ajoutez simplement la macro suivante en dessous de la précédente :
Sub selectionSalaires()
selectionValeur [_salaires], [_montantFiltre]
End Sub
Ici, nous nous contentons d’appeler la macro selectionValeur en passant les deux arguments attendus.
Il s’agit de références aux plages de cellules nommées que nous avons vues juste avant.
3. Appeler la macro
Maintenant, pour appeler la macro depuis la feuille de calcul, nous allons insérer un bouton cliquable.
Pour cela, nous nous rendons dans le menu Insertion du ruban, puis tout à gauche, nous choisissons d’insérer une zone de texte :
Nous dessinons ensuite le bouton et saisissons le texte « Sélectionner » :
Une fois le bouton mis en forme, nous pouvons effectuer un clic-droit pour choisir « Affecter une macro » :
Et enfin dans la fenêtre suivante, nous choisissons la macro « selectionSalaires » et nous cliquons sur le bouton [OK] :
Et c’est tout !
Pour tester la macro, il suffit de saisir un montant dans la cellule J5 et d’appuyer sur ce bouton :
Tous les salaires de plus de 40 000€ sont maintenant sélectionnés !