Erreur de déclaration de variable

Bonjour à tous !

Je suis en train de rédiger le code VBA d'un UserForm sur Windows et j'ai pris l'habitude de tester si les variables déclarées fonctionnent bien au fur et à mesure du code. Pour cela je renvoie la valeur de la variable dans un MsgBox.

Voici le code qui me pose problème, pour lequel j'ai une "Erreur d'exécution '91': Variable objet ou variable de bloc With non définie" :

Private Sub CommandButton2_Click()

Dim myValue As String
myValue = CB1.Value + CB2.Value + CB3.Value + CB4.Value

Dim myFind As Range

Set myFind = Range("TableauSOURCE").Find(myValue).Offset(0, 1)
If Not myFind Is Nothing Then
MsgBox (myFind)
End If

End Sub

Je cherche myValue dans la 1ère colonne de mon TableauSOURCE et je fais afficher dans ma MsgBox la valeur située dans la colonne suivante. Or j'ai l'erreur qui remonte malgré plusieurs essais à changer les types, mettre des IF, etc...

Je sais que je déclare mal ma variable mais je ne trouve pas comment faire !

Merci beaucoup pour votre aide,

Patafoin

Bonjour,

Range est un "objet" pas une "valeur". Un objet Range (une ou des cellules) a de nombreuses propriétés en dehors de sa valeur. De plus utiliser () demande au code de l'évaluer et du coup j'imagine que ça plante.

Pour afficher des infos sur votre Range, vous pouvez faire comme ceci :

Private Sub CommandButton2_Click()

Dim myValue As String
myValue = CB1.Value + CB2.Value + CB3.Value + CB4.Value

Dim myFind As Range

Set myFind = Range("TableauSOURCE").Find(myValue).Offset(0, 1)
If Not myFind Is Nothing Then
  MsgBox "Adresse : " & myFind.Address & " | Valeur : " & myFind.Value
End If

End Sub

Bonjour,

Merci pour votre réponse. Hélas j'obtiens la même erreur et le débogueur identifie toujours la même ligne :

Set myFind = Range("TableauSOURCE").Find(myValue).Offset(0, 1)

Pourtant le résultat de myValue est bien présent dans la première colonne de mon TableauSOURCE... Ce tableau est dans une autre feuille que celle où se trouve le bouton ActiveX qui exécute l'UF, mais ça ne change rien même si je rend active la bonne feuille avant de faire le Range et j'obtiens aussi l'erreur.

Merci,

Patafoin

ah oui excusez moi, je n'ai pas pris en compte le fait que votre find était probablement incorrect.

Private Sub CommandButton2_Click()

  Dim myValue As String
  myValue = CB1.Value + CB2.Value + CB3.Value + CB4.Value

  Dim myFind As Range

  Set myFind = Range("TableauSOURCE").Find(myValue)
  If Not myFind Is Nothing Then
    MsgBox "Adresse : " & myFind.Offset(0, 1).Address & " | Valeur : " & myFind.Offset(0, 1).Value
Else
    MsgBox "Rien trouvé"  
End If

End Sub

Si ce sub vous renvoie "rien trouvé" alors votre find ne fonctionne pas. Mais sans le fichier correspondant impossible de vous aider davantage. Prenez le temps de lire les autres paramètres de find Range.Find method (Excel) | Microsoft Learn. Pour info Excel se "rappelle" des paramètres précédents et si pour une raison X ou Y vous aviez mis autre chose que ceux par défaut, ça peut etre une raison.

Edit : pour info les Value des combobox sont du texte. Donc CB1.Value+CB2.Value vous fait une concaténation pas une somme (en VBA "1" + "2" = "12" pas "3", utilisez plutot "&" pour la concaténation de texte que "+" qui est ambivalent)

Effectivement le fichier étant déjà assez complet, je n'ai pas pris le temps de refaire un fichier Test pour que vous ayez le cas de figure exact...

Merci pour l'info des Value des ComboBox, effectivement je souhaite une concaténation, donc le "&" plutôt que le "+" rend l'écriture plus propre.

J'ai finalement trouvé grâce à votre post et en lisant bien un exemple de la méthode Excel :

J'ai modifié mon code comme ceci et cela fonctionne !

Private Sub CommandButton2_Click()

Dim myValue As String

myValue = CB1.Value & CB2.Value & CB3.Value & CB4.Value

Dim myFind As Range

With Worksheets("SOURCE").Range("TableauSOURCE")
Set myFind = .Find(myValue, LookIn:=xlValues)
If Not myFind Is Nothing Then
    'MsgBox "Adresse : " & myFind.Offset(0, 1).Address & " | Valeur : " & myFind.Offset(0, 1).Value
Else
    MsgBox "Rien trouvé"
End If
End With
End Sub

Merci beaucoup !

A bientôt,

Patafoin

Ah top, ce devait être réglé sur un autre paramètre ! Content que vous ayez résolu.

Bonne fin de journée

EDIT : on me souffle dans l'oreillette un autre point : dans l'état, votre code recherche dans tout le tableau. Pour ne rechercher que dans la 1e colonne, écrivez plutôt ceci

Set myFind = Range("TableauSOURCE").ListObject.Listcolumns(1).DataBodyRange.Find(myValue, LookIn:=xlValues)

Merci pour la précision, ça complète le niveau basique que j'ai en VBA !

A bientôt,

Patafoin

Rechercher des sujets similaires à "erreur declaration variable"