Recherche valeur avec condition [Résolu]

Signaler
Messages postés
46
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
8 février 2010
-
Messages postés
46
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
8 février 2010
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
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+
Messages postés
46
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
8 février 2010

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
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
Messages postés
46
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
8 février 2010

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