probleme de recherche en vba

  • Initiateur de la discussion dj.run
  • Date de début
D

dj.run

Guest
Bonsoir à tous,

une petite question pour finir le week end.

y a t il possibilité en vba de faire une recherche (pour charger un textbox) avec une fonction du style faux que l'on utilise sous excel dans recherchev.... et qui nous renvoit la valeur exacte .

car mon probleme est le suivant :
via un usf je complete une liste de client (à la suite) mais quand je veux recharger une fiche client , cela ne me renvoit pas forcement la bonne fiche.
par exemple dans ma liste j'ai le client 144 et je cree le client 4 qui n'existait pas . mon client 4 va se retrouver apres mon client 144 car c'est cree à la suite et si j'appele la fiche du client 4 il me donne le 1er 4 qu'il rencontre c.a.d. 144. j'aurai la possibilité de faire un tri après chaque creation mais j'ai peur que cela allourdisse la procédure . si j'ai pas le choix je le ferai mais je me posais la question : il y peut etre une autre solution .

merci à vous tous

bonne soirée

dj.run
 
@

@Christophe@

Guest
Bonjour Dj Run

voici pour toi un petit exemple, j'espère avoir bien compris ton problème, lol

Tient moi au courant

Bon weekend

@Christophe@
 

Pièces jointes

  • Chercher.xls
    22 KB · Affichages: 40
  • Chercher.xls
    22 KB · Affichages: 42
  • Chercher.xls
    22 KB · Affichages: 39
D

dj.run

Guest
Bonjour @Christophe@,

merci pour l'exemple (qui plante chez moi à l'execution) je suis sous win98 et office97 pro .

je vais faire un peu de menage dans mon fichier puis je vais le zipper pour te l'envoyer ce sera plus simple .

a tout à l'heure

dj.run
 
@

@Christophe@

Guest
Bonjour a tous

Voici ton fichier révisé.

Pour ton info:

Concernant la recherche, la raison pour laquelle tu trouve 144 et non 4 est que tu cherche avec comme critère: LookAt:=xlPart

J'ai donc remplacé dans ton code xlPart par xlWhole, voir copie du code en desous.

Selection.Find(What:=Textcdsal.Value, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate

En faite xlWhole et xlPart, c'est comme le vrai et faux dans ton rechercheV.

Je t'ai aussi ajouté un contrôle des erreurs, parce que si tu introduit un client inexistant, tu as bug, normal, alors je lui ai ajouté une instruction, Si erreur, aller la, tu verras, facile a comprendre

J'ai egalement changé une petit chose dans le textbox ou tu introduit ton client, comme tu as mis comme evenement _change, des que tu introduit le premier chiffre il commence a chercher, en faite j'ai modifie par _DoubleClick, ce qui fait que tu introduit ton code client et ensuite tu double clic dans le textbox, et il cherche.

Voila en gros

Bonne chance

@Christophe@
 

Pièces jointes

  • Credmodlgillotnetbis1.zip
    27.2 KB · Affichages: 17
  • Credmodlgillotnetbis1.zip
    27.2 KB · Affichages: 20
  • Credmodlgillotnetbis1.zip
    27.2 KB · Affichages: 16
D

dj.run

Guest
re à tous,

@Christophe@, avant tout un grand merci, tu m'as fait avancer et j'ai apris deux choses aujourd'hui

la premiere c'est que de desactiver la mise a jour de l'ecran permet de gagner en temps d'execution.

et la deuxieme c'est la difference entre LookAt:=xlWhole et LookAt:=xlPart
je note tout cela, je note .

par contre si ce n'est pas trop abuser, je voudrai faire un test d'existance quand je cré un nouveau client, j'ai un exemple dans un autre projet (qui fonctionne) mais dans ce projet je n'y arrive pas .
le code que j'ai tapé :


Private Sub creersal_Click()
Application.ScreenUpdating = False
Dim L As Integer
L = Sheets("clients").Range("A3000").End(xlUp).Row + 1
With Sheets("clients")
For Each Cellule In Range("a2:a" & L)
If Cellule.Value = Textcdsal.Value Then
MsgBox ("Ce client existe déja")
Exit Sub
End If
Next Cellule
.Range("A" & L) = Textcdsal.Value ' Code
.Range("B" & L) = Textnomsal ' Nom
.Range("C" & L) = Textmatricule.Value ' Matricule
.Range("D" & L) = Combosociete ' Societe
End With
Sheets("credit").Activate
Unload Me
Application.ScreenUpdating = True
End Sub

le probleme c'est que ça marche pas et je comprends pas pourquoi .
j'arrive à creer plusieurs fois le même code client .

si quelqu'un a une idée .

merci pour votre aide.

dj.run
 
D

dj.run

Guest
re à tous,

j'ai compris mon erreur mais comment la corriger ?

For Each Cellule In Range("a2:a" & L)
If Cellule.Value = Textcdsal.Value Then
MsgBox ("Ce client existe déja")
Exit Sub
End If
Next Cellule

Dans mon autre projet (où ça fonctionne) cela verifit des données alpha et dans mon projet actuel, ce sont des données numériques.

comment puis je corriger cela ??

merci encore pour votre aide

dj.run
 
@

@Christophe@

Guest
Bonjour,

Voici une réponse vite fait bien fait, rire, analyse et dis moi si cela te plait.

Bonne soirée

@Christophe@
 

Pièces jointes

  • Credmodlgillotnetbis1.zip
    31.3 KB · Affichages: 19
  • Credmodlgillotnetbis1.zip
    31.3 KB · Affichages: 17
  • Credmodlgillotnetbis1.zip
    31.3 KB · Affichages: 25
D

dj.run

Guest
Bonjour @Christophe@,

je sais plus quoi faire, chaque fois, je suis pas loin de la solution et j'y arrive pas . je suis vert, bleu, multicolore....

Pour ta solution c'est extra c'est tout a fait cela et ça marche très bien .

mais je devrai trouver des trucs comme cela car après analyse de ton code, la seule chose que je ne connaissais pas c'est : CDbl mais d'autres me l'avait donnés. le problème c'est que je crée mal mon code je suis "brouillon".

y a pas des cours par correspondance ?

car même avec les livres, vos exemples, et votre aide, j'y arrive pas . je suis écœuré .

un grand merci a toi @Christophe@ et aux autres je vais aller les remercier sur l'autre fil .


dj.run
 

Discussions similaires

Réponses
5
Affichages
243

Statistiques des forums

Discussions
312 391
Messages
2 087 983
Membres
103 690
dernier inscrit
LeDuc