Menu

[vba] recherche d'une valeur EXACTE [Résolu/Fermé]

cel92 32 Messages postés mercredi 13 février 2008Date d'inscription 16 décembre 2008 Dernière intervention - 13 févr. 2008 à 12:06 - Dernière réponse :  Mimi
- 13 avril 2018 à 16:56
Bonjour,

Débutante en vba,
je recherche la valeur "NumUnique" parmi les cellules "B39 à B200" grâce au code :
"
Set CelluleTrouvee = Range("B39:B200").Find(NumUnique, LookIn:=xlValues)
"

PROBLEME : ma macro ne me retourne pas les cellules de valeur EGALE à la valeur NumUnique recherchée, mais les cellules CONTENANT NumUnique.
Par exemple, si je recherche NumUnique = 2
le résultat est CelluleTrouvee.Value = 52

Connaissez vous une autre fonction me retournant une cellule contenant la valeur exacte recherchée ?
Sinon, auriez-vous un exemple simple permettant de contourner le problème ?

D'avance merci !
Céline
Afficher la suite 

10 réponses

tompols 1227 Messages postés jeudi 29 juillet 2004Date d'inscriptionContributeurStatut 25 novembre 2013 Dernière intervention - 14 févr. 2008 à 12:39
+43
Utile
4
Bonjour,

La méthode Find admet un argument facultatif de type variant "Lookat", les valeurs possibles sont xlWhole ou xlPart...
En reprenant ton exemple, ça fait :

Public Sub test()

Dim numéro As Integer
Dim celluletrouvee As Range
Dim ligne As Integer
Dim col As Integer

numéro = 8

Set celluletrouvee = Range("A1:A5").Find(numéro, lookat:=xlWhole)

If celluletrouvee Is Nothing Then
MsgBox ("pas trouvé")
Else
ligne = celluletrouvee.Row
col = celluletrouvee.Column
MsgBox ("trouvé : ligne = " & ligne & " , colonne = " & col)
End If

End Sub
hich24 1578 Messages postés mardi 2 octobre 2007Date d'inscription 14 décembre 2017 Dernière intervention - 4 mars 2017 à 08:56
merci
Merci ligne de code très utile !
cel92 32 Messages postés mercredi 13 février 2008Date d'inscription 16 décembre 2008 Dernière intervention - 14 févr. 2008 à 13:50
+15
Utile
Merci beaucoup !

l'argument lookat:=xlWhole permet effectivement de rechercher une valeur exacte,
à opposer à lookat:=xlPart qui permet de rechercher une valeur contenue dans la cellule ou la feuille, par défaut en absence d'argument.
jokair8 15 Messages postés mercredi 20 août 2008Date d'inscription 30 septembre 2010 Dernière intervention - 26 août 2008 à 19:34
+6
Utile
Bonjour,

Dans une feuille excel, je cherche à trouver selctionner la cellule contenant la date d'aujourd'hui en cliquant sur une CommandBox:

Voici le code que j'ai mis:

Code :

Private Sub cmd_today_Click()


Dim today As Date
Dim celluletrouvee As Range
Dim ligne As Integer
Dim colonne As Integer

today = Date

Set celluletrouvee = Range("D3:HE3").Find(today, lookat:=xlWhole)

If celluletrouvee Is Nothing Then
MsgBox ("pas trouvé " + Chr(13) + Str(Date))
Else
ligne = celluletrouvee.Row
col = celluletrouvee.Column
MsgBox ("trouvé : ligne = " & ligne & " , colonne = " & colonne)
celluletrouvee.Select
End If

End Sub



Mais, la fonction utilisée ne me trouve aucune cellule (alors que bien sur, il y a une cellule qui contient la date du jour...)
Par contre, cette cellule est une formule (=case de gauche +1)

Merci pour vos contrib'

@+
cel92 32 Messages postés mercredi 13 février 2008Date d'inscription 16 décembre 2008 Dernière intervention - 14 févr. 2008 à 09:57
+4
Utile
Malheureusement, ça ne recherche toujours pas la valeur exacte, mais la valeur contenue.

Ce petit programme test le prouve :

"Public Sub test()

Dim numéro As Integer
Dim celluletrouvee As Range
Dim ligne As Integer
Dim col As Integer

numéro = 8

Set celluletrouvee = Range("A1:A5").Find(numéro)

ligne = celluletrouvee.Row
col = celluletrouvee.Column

MsgBox ("trouvé : ligne = " & ligne & " , colonne = " & col)

End Sub
"

Car elle renvoit les coordonnées d'une cellule contenant le nombre 48, alors que je recherche le nombre 8 !
cel92 32 Messages postés mercredi 13 février 2008Date d'inscription 16 décembre 2008 Dernière intervention - 2 sept. 2008 à 17:30
+3
Utile
Quand tu utilises la méthode find parmi des formules, il faut lui préciser si tu veux comparer ton string avec les formules ou avec leurs résultats :

Essaye avec find(today, lookin:= xlValues, lookat:= xlWhole)
aminea 3 Messages postés vendredi 28 septembre 2007Date d'inscription 13 février 2008 Dernière intervention - 13 févr. 2008 à 14:49
+2
Utile
Bonjour cel92,

Il suffit d'enlever la partie " LookIn:=xlValues" de ton code.