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.