> Tous les forums > Forum Bureautique
 Rechercher une partie d'un texte dans une celluleSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
matbarns
  Posté le 31/07/2019 @ 14:44 
Aller en bas de la page 
Petit astucien

Bonjour,

voici mon souci, dans la colonne A, j'ai 4 prénoms (luc, jean et regis, mathieu). je souhaite lors du déroulement de ma macro, qu'elle recherche si dans la colonne A, il y a un texte qui contient par exemple "mat". Si c'est le cas, sélection de la ligne, puis suppression de cette dernière. Si, pas de correspondance, on arrête la recherche.

j'ai écris du code mais ça ne me convient pas car je n'arrive pas à créer une boucle à partir de ça et du coup je suis obligé de copier cette ligne de code autant de fois que j'ai de texte à supprimer... au secours !!!

'activation de la cellule "mat"
Cells.Find(What:="mat", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate



merci pour votre aide

Publicité
Debrief
 Posté le 31/07/2019 à 20:44 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour,

D'où vient le texte (ex. "mat") que tu dois rechercher pour ta sélection / suppression ?

Est-ce que tu dois le saisir ? Est-ce qu'il vient d'une liste dans une plage d'une feuille Excel ? Est-ce qu'il vient d'un fichier texte ? Autre ?

D.



Modifié par Debrief le 31/07/2019 20:46
Gabrilou
 Posté le 31/07/2019 à 21:37 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucienne

Et est-ce qu'un filtrage de données ferait l'affaire ?

matbarns
 Posté le 01/08/2019 à 08:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

bonjour,

un filtrage ne ferait pas l'affaire, car j'ai besoin de supprimer les lignes qui contiennent mon exemple "mat". En fait, c'est un fichier que j'extraie en xls, qui est composée de date, de chiffres et de quelques lignes de texte. Chaque ligne de texte commence par le même mot (ex "mat"), du coup je voulais rechercher chaque ligne contenant "mat" pour les sélectionner puis les supprimer.

Je me dis qu'il faut peut-être utiliser un rechercheV ou rechercheH ou je ne sais quoi, mais je ne maîtrise pas trop...

Debrief
 Posté le 01/08/2019 à 10:39 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Si tu utilises ton .Find en VBA il faut une macro du genre:

Sub a()
Dim Rng As Range
Dim Rep As Integer
Const Mot = "mat"
Const Prompt = True

Do While (1)
Set Rng = Cells.Find(What:=Mot, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)

If Rng Is Nothing Then Exit Do
Rng.Select

If Prompt Then
Rep = MsgBox("Supprime la ligne " & Rng.Row, vbYesNoCancel)
If Rep = vbCancel Then Exit Do
If Rep = vbYes Then ActiveSheet.Rows(Rng.Row).EntireRow.Delete
Else
ActiveSheet.Rows(Rng.Row).EntireRow.Delete
End If
Loop

End Sub



Modifié par Debrief le 01/08/2019 15:17
Debrief
 Posté le 01/08/2019 à 15:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Une autre option qui n'utilise pas le .Find qui a l'inconvénient de boucler sur le Range (Cells.Find) consiste à parcourir le Range simplement en cherchant "mat".

De plus, je doute que tu doives parcourir toutes les cellules de la feuille (Cells) pour chercher ce mot mais plutôt un Range limité à 1 colonne.
dans cette formulation, tu peux adapter le Range à examiner.

Sub b()
Dim RngToScan As Range
Dim Rep As Integer
Dim i As Long
Dim j As Long
Dim Deleted As Boolean
Const Mot = "mat"
Const Prompt = True

Set RngToScan = ActiveSheet.Columns(1)
'''''Set RngToScan = ActiveSheet.Cells

'Limite la plage à scanner aux cellules utilisées dans la feuille
Set RngToScan = Intersect(RngToScan, ActiveSheet.UsedRange)
Rep = MsgBox("Plage à examiner: " & RngToScan.Address, vbOKCancel)
If Rep = vbCancel Then Exit Sub

'Pour chaque ligne de la plage à examiner
i = RngToScan.Row
Do While i <= RngToScan.Row + RngToScan.Rows.Count - 1
Deleted = False
'Pour chaque colonne de la plage à examiner
For j = RngToScan.Column To RngToScan.Column + RngToScan.Columns.Count - 1
'MsgBox ActiveSheet.Cells(i, j).Address
'Le mot est dans la valeur de la cellule
If InStr(ActiveSheet.Cells(i, j).Value, Mot) Then
ActiveSheet.Cells(i, j).Select
If Prompt Then
Rep = MsgBox("""" & Mot & """ trouvé en " & ActiveSheet.Cells(i, j).Address & vbCrLf & vbCrLf & _
"Supprimer la ligne " & i & " ?", vbYesNoCancel)
If Rep = vbCancel Then Exit Do
If Rep = vbYes Then
ActiveSheet.Rows(i).EntireRow.Delete
Deleted = True
Exit For
End If
Else
ActiveSheet.Rows(i).EntireRow.Delete
Deleted = True
End If
End If
Next j
If Not Deleted Then i = i + 1
Loop
End Sub



Modifié par Debrief le 01/08/2019 21:34
E-L
 Posté le 01/08/2019 à 15:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

salut,

Ceci est simple et pourra peut-être t'aider:

.

Sub test_i()
For i = 1 To [a65536].End(xlUp).Row
If Cells(i, 1) Like "********mat*****" Then
Cells(i, 2) = "à supprimer"
End If
Next

End Sub

Résultat dans la feuille

La suppression de la ligne est facile.

à+



Modifié par E-L le 01/08/2019 15:56
matbarns
 Posté le 01/08/2019 à 20:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonsoir,

merci pour vos propositions, j'en ai trouvé une également qui semble marcher, la voici:

[A:A].Replace What:="mat", Replacement:="", LookAt:=xlWhole
On Error Resume Next
[A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Merci à tous !!!

E-L
 Posté le 02/08/2019 à 06:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

salut,

Bien, elle est encore plus simple

à+

Publicité
Debrief
 Posté le 02/08/2019 à 07:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ha ha ! c'est sûr qu'elle fait un gros ménage !

D.

E-L
 Posté le 02/08/2019 à 09:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

salut,

Il n'y a pas de smiley pour ponctuer une réponse ironique

à+

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
Séparer du texte dans cellule
Libre Office texte dans cellule ne s’arrête pas
Word 2007-Texte centré dans une cellule
centrer texte dans cellule
rechercher un mot dans un texte
texte dans cellule ne pouvant pas être modifié
Modifier un texte dans une cellule - Excel
texte illisible dans cellule
Probleme dans cellule texte - urgent
Transposer texte commentaire dans une cellule
Plus de sujets relatifs à Rechercher une partie d''un texte dans une cellule
 > Tous les forums > Forum Bureautique