Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche dans cellule

8 réponses
Avatar
Esox38
Bonjour à tous,

J'ai fait ce bout de code pour rechercher une valeur (avec ou sans
majuscule)dans une sélection de cellule mais j'ai une erreur 424 type
objet requis.

Sub test()
Dim cel As Range
...
If LeftParam = "Oui" Then
ActiveSheet.UsedRange.Select
For Each cel In Selection
If cel.Text = Cells.Find(What:="xxxxxx", After:=ActiveCell,
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:=False).Activate Then
MsgBox ("Ok")'message de test ok ou non
End If
Next

End If

End Sub

Je vois pas en quoi il manque un objet? vous avez un idée.

Merci
Esox

8 réponses

Avatar
Daniel.C
Bonjour.
Qu'est-ce que tu cherches à faire au juste ?
Cordialement.
Daniel


Sub test()
Dim cel As Range
...
If LeftParam = "Oui" Then
ActiveSheet.UsedRange.Select
For Each cel In Selection
If cel.Text = Cells.Find(What:="xxxxxx", After:¬tiveCell,
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Activate Then
MsgBox ("Ok")'message de test ok ou non
End If
Next

End If

End Sub


Avatar
michdenis
Quand tu boucles sur chaque cellule de la plage
la méthode Find va nécessairement au moins une
occurrence, soit celle de la cellule où origine la recherche.

Même si tu indiques de débuter la recherche sur la cellule
suivante (ce qu'elle fait d'ailleurs par défaut), sa boucle se
termine pas la cellule d'où elle est partie et ce dans le cas
où elle n'a pas trouvé ailleurs dans la feuille. Est-ce réellement
le rôle que tu veux faire jouer à la méthode "Find"

'-------------------------------
Sub test()
Dim DerLig As Long, DerCol As Integer
Dim Rg As Range, C As Range
On Error Resume Next
With ActiveSheet
'Définit l'étendue de la plage de la feuille
'Dernière ligne
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
'Dernière colonne
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column

'Attribue à une variable objet seulement
'les cellules n'affichant pas "" ou vide
'de la plage
Set Rg = .Range("A1", .Cells(DerLig, DerCol)). _
SpecialCells(xlCellTypeConstants, 23)
End With
With Rg
'Boucle sur chacune des cellules de la plage
For Each C In .Cells
'voir explication du fil
Set trouve = .Find(C, , xlValues, xlPart, , xlNext, False)
If C = trouve Then
MsgBox ("Ok") 'message de test ok ou non
End If
Next
End With
End Sub
'-------------------------------


"Esox38" a écrit dans le message de groupe de discussion :
49858976$0$18750$
Bonjour à tous,

J'ai fait ce bout de code pour rechercher une valeur (avec ou sans
majuscule)dans une sélection de cellule mais j'ai une erreur 424 type
objet requis.

Sub test()
Dim cel As Range
...
If LeftParam = "Oui" Then
ActiveSheet.UsedRange.Select
For Each cel In Selection
If cel.Text = Cells.Find(What:="xxxxxx", After:¬tiveCell,
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Activate Then
MsgBox ("Ok")'message de test ok ou non
End If
Next

End If

End Sub

Je vois pas en quoi il manque un objet? vous avez un idée.

Merci
Esox
Avatar
Esox38
Bonjour Daniel,

Je cherche le moyen de trouver dans la feuille active une valeur text,
qu'elle soit avec ou sans majuscule. Si il trouve cette valeur alors une
procédure A est lancée, sinon la macro poursuit son exécution.

Au départ j'étais partie sur un solution avec If cel.Text = "XXXX" alors...
Cela fonctionné bien mais pour une recherche exact de la valeur "XXXX"

Le problème est que si le "XXXX" est écrit avec ou sans majuscule par
exemple comme cela "XxxX" alors il ne correspond pas exactement à ce que
l'on cherche, j'ai pas de réponse positif.

Voila pourquoi j'ai intégrer le Cells.Finds.... mais la je me retrouve
avec mon message d'erreur.

Peut être existe-il une solution bien plus simple pour rechercher dans
la feuille la valeur demandée saisie de différentes façons?

Merci
Esox

Daniel.C a écrit :
Bonjour.
Qu'est-ce que tu cherches à faire au juste ?
Cordialement.
Daniel


Sub test()
Dim cel As Range
...
If LeftParam = "Oui" Then
ActiveSheet.UsedRange.Select
For Each cel In Selection
If cel.Text = Cells.Find(What:="xxxxxx",
After:¬tiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:úlse).Activate Then
MsgBox ("Ok")'message de test ok ou non
End If
Next

End If

End Sub






Avatar
Esox38
Bonjour michdenis,

Merci pour ta procédure, elle répond en partie à ma demande, le problème
est que si la valeur rechercher est écrite différemment (majuscule ou
non...) alors la valeur n'est pas trouvée.

Esox

michdenis a écrit :
Quand tu boucles sur chaque cellule de la plage
la méthode Find va nécessairement au moins une
occurrence, soit celle de la cellule où origine la recherche.

Même si tu indiques de débuter la recherche sur la cellule
suivante (ce qu'elle fait d'ailleurs par défaut), sa boucle se
termine pas la cellule d'où elle est partie et ce dans le cas
où elle n'a pas trouvé ailleurs dans la feuille. Est-ce réellement
le rôle que tu veux faire jouer à la méthode "Find"

'-------------------------------
Sub test()
Dim DerLig As Long, DerCol As Integer
Dim Rg As Range, C As Range
On Error Resume Next
With ActiveSheet
'Définit l'étendue de la plage de la feuille
'Dernière ligne
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
'Dernière colonne
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column

'Attribue à une variable objet seulement
'les cellules n'affichant pas "" ou vide
'de la plage
Set Rg = .Range("A1", .Cells(DerLig, DerCol)). _
SpecialCells(xlCellTypeConstants, 23)
End With
With Rg
'Boucle sur chacune des cellules de la plage
For Each C In .Cells
'voir explication du fil
Set trouve = .Find(C, , xlValues, xlPart, , xlNext, False)
If C = trouve Then
MsgBox ("Ok") 'message de test ok ou non
End If
Next
End With
End Sub
'-------------------------------


"Esox38" a écrit dans le message de groupe de discussion :
49858976$0$18750$
Bonjour à tous,

J'ai fait ce bout de code pour rechercher une valeur (avec ou sans
majuscule)dans une sélection de cellule mais j'ai une erreur 424 type
objet requis.

Sub test()
Dim cel As Range
...
If LeftParam = "Oui" Then
ActiveSheet.UsedRange.Select
For Each cel In Selection
If cel.Text = Cells.Find(What:="xxxxxx", After:¬tiveCell,
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Activate Then
MsgBox ("Ok")'message de test ok ou non
End If
Next

End If

End Sub

Je vois pas en quoi il manque un objet? vous avez un idée.

Merci
Esox



Avatar
michdenis
Le paramètre "Match" de la méthode "Find" est là
justement pour ça. Si tu veux qu'il respecte la casse,
tu lui passes la valeur True sinon tu lui attribue la valeur False

Dans cette ligne de code de la procédure, utilise True ou False
selon ce que tu désires :
Set trouve = .Find(C, , xlValues, xlPart, , xlNext, True)




"Esox38" a écrit dans le message de groupe de discussion :
4985af59$0$7886$
Bonjour michdenis,

Merci pour ta procédure, elle répond en partie à ma demande, le problème
est que si la valeur rechercher est écrite différemment (majuscule ou
non...) alors la valeur n'est pas trouvée.

Esox

michdenis a écrit :
Quand tu boucles sur chaque cellule de la plage
la méthode Find va nécessairement au moins une
occurrence, soit celle de la cellule où origine la recherche.

Même si tu indiques de débuter la recherche sur la cellule
suivante (ce qu'elle fait d'ailleurs par défaut), sa boucle se
termine pas la cellule d'où elle est partie et ce dans le cas
où elle n'a pas trouvé ailleurs dans la feuille. Est-ce réellement
le rôle que tu veux faire jouer à la méthode "Find"

'-------------------------------
Sub test()
Dim DerLig As Long, DerCol As Integer
Dim Rg As Range, C As Range
On Error Resume Next
With ActiveSheet
'Définit l'étendue de la plage de la feuille
'Dernière ligne
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
'Dernière colonne
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column

'Attribue à une variable objet seulement
'les cellules n'affichant pas "" ou vide
'de la plage
Set Rg = .Range("A1", .Cells(DerLig, DerCol)). _
SpecialCells(xlCellTypeConstants, 23)
End With
With Rg
'Boucle sur chacune des cellules de la plage
For Each C In .Cells
'voir explication du fil
Set trouve = .Find(C, , xlValues, xlPart, , xlNext, False)
If C = trouve Then
MsgBox ("Ok") 'message de test ok ou non
End If
Next
End With
End Sub
'-------------------------------


"Esox38" a écrit dans le message de groupe de discussion :
49858976$0$18750$
Bonjour à tous,

J'ai fait ce bout de code pour rechercher une valeur (avec ou sans
majuscule)dans une sélection de cellule mais j'ai une erreur 424 type
objet requis.

Sub test()
Dim cel As Range
...
If LeftParam = "Oui" Then
ActiveSheet.UsedRange.Select
For Each cel In Selection
If cel.Text = Cells.Find(What:="xxxxxx", After:¬tiveCell,
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Activate Then
MsgBox ("Ok")'message de test ok ou non
End If
Next

End If

End Sub

Je vois pas en quoi il manque un objet? vous avez un idée.

Merci
Esox



Avatar
Esox38
Merci pour cette précision

Cordialement

michdenis a écrit :
Le paramètre "Match" de la méthode "Find" est là
justement pour ça. Si tu veux qu'il respecte la casse,
tu lui passes la valeur True sinon tu lui attribue la valeur False

Dans cette ligne de code de la procédure, utilise True ou False
selon ce que tu désires :
Set trouve = .Find(C, , xlValues, xlPart, , xlNext, True)




"Esox38" a écrit dans le message de groupe de discussion :
4985af59$0$7886$
Bonjour michdenis,

Merci pour ta procédure, elle répond en partie à ma demande, le problème
est que si la valeur rechercher est écrite différemment (majuscule ou
non...) alors la valeur n'est pas trouvée.

Esox

michdenis a écrit :
Quand tu boucles sur chaque cellule de la plage
la méthode Find va nécessairement au moins une
occurrence, soit celle de la cellule où origine la recherche.

Même si tu indiques de débuter la recherche sur la cellule
suivante (ce qu'elle fait d'ailleurs par défaut), sa boucle se
termine pas la cellule d'où elle est partie et ce dans le cas
où elle n'a pas trouvé ailleurs dans la feuille. Est-ce réellement
le rôle que tu veux faire jouer à la méthode "Find"

'-------------------------------
Sub test()
Dim DerLig As Long, DerCol As Integer
Dim Rg As Range, C As Range
On Error Resume Next
With ActiveSheet
'Définit l'étendue de la plage de la feuille
'Dernière ligne
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
'Dernière colonne
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column

'Attribue à une variable objet seulement
'les cellules n'affichant pas "" ou vide
'de la plage
Set Rg = .Range("A1", .Cells(DerLig, DerCol)). _
SpecialCells(xlCellTypeConstants, 23)
End With
With Rg
'Boucle sur chacune des cellules de la plage
For Each C In .Cells
'voir explication du fil
Set trouve = .Find(C, , xlValues, xlPart, , xlNext, False)
If C = trouve Then
MsgBox ("Ok") 'message de test ok ou non
End If
Next
End With
End Sub
'-------------------------------


"Esox38" a écrit dans le message de groupe de discussion :
49858976$0$18750$
Bonjour à tous,

J'ai fait ce bout de code pour rechercher une valeur (avec ou sans
majuscule)dans une sélection de cellule mais j'ai une erreur 424 type
objet requis.

Sub test()
Dim cel As Range
...
If LeftParam = "Oui" Then
ActiveSheet.UsedRange.Select
For Each cel In Selection
If cel.Text = Cells.Find(What:="xxxxxx", After:¬tiveCell,
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Activate Then
MsgBox ("Ok")'message de test ok ou non
End If
Next

End If

End Sub

Je vois pas en quoi il manque un objet? vous avez un idée.

Merci
Esox





Avatar
Mishell
Il y a 2 façons de faire une recherche:

soit avec une boucle qui passe par toutes les cellules de la sélection
For Each cel In Selection
If cel.Value = "aaa" Then
MsgBox ("Ok") 'message de test ok ou non
End If
Next

soit avec les méthodes FIND et FINDNEXT

Set Sh = Worksheets("Feuil1")
With Sh
With .Range("a1:G200")
Set Trouve = .Find(Mot, , xlValues, xlWhole)

If Not Trouve Is Nothing Then
Adr1 = Trouve.Address
While Adr <> Adr1
Mot = Sh.Cells(Trouve.Row, "E").Value
MsgBox Trouve.Address & " " & Mot
Set Trouve = .FindNext(Trouve)
Adr = Trouve.Address
Wend
End If
End With
End With

Utiliser la méthode FIND dans la boucle For Each cel In Selection
me semble ne conduire nulle part.

Mishell

"Esox38" wrote in message
news:49858976$0$18750$
Bonjour à tous,

J'ai fait ce bout de code pour rechercher une valeur (avec ou sans
majuscule)dans une sélection de cellule mais j'ai une erreur 424 type
objet requis.

Sub test()
Dim cel As Range
...
If LeftParam = "Oui" Then
ActiveSheet.UsedRange.Select
For Each cel In Selection
If cel.Text = Cells.Find(What:="xxxxxx", After:¬tiveCell,
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Activate Then
MsgBox ("Ok")'message de test ok ou non
End If
Next

End If

End Sub

Je vois pas en quoi il manque un objet? vous avez un idée.

Merci
Esox


Avatar
Esox38
Merci pour ces précisions.
Esox

Mishell a écrit :
Il y a 2 façons de faire une recherche:

soit avec une boucle qui passe par toutes les cellules de la sélection
For Each cel In Selection
If cel.Value = "aaa" Then
MsgBox ("Ok") 'message de test ok ou non
End If
Next

soit avec les méthodes FIND et FINDNEXT

Set Sh = Worksheets("Feuil1")
With Sh
With .Range("a1:G200")
Set Trouve = .Find(Mot, , xlValues, xlWhole)

If Not Trouve Is Nothing Then
Adr1 = Trouve.Address
While Adr <> Adr1
Mot = Sh.Cells(Trouve.Row, "E").Value
MsgBox Trouve.Address & " " & Mot
Set Trouve = .FindNext(Trouve)
Adr = Trouve.Address
Wend
End If
End With
End With

Utiliser la méthode FIND dans la boucle For Each cel In Selection
me semble ne conduire nulle part.

Mishell

"Esox38" wrote in message
news:49858976$0$18750$
Bonjour à tous,

J'ai fait ce bout de code pour rechercher une valeur (avec ou sans
majuscule)dans une sélection de cellule mais j'ai une erreur 424 type
objet requis.

Sub test()
Dim cel As Range
...
If LeftParam = "Oui" Then
ActiveSheet.UsedRange.Select
For Each cel In Selection
If cel.Text = Cells.Find(What:="xxxxxx", After:¬tiveCell,
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Activate Then
MsgBox ("Ok")'message de test ok ou non
End If
Next

End If

End Sub

Je vois pas en quoi il manque un objet? vous avez un idée.

Merci
Esox