Find VBA

Bonjour les amis,

ci-dessous un code qui cherche un mot clé, saisi dans une textbox, dans une plage. Une fois trouvé, il surligne lla cellule et masque les lignes non colorées.

Mon problème est que si le mot est en colonne B il ne se passe rien....

Pourriez vous m'éclairer ?

PS : fichier joint

Private Sub CommandButton2_Click() 'bouton "Valider"
Dim pl As Range 'déclare la variable pl (Plage)
Dim r1 As Range
Dim pa1 As String
Dim cel As Range 'déclare la variable cel (CELlule)

Application.ScreenUpdating = False 'masque les changements à l'écran

Set pl = Range("A4:B" & Cells(Application.Rows.Count, 1).End(xlUp).Row) 'définit la plage pl
'si la TextBox1 n'est pas vide, définit la recherche r1
If Me.TextBox1 <> "" Then Set r1 = pl.Find(Me.TextBox1.Value, , xlValues, xlPart)
If Not r1 Is Nothing Then 'condition : si il existe au moins une occurrence de la recherche r1
    pa1 = r1.Address 'définit l'adresse de la première occurrence trouvée
    Do 'exécute
        Range(r1, r1.Offset(0, 0)).Interior.ColorIndex = 6 'colore la ligne de jaune
        Set r1 = pl.FindNext(r1) 'redéfinit la recherche r1 (occurrence suivante)
    Loop While Not r1 Is Nothing And r1.Address <> pa1 'boucle tant qu'il existe des occurrences ailleurs qu'en pa1
End If 'fin de la condition

For Each cel In pl.Resize(, pl.Columns.Count - 1) 
    If cel.Interior.ColorIndex = xlNone Then Rows(cel.Row).Hidden = True 'si la cellule n'est pas colorée, masque la ligne de la cellule
Next cel 'prochaine celluile de la boucle
Range("A1").Select 'sélectionne la cellule A1

Application.ScreenUpdating = True 'affiche les changements à l'écran
Unload Me 'vide et ferme l'UserForm
End Sub
10find.xlsm (21.63 Ko)

Sujet déjà existant ici.

Il n'était pas nécessaire d'en créer un nouveau, il suffit de patienter un peu

En effet, mais lui a une pièce jointe ^^

Salut Jahman,

C'est moi ou ton code est super compliqué pour ce que tu veux executer :0 ?

Ci-dessous, comment je ferais :

Private Sub CommandButton2_Click()
Dim c As Range
Set c = Columns("A:B").Find(TextBox1.Value)
c.Interior.ColorIndex = 6
Range("A3:B" & Range("A" & Rows.Count).End(xlUp).Row).AutoFilter Field:=c.Column, Criteria1:=RGB(255, 255, 0), Operator:=xlFilterCellColor
End Sub

A dispo!

Édit : Coucou SlimShady

En effet, mais lui a une pièce jointe ^^

Tu aurais dû rajouter une pièce jointe à ton premier sujet au lieu d'en ouvrir un autre

Merci, en effet, le tiens me parait moins compliqué. Cependant, si un mot clé se trouve en colonne B il se surligne mais la ligne se retrouve masquée car le mot (ou le surlignage) n'est pas en colonne A.

Je voudrais que, quelque soit la colonne, la ligne ne se masque pas

Merci, en effet, le tiens me parait moins compliqué. Cependant, si un mot clé se trouve en colonne B il se surligne mais la ligne se retrouve masquée car le mot (ou le surlignage) n'est pas en colonne A.

Je voudrais que, quelque soit la colonne, la ligne ne se masque pas

J'avais mal exécuté ton code. Alors oui le tien garde bien la ligne, mais j'aimerai éviter les filtres.

Mon fichier d'origine contient beaucoup plus de ligne

Merci, en effet, le tiens me parait moins compliqué. Cependant, si un mot clé se trouve en colonne B il se surligne mais la ligne se retrouve masquée car le mot (ou le surlignage) n'est pas en colonne A.

Je voudrais que, quelque soit la colonne, la ligne ne se masque pas

J'avais mal exécuté ton code. Alors oui le tien garde bien la ligne, mais j'aimerai éviter les filtres.

Mon fichier d'origine contient beaucoup plus de ligne

Justement, si il contient beaucoup de ligne, il vaux mieux utiliser un filtre plutôt que de masquer les lignes une par une via une boucle :p

Mais si tu préfère ta boucle, alors remet ton code qui fonctionne très bien pour le masquage des lignes, et garde mon morceau de code pour mettre en surbrillance l'occurence trouvée

A dispo!

Alors mon soucis n'est pas la surbrillance de la cellule mais le fait que le code masque la ligne si le mot clé est en colonne B, bien que la cellule soit surlignée en jaune.

Aussi, ton code filtre à la 1ere valeur trouvée et ne montre pas toutes les lignes contenant le mot clé

Re-

Ah, il y a plusieurs résultat possible ? Tu nous l'avais pas dit sa ;p

Bon, on va donc passer par une Boucle :

[code][/Private Sub CommandButton2_Click()

Dim p, c, r As Range

Set p = Range("A4:A" & Range("A" & Rows.Count).End(xlUp).Row)

For Each c In p

Set r = Rows(c.Row).Find(TextBox1.Value)

If r Is Nothing Then

Rows(c.Row).EntireRow.Hidden = True

Else

r.Interior.ColorIndex = 6

End If

Next c

End Subcode]

A dispo!

Nan mais t'es sérieux ?! tu veux m'énerver ?! genre la ça fonctionne !!!!! 15 ans que je cherche... Bon jsuis un peu une quiche mais quand même....

T'es trop fort

MERCI pour ton aide^^

Sinon, pour ton code qui filtre sachant qu'il y a plusieurs résultat possible ca donnerai quoi ?? Pour le coup ca m'interesse comme meme...

Sinon, pour ton code qui filtre sachant qu'il y a plusieurs résultat possible ca donnerai quoi ?? Pour le coup ca m'interesse comme meme...

Si les résultats sont tous dans la même colonne, sa ferra un filtre normal :p

Si les résultats sont dans les deux colonnes, sa ne ferra le filtre que dans une seule

Faudrait que tu mette la ligne entière en surbrillance

Mais sa reste plus rapide que la Boucle!

Oui, je viens de constater que sur mon fichier ca plan... ca fonctionne pas très bien hihihi.... c'est peut etre du au 1000 lignes lol

Comment pourrais je faire alors pour le coup ? En partant de ton 1er code

Je comprend plus trop quelle méthode tu veux utiliser x)

Un essai :

Private Sub CommandButton2_Click() 'bouton "Valider"
Dim c, p, r As Range
Set p = Range("A3:B" & Range("A" & Rows.Count).End(xlUp).Row)
For Each c In p
    Set r = Rows(c.Row).Find(TextBox1.Value)
    If Not r Is Nothing Then Range("A" & c.Row & ":B" & c.Row).Interior.ColorIndex = 6
Next c
Range("A3:B" & Range("A" & Rows.Count).End(xlUp).Row).AutoFilter Field:=1, Criteria1:=RGB(255, 255, 0), Operator:=xlFilterCellColor
End Sub

A dispo!

Je l'ai adapté à mon fichier et ca va beaucoup plus vite^^

J'essaye de mettre un code pour enlevé le jaune sur les lignes filtrées.... mais mon code agit sur toute la feuille aie aie aie

Re-

Possibilité de remettre ton fichier avec le code que tu a actuellement, et une explication sur les problèmes que tu rencontre ?

Comme je te disais plus en haut : Je ne sais plus où tu en est x)

A dispo

J'explique dans le fichier ce que j'aimerais, merci

3find.xlsm (21.63 Ko)

Super, merci pour le fichier

Le voilà modifié en retour avec :

  • On retire le filtre
  • On remet à blanc les cellules jaunes
  • On pose la question savoir si l'utilisateur veux refaire une recherche

A dispo!

2pour-jahman.xlsm (24.84 Ko)

Super !! Un énorme merci à toi.

Puis je abuser ? lol

Pour changer le nom du caption pour remplacer "rechercher" par "annuler la recherche" quand rech=1 (c'est bien ça ? j'avoue jsuis perdu avec les variables)

Aussi, qd on re clique sur le bouton, il faudrait oui - non - annuler. Le filtre s'enlève dès lors qu'on clique sur le bouton et il faudrait que le filtre s'enlève que pour les réponses oui ou non.

Aussi, empécher une recherche à vide.

Re-

Fichier joint modifié :

  • Si le champ Textbox1 est vide alors la recherche ne se lance pas
  • MsgBox a les boutons :
- Oui : Enlève le filtre et afficher userform

- Non : Enlève le filtre

- Annuler : Ne fais rien

A dispo

9pour-jahman.xlsm (23.05 Ko)
Rechercher des sujets similaires à "find vba"