OVH Cloud OVH Cloud

Sélectionner des cellules comportant du texte spécifique

6 réponses
Avatar
fred
Bonjour,
J'ai une feuille de classeur avec une colonne A avec des données.
Avec une macro...j'aimerais grâce à des caractères spécifiques contenues
dans certaines cellules (style "|" et "toto" par exemple)...garder toutes
les cellules comportant ces caractères plus la cellule supérieure (si "|" et
"toto" sont en A5...je voudrais garder la cellule A4) et supprimer (la
ligne) de toutes celles qui ne correspondent pas au critére
J'aurai ainsi une colonne A avec les données qui m'intéressent!
J'ai essayé avec Find (mais il ne semble pas prendre plusieurs
caractères...).
J'ai essayé avec le caractère "|"
Range("A1:" & [A1].End(xlDown).Address).Select
Selection.Find(What:="|", After:=ActiveCell, LookAt:=xlPart).Activate
Dim Cel As Range
For Each Cel In Selection
If InStr(1, uneCel, "|") = 0 Then Rows(uneCel.Row).Delete
Le problème c'est que j'ai 2 caractères comme critère de Range ("|" et
"toto"...) et je delete la cellule qui est au dessus de la cellule
sélectionnée
Merci de votre aide

6 réponses

Avatar
Daniel
Bonjour.
Essaie (pas complétement testé) :

Sub test()
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If InStr(1, Range("A" & i).Value, "|") > 0 And InStr(1, Range("A" &
i).Value, "toto") > 0 _
And i > 1 Then
i = i - 1
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents
ElseIf InStr(1, Range("A" & i).Value, "|") = 0 Or InStr(1, Range("A"
& i).Value, "toto") = 0 Then
Range("A" & i).EntireRow.Delete
End If
Next i
End Sub

Cordialement.
Daniel
"fred" a écrit dans le message de news:
434079a8$0$30640$
Bonjour,
J'ai une feuille de classeur avec une colonne A avec des données.
Avec une macro...j'aimerais grâce à des caractères spécifiques contenues
dans certaines cellules (style "|" et "toto" par exemple)...garder toutes
les cellules comportant ces caractères plus la cellule supérieure (si "|"
et "toto" sont en A5...je voudrais garder la cellule A4) et supprimer (la
ligne) de toutes celles qui ne correspondent pas au critére
J'aurai ainsi une colonne A avec les données qui m'intéressent!
J'ai essayé avec Find (mais il ne semble pas prendre plusieurs
caractères...).
J'ai essayé avec le caractère "|"
Range("A1:" & [A1].End(xlDown).Address).Select
Selection.Find(What:="|", After:¬tiveCell, LookAt:=xlPart).Activate
Dim Cel As Range
For Each Cel In Selection
If InStr(1, uneCel, "|") = 0 Then Rows(uneCel.Row).Delete
Le problème c'est que j'ai 2 caractères comme critère de Range ("|" et
"toto"...) et je delete la cellule qui est au dessus de la cellule
sélectionnée
Merci de votre aide




Avatar
fred
Je teste en ce moment..et j'essaie de comprendre!!!
Sub test()
For i = Range("A65536").End(xlUp).Row To 1 Step -1 ' i remonte par
saut de 1 chaque ligne en commençant par le bas de la feuille
If InStr(1, Range("A" & i).Value, "|") > 0 And InStr(1, Range("A" &
i).Value, "toto") > 0 '' s'il trouve la chaine "|" et "toto" et i>1
(jusqu'a 1ère ligne)
And i > 1 Then i = i - 1 ' et tant que i>1 on continue à remonter en
sautant une ligne (me semble t-il...pour considérer mon énoncé je garde la
cellule au dessus)
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents ' on
efface la cellule en offset (0,1)
ElseIf InStr(1, Range("A" & i).Value, "|") = 0 Or InStr(1, Range("A"
& i).Value, "toto") = 0 Then
Range("A" & i).EntireRow.Delete 'Sinon si "|" et "toto" sont
absents... on supprime la ligne entière
End If
Next i
End Sub

Ai-je bien compris???
Une dernière demande...si les chaines "|" et "toto" sont sur la ligne (donc
considérer plusieurs colonnes) et non uniquement sur Range ("A65536")...que
dois-je rajouter???

"Daniel" a écrit dans le message de news:
Oum%
Bonjour.
Essaie (pas complétement testé) :

Sub test()
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If InStr(1, Range("A" & i).Value, "|") > 0 And InStr(1, Range("A" &
i).Value, "toto") > 0 _
And i > 1 Then
i = i - 1
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents
ElseIf InStr(1, Range("A" & i).Value, "|") = 0 Or InStr(1,
Range("A" & i).Value, "toto") = 0 Then
Range("A" & i).EntireRow.Delete
End If
Next i
End Sub

Cordialement.
Daniel
"fred" a écrit dans le message de news:
434079a8$0$30640$
Bonjour,
J'ai une feuille de classeur avec une colonne A avec des données.
Avec une macro...j'aimerais grâce à des caractères spécifiques contenues
dans certaines cellules (style "|" et "toto" par exemple)...garder toutes
les cellules comportant ces caractères plus la cellule supérieure (si "|"
et "toto" sont en A5...je voudrais garder la cellule A4) et supprimer (la
ligne) de toutes celles qui ne correspondent pas au critére
J'aurai ainsi une colonne A avec les données qui m'intéressent!
J'ai essayé avec Find (mais il ne semble pas prendre plusieurs
caractères...).
J'ai essayé avec le caractère "|"
Range("A1:" & [A1].End(xlDown).Address).Select
Selection.Find(What:="|", After:¬tiveCell, LookAt:=xlPart).Activate
Dim Cel As Range
For Each Cel In Selection
If InStr(1, uneCel, "|") = 0 Then Rows(uneCel.Row).Delete
Le problème c'est que j'ai 2 caractères comme critère de Range ("|" et
"toto"...) et je delete la cellule qui est au dessus de la cellule
sélectionnée
Merci de votre aide








Avatar
Daniel
Bonsoir.
Tu as tout compris. Pour ce que tu me demandes, essaie le code suivant (non
testé)

Sub test5()
Dim test As Range, Var1 As Range, Var2 As Range
For i = Range("A65536").End(xlUp).Row To 1 Step -1
Set test = Range("A" & i).EntireRow
Set Var1 = test.Find("*|*")
Set Var2 = test.Find("*toto*")
If Not Var1 Is Nothing And Not Var2 Is Nothing And i > 1 Then
i = i - 1
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents
ElseIf Var1 Is Nothing Or Var2 Is Nothing Then
Range("A" & i).EntireRow.Delete
End If
Next i
End Sub

Cordialement.
Daniel
"fred" a écrit dans le message de news:
4341a13c$0$8288$
Je teste en ce moment..et j'essaie de comprendre!!!
Sub test()
For i = Range("A65536").End(xlUp).Row To 1 Step -1 ' i remonte par
saut de 1 chaque ligne en commençant par le bas de la feuille
If InStr(1, Range("A" & i).Value, "|") > 0 And InStr(1, Range("A" &
i).Value, "toto") > 0 '' s'il trouve la chaine "|" et "toto" et i>1
(jusqu'a 1ère ligne)
And i > 1 Then i = i - 1 ' et tant que i>1 on continue à remonter en
sautant une ligne (me semble t-il...pour considérer mon énoncé je garde la
cellule au dessus)
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents '
on efface la cellule en offset (0,1)
ElseIf InStr(1, Range("A" & i).Value, "|") = 0 Or InStr(1,
Range("A" & i).Value, "toto") = 0 Then
Range("A" & i).EntireRow.Delete 'Sinon si "|" et "toto" sont
absents... on supprime la ligne entière
End If
Next i
End Sub

Ai-je bien compris???
Une dernière demande...si les chaines "|" et "toto" sont sur la ligne
(donc considérer plusieurs colonnes) et non uniquement sur Range
("A65536")...que dois-je rajouter???

"Daniel" a écrit dans le message de news:
Oum%
Bonjour.
Essaie (pas complétement testé) :

Sub test()
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If InStr(1, Range("A" & i).Value, "|") > 0 And InStr(1, Range("A"
& i).Value, "toto") > 0 _
And i > 1 Then
i = i - 1
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents
ElseIf InStr(1, Range("A" & i).Value, "|") = 0 Or InStr(1,
Range("A" & i).Value, "toto") = 0 Then
Range("A" & i).EntireRow.Delete
End If
Next i
End Sub

Cordialement.
Daniel
"fred" a écrit dans le message de news:
434079a8$0$30640$
Bonjour,
J'ai une feuille de classeur avec une colonne A avec des données.
Avec une macro...j'aimerais grâce à des caractères spécifiques contenues
dans certaines cellules (style "|" et "toto" par exemple)...garder
toutes les cellules comportant ces caractères plus la cellule supérieure
(si "|" et "toto" sont en A5...je voudrais garder la cellule A4) et
supprimer (la ligne) de toutes celles qui ne correspondent pas au
critére
J'aurai ainsi une colonne A avec les données qui m'intéressent!
J'ai essayé avec Find (mais il ne semble pas prendre plusieurs
caractères...).
J'ai essayé avec le caractère "|"
Range("A1:" & [A1].End(xlDown).Address).Select
Selection.Find(What:="|", After:¬tiveCell, LookAt:=xlPart).Activate
Dim Cel As Range
For Each Cel In Selection
If InStr(1, uneCel, "|") = 0 Then Rows(uneCel.Row).Delete
Le problème c'est que j'ai 2 caractères comme critère de Range ("|" et
"toto"...) et je delete la cellule qui est au dessus de la cellule
sélectionnée
Merci de votre aide












Avatar
fred
Ca fonctionne...super
Je vois que c'est un peu différent comme approche (Set test, Ser Var1, Set
Var2...)...ça éclairci les manips!
Je ne saisis pas tout...mais j'essaye d'avancer.
Je ne comprends pas l'utilité de cette ligne
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents
Merci pour toute l'aide apportée ;)


"Daniel" a écrit dans le message de news:

Bonsoir.
Tu as tout compris. Pour ce que tu me demandes, essaie le code suivant
(non testé)

Sub test5()
Dim test As Range, Var1 As Range, Var2 As Range
For i = Range("A65536").End(xlUp).Row To 1 Step -1
Set test = Range("A" & i).EntireRow
Set Var1 = test.Find("*|*")
Set Var2 = test.Find("*toto*")
If Not Var1 Is Nothing And Not Var2 Is Nothing And i > 1 Then
i = i - 1
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents
ElseIf Var1 Is Nothing Or Var2 Is Nothing Then
Range("A" & i).EntireRow.Delete
End If
Next i
End Sub

Cordialement.
Daniel
"fred" a écrit dans le message de news:
4341a13c$0$8288$
Je teste en ce moment..et j'essaie de comprendre!!!
Sub test()
For i = Range("A65536").End(xlUp).Row To 1 Step -1 ' i remonte par
saut de 1 chaque ligne en commençant par le bas de la feuille
If InStr(1, Range("A" & i).Value, "|") > 0 And InStr(1, Range("A"
& i).Value, "toto") > 0 '' s'il trouve la chaine "|" et "toto" et i>1
(jusqu'a 1ère ligne)
And i > 1 Then i = i - 1 ' et tant que i>1 on continue à remonter en
sautant une ligne (me semble t-il...pour considérer mon énoncé je garde
la cellule au dessus)
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents '
on efface la cellule en offset (0,1)
ElseIf InStr(1, Range("A" & i).Value, "|") = 0 Or InStr(1,
Range("A" & i).Value, "toto") = 0 Then
Range("A" & i).EntireRow.Delete 'Sinon si "|" et "toto"
sont absents... on supprime la ligne entière
End If
Next i
End Sub

Ai-je bien compris???
Une dernière demande...si les chaines "|" et "toto" sont sur la ligne
(donc considérer plusieurs colonnes) et non uniquement sur Range
("A65536")...que dois-je rajouter???

"Daniel" a écrit dans le message de news:
Oum%
Bonjour.
Essaie (pas complétement testé) :

Sub test()
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If InStr(1, Range("A" & i).Value, "|") > 0 And InStr(1, Range("A"
& i).Value, "toto") > 0 _
And i > 1 Then
i = i - 1
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents
ElseIf InStr(1, Range("A" & i).Value, "|") = 0 Or InStr(1,
Range("A" & i).Value, "toto") = 0 Then
Range("A" & i).EntireRow.Delete
End If
Next i
End Sub

Cordialement.
Daniel
"fred" a écrit dans le message de news:
434079a8$0$30640$
Bonjour,
J'ai une feuille de classeur avec une colonne A avec des données.
Avec une macro...j'aimerais grâce à des caractères spécifiques
contenues dans certaines cellules (style "|" et "toto" par
exemple)...garder toutes les cellules comportant ces caractères plus la
cellule supérieure (si "|" et "toto" sont en A5...je voudrais garder la
cellule A4) et supprimer (la ligne) de toutes celles qui ne
correspondent pas au critére
J'aurai ainsi une colonne A avec les données qui m'intéressent!
J'ai essayé avec Find (mais il ne semble pas prendre plusieurs
caractères...).
J'ai essayé avec le caractère "|"
Range("A1:" & [A1].End(xlDown).Address).Select
Selection.Find(What:="|", After:¬tiveCell,
LookAt:=xlPart).Activate
Dim Cel As Range
For Each Cel In Selection
If InStr(1, uneCel, "|") = 0 Then Rows(uneCel.Row).Delete
Le problème c'est que j'ai 2 caractères comme critère de Range ("|" et
"toto"...) et je delete la cellule qui est au dessus de la cellule
sélectionnée
Merci de votre aide
















Avatar
Daniel
Il s'agit de l'effacement des cellules Bx:IVx adjacentes à la cellule
supérieure à celle où l'on a trouvé le texte.
Daniel
"fred" a écrit dans le message de news:
4341b8eb$0$19512$
Ca fonctionne...super
Je vois que c'est un peu différent comme approche (Set test, Ser Var1, Set
Var2...)...ça éclairci les manips!
Je ne saisis pas tout...mais j'essaye d'avancer.
Je ne comprends pas l'utilité de cette ligne
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents
Merci pour toute l'aide apportée ;)


"Daniel" a écrit dans le message de news:

Bonsoir.
Tu as tout compris. Pour ce que tu me demandes, essaie le code suivant
(non testé)

Sub test5()
Dim test As Range, Var1 As Range, Var2 As Range
For i = Range("A65536").End(xlUp).Row To 1 Step -1
Set test = Range("A" & i).EntireRow
Set Var1 = test.Find("*|*")
Set Var2 = test.Find("*toto*")
If Not Var1 Is Nothing And Not Var2 Is Nothing And i > 1 Then
i = i - 1
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents
ElseIf Var1 Is Nothing Or Var2 Is Nothing Then
Range("A" & i).EntireRow.Delete
End If
Next i
End Sub

Cordialement.
Daniel
"fred" a écrit dans le message de news:
4341a13c$0$8288$
Je teste en ce moment..et j'essaie de comprendre!!!
Sub test()
For i = Range("A65536").End(xlUp).Row To 1 Step -1 ' i remonte par
saut de 1 chaque ligne en commençant par le bas de la feuille
If InStr(1, Range("A" & i).Value, "|") > 0 And InStr(1, Range("A"
& i).Value, "toto") > 0 '' s'il trouve la chaine "|" et "toto" et i>1
(jusqu'a 1ère ligne)
And i > 1 Then i = i - 1 ' et tant que i>1 on continue à remonter
en sautant une ligne (me semble t-il...pour considérer mon énoncé je
garde la cellule au dessus)
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents '
on efface la cellule en offset (0,1)
ElseIf InStr(1, Range("A" & i).Value, "|") = 0 Or InStr(1,
Range("A" & i).Value, "toto") = 0 Then
Range("A" & i).EntireRow.Delete 'Sinon si "|" et "toto"
sont absents... on supprime la ligne entière
End If
Next i
End Sub

Ai-je bien compris???
Une dernière demande...si les chaines "|" et "toto" sont sur la ligne
(donc considérer plusieurs colonnes) et non uniquement sur Range
("A65536")...que dois-je rajouter???

"Daniel" a écrit dans le message de news:
Oum%
Bonjour.
Essaie (pas complétement testé) :

Sub test()
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If InStr(1, Range("A" & i).Value, "|") > 0 And InStr(1,
Range("A" & i).Value, "toto") > 0 _
And i > 1 Then
i = i - 1
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents
ElseIf InStr(1, Range("A" & i).Value, "|") = 0 Or InStr(1,
Range("A" & i).Value, "toto") = 0 Then
Range("A" & i).EntireRow.Delete
End If
Next i
End Sub

Cordialement.
Daniel
"fred" a écrit dans le message de news:
434079a8$0$30640$
Bonjour,
J'ai une feuille de classeur avec une colonne A avec des données.
Avec une macro...j'aimerais grâce à des caractères spécifiques
contenues dans certaines cellules (style "|" et "toto" par
exemple)...garder toutes les cellules comportant ces caractères plus
la cellule supérieure (si "|" et "toto" sont en A5...je voudrais
garder la cellule A4) et supprimer (la ligne) de toutes celles qui ne
correspondent pas au critére
J'aurai ainsi une colonne A avec les données qui m'intéressent!
J'ai essayé avec Find (mais il ne semble pas prendre plusieurs
caractères...).
J'ai essayé avec le caractère "|"
Range("A1:" & [A1].End(xlDown).Address).Select
Selection.Find(What:="|", After:¬tiveCell,
LookAt:=xlPart).Activate
Dim Cel As Range
For Each Cel In Selection
If InStr(1, uneCel, "|") = 0 Then Rows(uneCel.Row).Delete
Le problème c'est que j'ai 2 caractères comme critère de Range ("|" et
"toto"...) et je delete la cellule qui est au dessus de la cellule
sélectionnée
Merci de votre aide




















Avatar
fred
Ok pour l'effacement des cellules adjacentes...
Une dernière question. Dans le même contexte...mais si le test find concerne
par exemple des chiffres de code postal ou de téléphone...en terme générique
comme "#####" " ## ## ## ## ## "...j'ai testé mais ça ne fonctionne pas..je
pense que find requiert un terme précis???
Merci tout de même pour tout!

"Daniel" a écrit dans le message de news:

Il s'agit de l'effacement des cellules Bx:IVx adjacentes à la cellule
supérieure à celle où l'on a trouvé le texte.
Daniel
"fred" a écrit dans le message de news:
4341b8eb$0$19512$
Ca fonctionne...super
Je vois que c'est un peu différent comme approche (Set test, Ser Var1,
Set Var2...)...ça éclairci les manips!
Je ne saisis pas tout...mais j'essaye d'avancer.
Je ne comprends pas l'utilité de cette ligne
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents
Merci pour toute l'aide apportée ;)


"Daniel" a écrit dans le message de news:

Bonsoir.
Tu as tout compris. Pour ce que tu me demandes, essaie le code suivant
(non testé)

Sub test5()
Dim test As Range, Var1 As Range, Var2 As Range
For i = Range("A65536").End(xlUp).Row To 1 Step -1
Set test = Range("A" & i).EntireRow
Set Var1 = test.Find("*|*")
Set Var2 = test.Find("*toto*")
If Not Var1 Is Nothing And Not Var2 Is Nothing And i > 1 Then
i = i - 1
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents
ElseIf Var1 Is Nothing Or Var2 Is Nothing Then
Range("A" & i).EntireRow.Delete
End If
Next i
End Sub

Cordialement.
Daniel
"fred" a écrit dans le message de news:
4341a13c$0$8288$
Je teste en ce moment..et j'essaie de comprendre!!!
Sub test()
For i = Range("A65536").End(xlUp).Row To 1 Step -1 ' i remonte par
saut de 1 chaque ligne en commençant par le bas de la feuille
If InStr(1, Range("A" & i).Value, "|") > 0 And InStr(1,
Range("A" & i).Value, "toto") > 0 '' s'il trouve la chaine "|" et
"toto" et i>1 (jusqu'a 1ère ligne)
And i > 1 Then i = i - 1 ' et tant que i>1 on continue à remonter
en sautant une ligne (me semble t-il...pour considérer mon énoncé je
garde la cellule au dessus)
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents
' on efface la cellule en offset (0,1)
ElseIf InStr(1, Range("A" & i).Value, "|") = 0 Or InStr(1,
Range("A" & i).Value, "toto") = 0 Then
Range("A" & i).EntireRow.Delete 'Sinon si "|" et "toto"
sont absents... on supprime la ligne entière
End If
Next i
End Sub

Ai-je bien compris???
Une dernière demande...si les chaines "|" et "toto" sont sur la ligne
(donc considérer plusieurs colonnes) et non uniquement sur Range
("A65536")...que dois-je rajouter???

"Daniel" a écrit dans le message de news:
Oum%
Bonjour.
Essaie (pas complétement testé) :

Sub test()
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If InStr(1, Range("A" & i).Value, "|") > 0 And InStr(1,
Range("A" & i).Value, "toto") > 0 _
And i > 1 Then
i = i - 1
Range("A" & i).Offset(0, 1).Resize(1, 255).ClearContents
ElseIf InStr(1, Range("A" & i).Value, "|") = 0 Or InStr(1,
Range("A" & i).Value, "toto") = 0 Then
Range("A" & i).EntireRow.Delete
End If
Next i
End Sub

Cordialement.
Daniel
"fred" a écrit dans le message de news:
434079a8$0$30640$
Bonjour,
J'ai une feuille de classeur avec une colonne A avec des données.
Avec une macro...j'aimerais grâce à des caractères spécifiques
contenues dans certaines cellules (style "|" et "toto" par
exemple)...garder toutes les cellules comportant ces caractères plus
la cellule supérieure (si "|" et "toto" sont en A5...je voudrais
garder la cellule A4) et supprimer (la ligne) de toutes celles qui ne
correspondent pas au critére
J'aurai ainsi une colonne A avec les données qui m'intéressent!
J'ai essayé avec Find (mais il ne semble pas prendre plusieurs
caractères...).
J'ai essayé avec le caractère "|"
Range("A1:" & [A1].End(xlDown).Address).Select
Selection.Find(What:="|", After:¬tiveCell,
LookAt:=xlPart).Activate
Dim Cel As Range
For Each Cel In Selection
If InStr(1, uneCel, "|") = 0 Then Rows(uneCel.Row).Delete
Le problème c'est que j'ai 2 caractères comme critère de Range ("|"
et "toto"...) et je delete la cellule qui est au dessus de la cellule
sélectionnée
Merci de votre aide