Recherche valeur avec condition

Résolu
cs_jeyjey1 Messages postés 46 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 8 février 2010 - 1 févr. 2010 à 13:28
cs_jeyjey1 Messages postés 46 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 8 février 2010 - 4 févr. 2010 à 07:43
Bonjour,


j'utilise la fonction find pour trouver dans une plage la valeur "01"

Set C = .Find(What:="01", LookIn:=xlValues)


La tout va bien...

La ou je bloc c'est que j'aimerais qu'il me rapporte toutes les valeurs "01" mais uniquement celles faisant parti d'une chaine de 8 caractères ! (j ai plusieurs chaines dans une cellule)

Auriez vous une idée a me soumettre

Merci

6 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 févr. 2010 à 21:47
Bon ...
1) nous t'avons parlé plus haut de Find et de FindNext pour répérer, jusqu'à trouver la bonne, tes cellules contenant "01"
2) imagine que ta_cellule soit le contenu (string) d'une cellule avec "01" en son sein.
Voici comment vérifier qu'elle est la bonne (exemple):

Dim ta_cellule As String
 ta_cellule = "blabla didi dodo 80012755 blabla"
 MsgBox cherche(ta_cellule)
 ta_cellule = "blabla didi dodo 1180012755 blabla"
 MsgBox cherche(ta_cellule)


Private Function cherche(c As String) As Boolean
  toto = Split(c, " ")
  For i = 0 To UBound(toto)
    If toto(i) Like "########" Then cherche = True
  Next
End Function


Si retour True : OK sinon : tu continues avec FindNext etc...
Tu as maintenant en mains tous les éléments dont tu as besoin pour commencer à travailler ...




____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 févr. 2010 à 14:19
Bonjour,

Je crains fort que dans un tel cas de figure, tu ne doives abandonner la fobnction Find au profit d'une boucle et en utilisant l'opérateur Like
Ou encore ; utiliser la fonction Find (avec au besoin FindNext) jusqu'à ce que, rencontrant une cellule contenant ta chaîne, tu fasses, sur cette cellule, ton test de longueur !

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
1 févr. 2010 à 14:36
Salut,

d'accord avec ucfoutu à propos de la fonction find associé au FindNext par contre si tes données sont ordonnées en ligne ou en colonne tu pourrais pour obtenir un traitement rapide, associer le filtreAuto à une boucle.
- à l'aide du filtreauto tu reccuperes toutes les cellules qui contiennent "01"
- puis tu boucles sur ces dernieres pour en extraire que les chaines de 8 characteres

A+
0
cs_jeyjey1 Messages postés 46 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 8 février 2010
1 févr. 2010 à 14:45
Mes données ne sont absolument pas ordonnées car il s'agit des corps de message d'Outlook..

je suis parti de ce code :

Sub Recherche_Erreur()
With ActiveSheet.UsedRange

Set c = .Find(What:="01", LookIn:=xlValues)
If Len(c.Value) = 8 Then
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Select
Cells(c.Row, 2).Value = j
rep = MsgBox("Valeur trouvée, Cellule : " & c.Address & vbCrLf & "Continuer la recherche ?", vbYesNo, "")

If rep = vbNo Then Exit Sub
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
Else
MsgBox "pas d'erreur"
End If
Else
MsgBox "Aucune donnée"
End If
End With

End Sub


Merci pour votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 févr. 2010 à 20:45
coucou et rappel :

La ou je bloc c'est que j'aimerais qu'il me rapporte toutes les valeurs "01" mais uniquement celles faisant parti d'une chaine de 8 caractères ! (j ai plusieurs chaines dans une cellule)


L'utilisation de la fonction split va de surcroît s'avérer nécessaire .... sauf si ...
sauf si ,quoi ? sauf si tu peux nous assurer de ce que ta chaîne contenant "01" ets :
- séparée des autres chaînes de la cellule pare un caractère spécifique et toujours le même (et lequel)
ou/et
- peut se trouver en début (mais séparée de la chaîne suivante par ce séparateur)
ou/et
- peut se trouver en dernière chaîne, mais précédée par ce séparateur

Je "sens" venir à grands pas, en plus, l'utilisation de l'opérateur Like

Mon avis : tu risques là de payer fort cher une carence lors de la conception... (il vaut toujours mieux réfléchir pendant au moins dix fois plus de temps qu'il n'en faut pour coder... sinon ===>>> acrobaties du genre de celle que tu vas maintenant devoir faire ...)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
cs_jeyjey1 Messages postés 46 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 8 février 2010
4 févr. 2010 à 07:43
Merci pour votre aide. J'ai réussi à faire ce que je voulais, en modifiant ma façon de penser afin de rendre la programmation plus aisée
0
Rejoignez-nous