Macro "Recherche une Valeur" dans un Userform

bastien0675 Messages postés 16 Date d'inscription mardi 24 février 2009 Statut Membre Dernière intervention 12 août 2010 - 15 sept. 2009 à 14:01
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 15 sept. 2009 à 14:57
Bonjour,

j'aurai besoin d'un peu d'aide pour une macro que j'ai dans un userform.

Le but est simplement de rechercher dans une colonne (colonne B) une valeur rentrée dans un userform.

La macro ne trouve pas la valeur (et me renvoie un msgbox "book non trouvé" alors qu'elle s'y trouve bien.

voici mon code:

Merci beaucoup pour votre aide!!

Sub Search()

Dim repere As Boolean
Dim trouve As Boolean
Set OngletLiffe = ThisWorkbook.Worksheets("Liffe")

repere = False
trouve = False

If (UserForm1.CbookFO = "") Then
VbookFO = ""
Else
VbookFO = UserForm1.CbookFO
End If


If (VbookFO <> "") Then 'vérifie que le champ de l'userform n'est pas vide

If (Not IsNumeric(VbookFO)) Then 'vérifie que le champ n'est pas numérique
ligne = 1

Do While (repere = False) 'boucle recherchant la valeur
ligne = ligne + 1

If OngletLiffe.Cells(ligne, 2).Text = "" Then
repere = True
End If
If OngletLiffe.Cells(ligne, 2).Text = Val(VbookFO) Then
repere = True
trouve = True
End If
Loop
If (trouve = True) Then
UserForm1.CbookBP2S = OngletLiffe.Cells(ligne, 1)
UserForm1.CbookFO = OngletLiffe.Cells(ligne, 2)
UserForm1.Ctrader = OngletLiffe.Cells(ligne, 3)
UserForm1.Cmiddle = OngletLiffe.Cells(ligne, 4)

Else
MsgBox ("Book non trouvé!")
End If
Else
MsgBox ("Veuillez saisir un book valide")
End If
Else
MsgBox ("Veuillez choisir un book à rechercher SVP")
End If

End Sub

6 réponses

Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
15 sept. 2009 à 14:28
Bonjour,

Tu te trompes dans l'adressage de tes cellules. La syntaxe est Cells(colonne, ligne).


Calade
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
15 sept. 2009 à 14:34
Désolé,

J'ai oublié de te dire que tu devrais indenté tes sources, elles seront beaucoup plus lisibles.

Calade
0
bastien0675 Messages postés 16 Date d'inscription mardi 24 février 2009 Statut Membre Dernière intervention 12 août 2010
15 sept. 2009 à 14:34
je viens de vérifier mais la syntaxe est bien Cells (Rowindex, Columnindex)

Ce qui est bizarre c'est que quand je change les parametre pour que le champs rechercher soit un chiffre, ca fonctionne...

Pourtant mes variables sont biens définies, VbookFO as String..

Merci en tout cas!
0
bastien0675 Messages postés 16 Date d'inscription mardi 24 février 2009 Statut Membre Dernière intervention 12 août 2010
15 sept. 2009 à 14:48
j'ai changé les .Text en .Value et modifié le code de cette manière:


If UCase(OngletLiffe.Cells(ligne, 2).Value) = UCase(VbookFO) Then

Ca fontionne parfaitement

Bastien
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
15 sept. 2009 à 14:55
Désolé,

Effectivement, il faudra que je réapprenne à lire.

Justement j'ai lu la doc un peu plus sérieusement:

La syntaxe 1 utilise un numéro de ligne et un numéro ou une lettre de colonne comme arguments d'index. Pour plus d'informations sur cette syntaxe, consultez l'objet Range. Les arguments RowIndex et ColumnIndex sont des décalages relatifs. En d'autres termes, si l'argument RowIndex a la valeur 1, des cellules contenues dans la première ligne de la plage, pas la première ligne de la feuille de calcul, sont renvoyées. Par exemple, si la sélection est la cellule C3, Selection.Cells(2, 2) renvoie la cellule D4
(vous pouvez utiliser la propriété Item pour indexer hors de la plage d'origine).

La partie souligné en gras m'a interpelé. Essaie en codant directement comme ceci.

....Range("B" & cstr(i))

Calade
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
15 sept. 2009 à 14:57
Nos 2 post se sont croisés. Effectivement je n'avais pas pensé à ça. Il faut éviter de jouer avec les propriétés par défaut (.Value dans ton cas), c'est source d'erreur. En plus en .NET ce ne sont plus les mêmes.


Calade
0
Rejoignez-nous