un probleme de recherche qui parait pourtant simple....

un probleme de recherche qui parait pourtant simple.... - VB/VBA/VBS - Programmation

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 çà ?  
 
 

Reply

Marsh Posté le 22-06-2005 à 10:19:42   

Reply

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:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) Then


 
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.

Reply

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)..
...  

Reply

Marsh Posté le 22-06-2005 à 12:25:58    

Je pense qu'il vaut mieux partir de

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
Next c


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.


Message édité par AlainTech le 22-06-2005 à 12:26:54

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

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  
 

Reply

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  

Reply

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  
  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 Ucase(Trim(c.Text)) = UCase(Trim(UserForm1.TextBox1.Text)) 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  
Next c


Tu remarqueras que j'utilise la propriété Text plutôt que Value.


Message édité par AlainTech le 23-06-2005 à 06:07:31

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed