Code avec find qui ne fonctionne plus

Bonjour,

j'ai fait un tableau de suivi il y a quelques semaines.

Dans ce fichier, j'ai une base de données alimentée par des formulaires qui, avec le code ci-dessous, aller rechercher une référence déjà saisie en vue d'une modification.

Private Sub CommandButton3_Click()

Dim Valeur, adresse As Long
Dim plage, résult, reste As Range
Dim feuille As Worksheet

Valeur = TextBox13.Text

Set feuille = ThisWorkbook.Worksheets(2)
Set plage = ThisWorkbook.Worksheets(2).Columns(1)
Set résult = plage.Cells.Find(what:=Valeur, lookat:=xlWhole)

If résult Is Nothing Then
                                                                'Si la valeur n'est pas trouvée, alors
MsgBox ("La référence " & Valeur & " n'a pas été trouvée.")     'la variable adresse devient une boite de message qui affiche le texte entre parenthèses

 Else

adresse = résult.Row

End If

Ce code fonctionnait très bien, jusqu'à avant hier, ou depuis, j'ai la msgbox qui s'ouvre systématiquement.

Aucune valeur recherchée n'est trouvée.

Pouvez-vous, s'il vous plait, m'éclairer sur mon erreur ?

D'avance, merci pour votre aide.

Bonjour roandjepa,

je te propose ce code VBA :

Private Sub CommandButton3_Click()
  Dim feuille As Worksheet, plage As Range, résult As Range, Valeur$, chn$

  Valeur = TextBox13.Text: chn = "La référence " & Valeur

  Set feuille = ThisWorkbook.Worksheets(2): Set plage = feuille.Columns(1)
  Set résult = plage.Cells.Find(Valeur, , xlValues, xlWhole, xlByRows)

  If résult Is Nothing Then
    MsgBox chn & " n'a pas été trouvée."
  Else
    MsgBox chn & "a été trouvée en ligne " & résult.Row
  End If
End Sub

dhany

Bonsoir,

Une piste possible.

Si la colonne 1 de ta feuille n'est pas au format texte et que les références ne contiennent que des chiffres, alors ces références ont été interprétées comme des nombres. La recherche se faisant sur du texte, le "Find" ne trouvera jamais rien.

bonjour,

merci pour vos retours.

j'ai toujours le même soucis. Result est toujours égal à nothing, quoiqu'il arrive.

Je ne comprend pas pourquoi !!!

Bonjour,

Valeur est ce qu'il y a dans TextBox13, et on la cherche en colonne A de la 2ème feuille du classeur ThisWorkbook

* si c'est pas trouvé, faudrait vérifier ta TextBox13 et tes données de la 2ème feuille.

* autre piste : essaye avec TextBox13.Value au lieu de TextBox13.Text ; ou même avec TextBox13 tout court

dhany

bonjour,

merci pour votre aide.

le problème s'est résolu d'une manière que je n'explique pas.

Dans le classeur, il y a un TCD.

En prenant une partie des valeurs de la feuille 2, au lieu de l'ensemble des valeurs, le code s'est mis à fonctionner comme avant.

je ne comprend pas pourquoi, mais ça fonctionne de nouveau.

Mais j'ai un soucis similaire avec un autre code

Option Explicit
Private Sub CommandButton1_Click()

ThisWorkbook.Sheets(2).Range("J5").Value = CDate(TextBox3)
ThisWorkbook.Sheets(2).Range("N5").Value = TextBox2.Value

Dim jour As String, nb As String
Dim R As Range
Dim L  As Integer

nb = ThisWorkbook.Worksheets(2).Cells(2, 8)

jour = TextBox3.Value

Worksheets(nb).Select

Set R = Worksheets(nb).Columns("A").Find(what:=jour, lookat:=xlWhole)

 L = result.Row

Sheets(nb).Range("B" & result) = Sheets(2).Range("P5").Value

Unload Me

End Sub

J'ai le message "Variable non définie" sur result à la ligne "L=result.Row".

Là encore, je ne comprend pas pourquoi.

j'ai utiliser ces déclarations de variable plusieurs fois, et ça à toujours fonctionner.

pour info je recherche une date et le format de cellule de la colonne A est date, également.

et je n'ai pas de TCD.

Bonjour,

Avec Option Explicit en début de code, toutes les variables utilisées doivent être déclarées.

Je suppose que pour toi, result est le résultat du Find

or avec

Set R = Worksheets(nb).Columns("A").Find(what:=jour, lookat:=xlWhole)

le résultat du Find est dans la variable R qui est bien déclarée.

avec

L = result.Row

on tente d'initialiser L avec result qui est une variable non déclarée et non initialisée !

Il faudrait écrire

soit

L = R.Row

soit

Set result = Worksheets(nb).Columns("A").Find(what:=jour, lookat:=xlWhole)

et déclarer la variable result.

mais surtout avant d'utiliser cette variable (R ou result) , il faut être sûr qu'elle contient bien quelque chose ( donc que le find a trouvé ) .

A+

Bonjour AlgoPlus,

je te remercie pour la rapidité de ta réponse.

J'ai modifié mes noms de variables, que j'avais oublié à force de bidouilles

Effectivement, la fonction Find ne renvoi rien, malgré le fait qu'hier, avec ce même code, j'ai pus faire un renvoi du numéro de ligne dans une cellule.

Ca ne fonctionne plus, et je ne comprend pas (grand chose peut-être).

Je joins le fichier pour une meilleure compréhension.

Merci d'avance.

11copie-de-hv.xlsm (272.55 Ko)

J'ai réussis à tout faire fonctionner avec ce code:

Private Sub CommandButton1_Click()

ThisWorkbook.Sheets(2).Range("J5").Value = CDate(TextBox3)
ThisWorkbook.Sheets(2).Range("N5").Value = TextBox2.Value

Dim jour As Date, nb As String
Dim R As Range
Dim L  As Integer

nb = ThisWorkbook.Worksheets(2).Cells(2, 8)

jour = Date

Set R = Worksheets(nb).Columns(1).Find(what:=jour, LookIn:=xlValues)

 L = R.Row

Sheets(nb).Range("B" & L) = Sheets(2).Range("P5").Value

Unload Me

End Sub

merci encore pour votre aide

Rechercher des sujets similaires à "code find qui fonctionne"