XL 2019 [Résolu] Problème VBA Find

lebarbo

XLDnaute Occasionnel
Bonjour à tous,

Je me bats avec un code 🤯

Sub Find()
Set Trouve = Sheets("Feuil1").Range(Cells(1, 1), Cells(3, 1)).Find(What:="5200", After:=ActiveCell, LookIn:=xlValues _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)


Z = Trouve.Row

End Sub

En changeant
Sheets("Feuil1").Range(Cells(1, 1), Cells(3, 1))
Par
Sheets("Feuil1").Cells

ça fonctionne mais je ne souhaite pas faire ça.

Le fichier est en PJ ;)

Merci d'avance,
 

Pièces jointes

  • Find.xlsm
    15.1 KB · Affichages: 9
Solution
Bonjour lebarbo, phil69970, le forum

à mon humble avis cela fonctionnera beaucoup mieux comme cela.
VB:
Set Trouve = Sheets("Feuil1").Range(Cells(1, 1), Cells(3, 1)).Find(What:="5200", LookIn:=xlValues _
        , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
votre After:=ActiveCell fait planter dès que la cellule active n'est pas dans la plage de recherche, vous pouvez soit l'enlever ce qui prendra par défaut le début de la plage de recherche, soit le définir vous même au début de la plage de recherche.
Vous pouvez aussi enlever tous les paramètres que vous ne modifiez pas pour la recherche.

Cordialement, @+
Bonjour lebarbo, phil69970, le forum

à mon humble avis cela fonctionnera beaucoup mieux comme cela.
VB:
Set Trouve = Sheets("Feuil1").Range(Cells(1, 1), Cells(3, 1)).Find(What:="5200", LookIn:=xlValues _
        , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
votre After:=ActiveCell fait planter dès que la cellule active n'est pas dans la plage de recherche, vous pouvez soit l'enlever ce qui prendra par défaut le début de la plage de recherche, soit le définir vous même au début de la plage de recherche.
Vous pouvez aussi enlever tous les paramètres que vous ne modifiez pas pour la recherche.

Cordialement, @+
 
Dernière édition:

lebarbo

XLDnaute Occasionnel
Bonjour à tous,
Finalement j'ai encore un problème, si j'exécute ma macro sur une autre feuille que la Feuil1, j'ai une nouvelle erreur :

Sub Find()
Set Trouve = Sheets("Feuil1").Range(Cells(1, 1), Cells(3, 1)).Find(What:="5200", LookIn:=xlValues _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Z = Trouve.Row
End Sub

Merci pour votre aide,
 

Pièces jointes

  • Find.xlsm
    20.6 KB · Affichages: 2
Bonjour

C'est dû à votre façon de noter les références de cellules, là vous ne précisez pas à quelle feuille se rattachent vos cells
Cela fonctionnera mieux comme cela.
VB:
With Sheets("Feuil1")
    Set Trouve = .Range(.Cells(1, 1).Address, .Cells(3, 1).Address).Find(What:="5200", LookIn:=xlValues _
        , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
End With
Mais personnellement, je trouve plus simple d'appeler directement la plage
Code:
Set Trouve = Sheets("Feuil1").Range("A1:A3").Find(What:="5200")

et mettez vos codes dans des balises </>, ce sera plus agréable à lire.

Bien cordialement, @+
 

lebarbo

XLDnaute Occasionnel
Merci Bernard,
ça fonctionne, je ne connaissais pas.
C'est noté pour le code en balise.
Concernant la simplification, je ne passe pas directement par A1:A3 car mon code est une boucle next avec des variables. Ici je l'ai volontairement simplifié.

Bien à vous,
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 949
Membres
101 851
dernier inscrit
vaiata