XL 2013 Méthode find ne fonctionne pas (résolu)

Cougar

XLDnaute Impliqué
Bonjour le forum,

J'utilise Find pour trouver un mot et allouer un variable à la valeur correspondant au mot. Malheureusement, bien que le mot existe Find ne le trouve pas ?

Voir fichier joint.

Merci de m'aider
 

Pièces jointes

  • Test2.xlsm
    19 KB · Affichages: 17

Theze

XLDnaute Occasionnel
Bonjour,

la méthode Find() n'aime tout simplement pas les cellules fusionnées donc, soit tu "défusionnes" soit tu boucles sur chaque cellule :
Code:
Sub Test()

    Dim Plage As Range
    Dim Cel As Range
    Dim Mot As String
    Dim VE
   
    Set Plage = Range("b1:b100")
   
    Mot = "Encaisseuse"
   
    For Each Cel In Plage
   
        If Cel.Value = Mot Then VE = 0 Else VE = Cel.Offset(1, 2).Value: Exit For

    Next Cel
   
    MsgBox VE
   
End Sub
 

job75

XLDnaute Barbatruc
Bonjour Cougar, Theze,

Peut-être que le 4ème argument de Find était sur xlWhole... Essayez :
Code:
Sub Cherche()
Dim x$, c As Range
x = InputBox("Entrez le texte recherché :")
If x = "" Then Exit Sub
Set c = Cells.Find(x, , xlValues, xlPart)
x = "'" & x & "'"
If c Is Nothing Then msgbox x & " pas trouvé..." Else msgbox x & " trouvé en " & c.Address(0, 0)
End Sub
Edit : "Encaisseuse" est trouvé mais "M305-AVE 300 ML"n'est pas trouvé...

A+
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Cougar, bonjour le forum,

Ton code contient plusieurs erreurs :
• Le texte recherché doit être entre guillemets "Encaisseuse".
• Si tu déclares plusieurs variables sur la même ligne, tu dois en spécifier le type pour chacune d'entre elles.
• Si tu as plusieurs fois le même texte recherché (c'est le cas pour "Encaisseuse"), ton code ne renverra que la première occurrence trouvée.
• Par la suite, n'utilise pas ActiveCell mais Trouve pour récupérer les valeurs...

En revanche, je ne comprends pas pourquoi avec la variable Plage, ça ne marche pas ?!...


VB:
Dim O As Worksheet
Dim VE As Integer, VECB As Integer
Dim Trouve As Range

Set O = Worksheets("Feuil2")

'Valeur présente
  Set Trouve = O.Cells.Find("Encaisseuse", lookat:=xlWhole)

  If Trouve Is Nothing Then
  VE = 0
  Else
  VE = Trouve.Offset(1, 2)
  End If

  Set Trouve = Nothing

'Valeur absente
  Set Trouve = O.Cells.Find("Étiquetteuse", lookat:=xlWhole)

  If Trouve Is Nothing Then
  VECB = 0
  Else
  VECB = Trouve.Offset(1, 2)
  End If

  Set Trouve = Nothing
End Sub

[Édition]
Bonjour Theze, Job, nos posts se sont croisés...
 

job75

XLDnaute Barbatruc
Re, salut Robert,

"M305-AVE 300 ML" sera trouvé si l'on démarre la recherche après la dernière cellule de la feuille (XFD1048576) :
Code:
Sub Cherche()
Dim x$, c As Range
x = InputBox("Entrez le texte recherché :")
If x = "" Then Exit Sub
Set c = Cells.Find(x, Cells(Rows.Count, Columns.Count), xlValues, xlPart)
x = "'" & x & "'"
If c Is Nothing Then msgbox x & " pas trouvé..." Else msgbox x & " trouvé en " & c.Address(0, 0)
End Sub
A+
 

Cougar

XLDnaute Impliqué
Bonjour le fil,

Theze :
Voici le résultat :
'Mot encaisseeuse présent valeur = 219 OK
'Mot étiquetteuse absent valeur = 219 devrait être 0

Robert :
Pour le texte entre guillemets l'aide me disait de ne pas en mettre. :(
Plage était pour délimiter la zone de recherche
Fonctionne très bien.

Job75:
Malheureusement le code fonctionne sur 2 fichiers et j'ai 15 mots à trouver (toujours les mêmes), c'est pourquoi je ne peux utiliser le Inpubox.

Merci à tous pour vos réponses rapides.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa