Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1070 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1127079
cocal
Posté le 22-06-2005 à 10:19:42  profilanswer
 

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

mood
Publicité
Posté le 22-06-2005 à 10:19:42  profilanswer
 

n°1127135
tegu
Posté le 22-06-2005 à 10:53:00  profilanswer
 

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.

n°1127221
cocal
Posté le 22-06-2005 à 11:41:25  profilanswer
 

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

n°1127269
AlainTech
Pas trouvé? Cherche encore!
Posté le 22-06-2005 à 12:25:58  profilanswer
 

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!
n°1127490
cocal
Posté le 22-06-2005 à 15:21:57  profilanswer
 

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  
 

n°1127701
cocal
Posté le 22-06-2005 à 17:21:17  profilanswer
 

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  

n°1128165
AlainTech
Pas trouvé? Cherche encore!
Posté le 23-06-2005 à 06:01:50  profilanswer
 

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!

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
Problème de loginprobleme alignement!
Problème pour transformer des iframes en style CSS ?Probleme VbSCRIPT evolué / HTML
Problème Incongru VbScript / HTMLproblème avec select multiple
Probleme d'image éspacées[html] recherche a faire une sorte de frames
IMAP et probleme Recent UnseenProbléme variable espace
Plus de sujets relatifs à : un probleme de recherche qui parait pourtant simple....


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)