Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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, @+

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
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

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…