Jack se demande comment il peut faire une recherche sur un certain mot ou une certaine phrase et, en une seule étape, mettre en évidence toutes les cellules le contenant afin de pouvoir les couper ou les copier et les coller ailleurs.

La sélection des cellules contenant le texte que vous souhaitez utiliser est assez simple; vous pouvez utiliser la fonction standard Rechercher et remplacer pour ce faire. Suivez ces étapes:

  1. Appuyez sur Ctrl + F. Excel affiche l’onglet Rechercher de la boîte de dialogue Rechercher et remplacer.

  2. Développez la boîte de dialogue en cliquant sur le bouton Options. (Voir la figure 1.)

  3. Dans la zone Rechercher, entrez le texte que vous souhaitez rechercher.

  4. Utilisez les commandes de la boîte de dialogue pour limiter les correspondances, comme vous le souhaitez.

  5. Cliquez sur Rechercher tout. La boîte de dialogue est développée pour afficher toutes les correspondances qui ont été localisées.

  6. Appuyez sur Ctrl + A. Cela sélectionne toutes les cellules trouvées.

  7. Cliquez sur Fermer pour fermer la boîte de dialogue.

C’est ça. Tant que vous n’avez pas cliqué sur Faire correspondre le contenu de la cellule entière à l’étape 4, Excel sélectionne toutes les cellules qui contiennent le texte que vous avez spécifié à l’étape 3. Vous pouvez, à ce stade, appliquer la mise en forme aux cellules, si vous le souhaitez.

Vous pouvez, bien sûr, utiliser la mise en forme conditionnelle pour formater dynamiquement les cellules contenant le texte que vous souhaitez mettre en évidence. Tout ce que vous avez à faire est de configurer une condition qui utilise «Le texte contient» comme test. Cela ne sélectionnera bien sûr pas toutes les cellules contenant le texte, mais les mettra en évidence afin que vous puissiez choisir où elles se trouvent.

Vous pouvez également utiliser une macro pour sélectionner toutes les cellules contenant le texte souhaité. Ce qui suit est assez simple qui accomplit la tâche:

Sub selCellbasedonValue()

Dim c As Object     Dim u As Range     Dim v As Range     Dim sInpt As String

Set u = ActiveSheet.UsedRange

sInpt = InputBox("Enter the search text")



If sInpt > "" Then         For Each c In u             If Instr(LCase(sInpt),LCase(c.Value)) > 0 Then                 If v Is Nothing Then                     Set v = Range(c.Address)

Else                     Set v = Union(v, Range(c.Address))

End If             End If         Next         v.Select         Set v = Nothing     End If

Set u = Nothing End Sub

Il y a un problème avec la sélection des cellules que vous devez reconnaître, cependant: si les cellules ne sont pas contiguës, vous ne pouvez pas couper ou copier les cellules. Si vous essayez, vous obtiendrez un message d’erreur indiquant que la commande ne peut pas être utilisée sur plusieurs sélections. Le moyen le plus simple de copier le contenu d’une cellule vers un emplacement différent est, encore une fois, d’utiliser une macro:

Sub CopyFinds()

Dim sSrch As String     Dim sFirst As String     Dim rPaste As Range     Dim i As Integer     Dim iLeftC As Integer     Dim lTopR As Long     Dim c As Object

If Selection.Cells.Count = 1 Then         MsgBox "Select the range to be searched."

Exit Sub     End If

'Specify search string     sSrch = InputBox(Prompt:="Enter the search text")



'   Set the paste address     On Error Resume Next     Set rPaste = Application.InputBox(Prompt:="Enter the upper-left " & _       "cell address for the paste range", Type:=8)

On Error GoTo 0

'   Exit if canceled     If TypeName(rPaste) <> "Range" Then Exit Sub

'   Upper left cell to be used     Set rPaste = rPaste.Range("A1")



'Set where paste will start and headings     Application.ScreenUpdating = False     lTopR = rPaste.Row     iLeftC = rPaste.Column     Cells(lTopR, iLeftC) = "Address"

Cells(lTopR, iLeftC + 1) = "Cell Value"

lTopR = lTopR + 1          'Start copying cell values     With Selection         Set c = .Find(What:=sSrch, LookAt:=xlPart, MatchCase:=True)

If Not c Is Nothing Then             sFirst = c.Address             Do                 Cells(lTopR, iLeftC) = c.Address                 Cells(lTopR, iLeftC + 1) = c.Value                 Set c = .FindNext(c)

lTopR = lTopR + 1             Loop While Not c Is Nothing And c.Address <> sFirst         End If     End With          Application.ScreenUpdating = True     Cells(rPaste.Row, rPaste.Column).Select End Sub

Lorsque vous sélectionnez une plage de cellules et exécutez cette macro, vous êtes invité à spécifier ce que vous recherchez (la casse est importante) et une adresse où vous souhaitez la copier. La macro recherche ensuite toutes les cellules qui contiennent cette valeur et copie à la fois leur adresse et la valeur de la cellule à l’adresse de départ que vous avez spécifiée. La macro ne fait pas beaucoup de vérification des erreurs; il écrasera les informations si vous spécifiez une adresse cible qui contient déjà des informations. En outre, si vous spécifiez une adresse cible qui se trouve dans la plage que vous recherchez, la macro peut s’exécuter indéfiniment. Vous devez absolument spécifier une cible qui se trouve en dehors de la plage recherchée.

_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 (8964) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365. Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:

lien: / excel-Searching_for_All [Recherche de tout].