Macro "Recherche une Valeur" dans un Userform

Signaler
Messages postés
16
Date d'inscription
mardi 24 février 2009
Statut
Membre
Dernière intervention
12 août 2010
-
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
-
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

Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
Bonjour,

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


Calade
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
Désolé,

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

Calade
Messages postés
16
Date d'inscription
mardi 24 février 2009
Statut
Membre
Dernière intervention
12 août 2010

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!
Messages postés
16
Date d'inscription
mardi 24 février 2009
Statut
Membre
Dernière intervention
12 août 2010

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
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
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
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
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