Erreur 91

bonjour le forum ,

j'avais un code qui avais l'aire de fonctionné mais maintenant il me met cette erreur " 91 " "variable objet ou variable bloc with non definie"

Dim  i&, a As Range
With Worksheets("BD_Client")
        Set a = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
           For i = 0 To C2.ListIndex
               TTT8 = a.Find(Me.C2.List(i), , xlValues, xlWhole).Offset(, 6)
               TTT9 = a.Find(Me.C2.List(i), , xlValues, xlWhole).Offset(, 7)
           Next i
  End With

erreur sur cette ligne

 TTT8 = a.Find(Me.C2.List(i), , xlValues, xlWhole).Offset(, 6)

les valeurs renvoyer sont bonne

merci d'avoir pris le temps de me lire !

Bonsoir,

Tu affectes à TTT8 et TTT9 des objets Range si la recherche aboutit... Cette affectation doit se faire avec Set.

bonjour le forum, MFerrand

merci pour ta réponse mais excuse moi ... là je ne vois vraiment pas ce que tu veux dire ! j'ai utilisé "Set" pour désigner l'obje!!

Bonjour,

Voir l'aide de la fonction Range.Find (VBA) :

https://msdn.microsoft.com/fr-fr/vba/excel-vba/articles/range-find-method-excel

Il ne faut pas hésiter à utiliser la touche F1 dans l'éditeur VBE !...

Cdlt.

Bonjour, Salut Jean-Eric !

Si tu t'es penché sur l'article de l'Aide, aimablement fourni par Jean-Eric, tu as peut-être vu où ça péchait et apporté un correctif.

Sinon plus en détail : tu as en effet utilisé Set pour initialiser a, déclarée de type Range, et on peut supposer que tu as vérifié que l'expression à droite du signe = renvoyait bien un objet Range (soit que ta colonne A2 contenait au moins une valeur à partir de A2...)

Par contre, on ne sait ce que sont TTT8 et TTT9 (sinon des variables), ni si elles sont déclarées (on n'en voit pas de déclaration), mais ici à droite du signe = tu as placé une expression qui utilise Range.Find. Cette méthode renvoie un objet Range si la recherche aboutit (rien dans le cas contraire).

Au vu de ton expression à droite du signe = qui devrait initialiser TTT8 (et même chose pour TTT9) avec une référence d'objet, il faut utiliser Set TTT8 = ...

Mais si tu n'entendais pas initialiser TTT8 comme variable Range, c'est alors l'expression à droite de = qui est incomplète si elle doit renvoyer une autre valeur.

(A noter que ta ligne TTT9 double inutilement la même recherche : si la première recherche en col. A aboutit, tu disposeras des cellules en G et H de la même ligne que tu vises.) Mais c'est toi qui sait ce que tu veux en tirer, cela n'apparaît pas dans ton code. Et une fois ce point élucidé, note aussi que tu n'as pas de gestion d'erreur pour le cas où la recherche n'aboutirait pas...

Cordialement.

bonsoir,

merci pour vos réponses , vous m'avez aider a comprendre la fonction "Find"

donc voila mon code final qui fonctionne ! (pour info , TTT8 et 9 ce sont des textbox)

 Dim  i&, x, a As Range
 With Sheets("BD_Client")
 x = C2.ListIndex
 Set a = .Columns(1).Find(Me.C2.List(x, 0), , , xlWhole)
    If Not a Is Nothing Then
        For i = 8 To 9
            Controls("TTT" & i) = .Cells(a.Row, i - 2).Value
         Next i
           End If
    End With

merci encore !

Rechercher des sujets similaires à "erreur"