un probleme de recherche qui parait pourtant simple.... - VB/VBA/VBS - Programmation
Marsh Posté le 22-06-2005 à 10:53:00
Après un test rapide pour confirmer mes souvenirs, la fonction .Find ne renvoie pas True ou False mais la valeur recherchée.
Ton code doit être
If Cells.Find(What:=UserForm1.TextBox1.Value, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ |
Le fait d'enlever = True permet de passer dans la boucle pour toutes les valeurs différentes de 0, c'est-à-dire quand la recherche a abouti.
Marsh Posté le 22-06-2005 à 11:41:25
Merci pour ta réponse.
mais si j'enlève le =true il m'envoie une incompatibilté de type sur le
If Cells.Find(What:=UserForm1.TextBox1.Value, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) Then
???
c le blocage complet chez moi là (je crois avoir un peu tout verifié pourtant)..
...
Marsh Posté le 22-06-2005 à 12:25:58
Je pense qu'il vaut mieux partir de
Sheets("feuil3" ).Select |
Je pense que, si ta recherche n'aboutit pas, c'est que les valeurs ne sont pas STRICTEMENT égales.
Pour ma part, quand j'ai des comparaisons à faire, je force Trim() et UCase().
Je te conseille de travailler en mode pas à pas en plaçant des espions pour voir tes valeurs.
Bonne chance.
Marsh Posté le 22-06-2005 à 15:21:57
ben non je suis certain que toutes mes valeurs sont strictement egales : il s'agit d'une lettre unique : "a" ou "b" etc ...
j'ai également essayé de passer par une feuille excel temporaire dans laquelle j'enregistre les valeurs de mon userform pour ne pas faire appel directement aux valeurs du userform (mais ca ne marche pas non plus).
tout se passe comme si la recherche ne marchait pas (et d'ailleurs elle ne marche surement pas !
merci en tout cas pour les conseils
Marsh Posté le 22-06-2005 à 17:21:17
j'ai résolu mon problème (on s'est mis à deux dessus dans le bureau et l'autre est plein d'idée :
du coup ca n'a plus rien à voir avec mes précedentes tentatives mais ca fonctionne :
Sheets("feuil3" ).Select
Rows("2:2" ).Select
Selection.Copy
Sheets("feuil2" ).Select
If Range("feuil3!A10" ).Value = True Then
'avec une petite formule en A10 : =SI(ESTNA(RECHERCHEV(A2;noms_de_ma_base;1;FAUX));FAUX;VRAI)
d = Range("feuil3!A2" ).Value
'A2 = ma valeur que je veux verifier qu'elle existe pas déja dans ma base et que si oui il faut remplacer la ligne (cf début du post)
For Each c In [nom_de_ma_base]
If c = d Then
c.Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End If
Next
Else 'ajouter une ligne à ma base
Range("noms_de_ma_base" ).Select
Rows("2:2" ).Select
Selection.Insert Shift:=xlDown
End If
et ouala !
en tout cas merci pour les conseils
Marsh Posté le 23-06-2005 à 06:01:50
Je reste persuadé que c'est un problème de format (majuscule/minuscule ou espace avant/après).
RechercheV étant moins strict, tu as contourné le problème mais c'est un peu tordu.
Voici l'application dans ton code du conseil que je te donnais plus haut:
Sheets("feuil3" ).Select |
Tu remarqueras que j'utilise la propriété Text plutôt que Value.
Marsh Posté le 22-06-2005 à 10:19:42
pourtant je vous assure que ce problème me paraissait à ma portée :
mon souci : je voudrais effectuer une recherche dans ma colonne A et, si la reponse est positive, remplacer la ligne contenant la cellule par une autre que j'ai copiée préalablement. Si la recherche est negative, continuer mon process.
en gros j'ai tenté ça (c peut etre plus clair) mais visiblement si je n'avais rien écrit ca serait pareil, on passe toujours au Else sans verification:
[
'copie la ligne de remplacement
Sheets("feuil3" ).Select
Rows("2:2" ).Select
Selection.Copy
Range("feuil2!A2" ).Select 'début de ma colonne ou que c que je voudrais faire ma recherche
'la recherche
If Cells.Find(What:=UserForm1.TextBox1.Value, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) = True Then
Cells.Find(What:=UserForm1.TextBox1.Value, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
.Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Else
Rows("2:2" ).Select
Selection.Insert Shift:=xlDown]
Pis j'ai tenté aussi quelquechose par For each mais pareil ca passe au dessus comme de rien, ma recherche ne fonctionne mais je comprends pas pourquoi :
[Sheets("feuil3" ).Select
Rows("2:2" ).Select
Selection.Copy
For Each c In [nom_de_ma_base] 'ma base = la colonne A à peu de chose près
If c.Value = UserForm1.TextBox1.Value Then
c.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Else
Sheets("feuil2" ).Select
Rows("2:2" ).Select
Selection.Insert Shift:=xlDown
End If]
Vous en pensez quoi de tout çà ?