Suppression de cellules contenant des termes spécifiques (Microsoft Excel)
Ankur a une feuille de calcul qui contient des milliers de cellules contenant divers termes. Il doit supprimer un grand nombre de ces termes et les cellules dans lesquelles ils apparaissent. Par exemple, il peut avoir besoin de supprimer toutes les cellules contenant des termes tels que « google », « youtube », « linkedin » et de nombreux autres termes. Ankur sait qu’il peut faire une recherche et remplacer chacun de ces termes, mais c’est assez fastidieux. Il se demande s’il existe un moyen d’identifier tous les termes à supprimer et de demander à Excel de les supprimer de ces milliers de cellules.
Si vous devez faire ce type de chose régulièrement, la meilleure solution est d’utiliser une macro. L’astuce est de savoir comment vous spécifiez, dans la macro, exactement ce que vous voulez remplacer. Une façon est de bourrer les informations dans un tableau, comme dans l’exemple suivant:
Sub RemoveTerms1() Dim vTerm As Variant Dim vArray As Variant vArray = Array("google", "youtube", "linkedin") For Each vTerm in vArray Selection.Replace What:=vTerm, _ Replacement:="", LookAt:=xlPart Next vTerm End Sub
Les termes recherchés sont placés dans le tableau vArray, puis chaque membre du tableau (chaque terme) est parcouru. La méthode Replace est utilisée avec l’objet Selection pour effectuer les remplacements réels. La macro ne supprime pas les cellules; il supprime simplement tout texte correspondant au terme. Lors du remplacement, la recherche ne tient pas compte de la casse, de sorte que « google » correspond à « Google ».
Étant donné que l’objet Selection est utilisé, il est important de s’assurer que vous sélectionnez la liste que vous souhaitez traiter avant d’exécuter réellement la macro.
Sinon, rien n’est remplacé.
Si vous préférez, vous pouvez créer une macro qui extrait les termes d’une plage de cellules dans le classeur.
Sub RemoveTerms2() Dim c As Range Dim rngSource As Range Dim vTerm As Variant Dim arrTerms As Variant Dim i As Integer i = -1 arrTerms = Array() For Each c In Range("D1:D9").Cells If Trim(c.Value) > "" Then i = i + 1 ReDim Preserve arrTerms(i) arrTerms(i) = Trim(c.Value) End If Next c On Error Resume Next Set rngSource = Application.InputBox( _ Prompt:="Please select Range", _ Title:="Removing Cells Containing Terms", _ Default:=ActiveSheet.UsedRange.Address, Type:=8) On Error GoTo 0 If rngSource Is Nothing Then MsgBox ("You didn't specify a range to process") Else For Each vTerm in arrTerms rngSource.Replace What:=vTerm, _ Replacement:="", LookAt:=xlWhole Next vTerm End If End Sub
Cette macro extrait les termes de recherche de la plage D1: D9, puis vous invite à choisir la plage de cellules que vous souhaitez traiter. Il utilise la même méthode Replace que celle utilisée dans la macro précédente, sauf qu’elle spécifie que le paramètre LookAt est xlWhole. Cela signifie que le terme de recherche doit correspondre à la cellule entière pour être supprimé. Les termes sont cependant toujours considérés comme insensibles à la casse.
Notez que les exemples jusqu’à présent ne suppriment aucune cellule; ils suppriment simplement le contenu des cellules. Dans de nombreux cas, c’est exactement ce que vous voulez car vous ne voulez pas perturber la mise en page de la feuille de calcul réelle. Si vous voulez vraiment supprimer des cellules, vous n’utiliserez pas la méthode Replace. Au lieu de cela, vous pouvez activer la comparaison de texte développé et utiliser l’opérateur Like pour voir s’il existe une correspondance.
Option Compare Text Sub RemoveTerms3() Dim c As Range Dim rngSource As Range Dim vTerm As Variant Dim arrTerms As Variant Dim i As Integer Dim sLook As String i = -1 arrTerms = Array() For Each c In Range("D1:D9").Cells If Trim(c.Value) > "" Then i = i + 1 ReDim Preserve arrTerms(i) arrTerms(i) = Trim(c.Value) End If Next c On Error Resume Next Set rngSource = Application.InputBox( _ Prompt:="Please select Range", _ Title:="Removing Cells Containing Terms", _ Default:=ActiveSheet.UsedRange.Address, Type:=8) On Error GoTo 0 If rngSource Is Nothing Then MsgBox ("You didn't specify a range to process") Else For Each vTerm in arrTerms sLook = "" & vTerm & "" For Each c In rngSource If c.Value Like sLook Then c.Delete Next Next vTerm End If End Sub
Notez que les termes de recherche sont toujours extraits de la plage D1: D9 et que vous êtes toujours invité à indiquer la plage que vous souhaitez traiter. À partir de là, cependant, le processus est différent: la macro examine chaque cellule et s’il y a une correspondance partielle, la cellule est supprimée.
Pour que cette variante de la macro fonctionne correctement, vous devez inclure la ligne Option Compare Text en dehors de la procédure elle-même.
Cela demande à VBA d’activer les mots-clés (tels que J’aime) qui permettent de comparer du texte.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (13373) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365.