Case avec critères de recherches un peu tordus

Case avec critères de recherches un peu tordus - VB/VBA/VBS - Programmation

Marsh Posté le 26-02-2010 à 18:43:51    

bonjour!
on m'a demander de faire un composant de recherche de références d'articles dans un fichier excel à partir de données issues d'un code barre
le problème est que suivant le fournisseur, le code barre est différents , ainsi j'ai du mal à comparer les données aux références de mon tableaux.
 
J'ai donc réalisé une macro qui me sort les données que je veux, mais à condition de saisir les références à l'identique
 
j'aimerai bcp traiter le champ du combobox (comme limiter le nombre de caractère) avant la recherche
je l'ai fait ainsi avec mes maigres connaissances en VBA
 

Code :
  1. 'If Len(ComboBox1.Text) > 10 Then ' Nombre maxi de caractères
  2.    'ComboBox1.Text = Left(ComboBox1.Text, 10) ' Efface les caractères en trop
  3.    'ComboBox1.SelStart = Len(ComboBox1) ' Replace le curseur à la fin
  4.     ' End If


 
 
Par contre j'ai quelques critères qui rendent la chose plus complexe
par exemple des codes barres Japonais ou la référence est indiquée du 4e au 13 caractère de la chaine: 0104571263624013301
des codes barres de produits americains ou la référence est systématiquement juste avant le caractère '|'
 
 j'utiliserai un CASE
donc ici je fais un truc comme ça
 

Code :
  1. Select Case Len(ComboBox1.Text)
  2. Case Is > 10
  3. ComboBox1.Text = Left(ComboBox1.Text, 10)
  4.    ComboBox1.SelStart = Len(ComboBox1)
  5. End Select


 
 
et ça ne marche pas génial dès que je tombe sur un de ces salops d'américain ou Japonais, forcément
idéalement il me faudrait comme critères:
Case caractère |
garder tout ce qu'il y a avant le |
 
Case commence par 01045 et fait 19 caractère
garder ce qu'il y a entre le 3e et le 14e caractère
 
il me faut du SearchChar je pense, mais en pratique j'ai un peu de mal
 
je vous remercie d'avance!


---------------
"J'adore me promener en ville avec ma décapotable" JFK
Reply

Marsh Posté le 26-02-2010 à 18:43:51   

Reply

Marsh Posté le 26-02-2010 à 21:15:23    

bonjour,
pour résumer...
utilise Instr pour détecter l'emplacement d'un caractère et Mid pour isoler une partie de la chaine.
Commence à stocker la valeur de ton ComboBox1.Text dans une variable ensuite...
Tu peux t'inspirer de ça :

Code :
  1. Sub test()
  2. Var = "1234'678901234|678"
  3. NbC = Len(Var)
  4. gPos = InStr(1, Var, ("'" ))
  5. pPos = InStr(1, Var, ("|" ))
  6. MsgBox gPos
  7. MsgBox pPos
  8. Code = Mid(Var, gPos + 1, pPos - gPos - 1)
  9. MsgBox Code
  10. End Sub


Bien sur à utiliser avec discernement dans tes If (Ya peut-être pas besoin de Select...)
Moi je commencerai par énumérer toutes les variables booléenne qui vont me servir...

Code :
  1. Y1 = NbC > 10
  2. Y2 = gPos > 0
  3. Y3 = pPos > 0


Ensuite tu peux y aller te tes If...

Code :
  1. If Y1 And Y2 Then
  2. ...
  3. ElseIf Y1 And Y3 Then
  4. ...
  5. Else...


A+


Message édité par galopin01 le 26-02-2010 à 21:30:58
Reply

Marsh Posté le 26-02-2010 à 23:56:10    

merci je vais tenter ça dès que j'ai un peu plus de temps!


---------------
"J'adore me promener en ville avec ma décapotable" JFK
Reply

Sujets relatifs:

Leave a Replay

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