[déplacé VB6 -> VBA] Case qui remplace valeurs d'une combo box

gets7 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 26 février 2010 - 26 févr. 2010 à 16:22
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 26 févr. 2010 à 21:52
Bonjour,
je précise que je suis administrateur réseau et ai rarement l'habitude de développer mis à part en SQL ^^
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 et cela fonctionne
 'If Len(ComboBox1.Text) > 10 Then ' Nombre maxi de caractères

   'ComboBox1.Text =  Left(ComboBox1.Text, 10) ' Efface les caractères en trop
   'ComboBox1.SelStart = Len(ComboBox1) ' Replace le curseur à la fin
    ' 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: 010 457126362401 3301
des codes barres de produits americains ou la référence est systématiquement juste avant le caractère '|'

en SQL j'utiliserai un CASE
donc ici je fais un truc comme ça: (

Select Case Len(ComboBox1.Text)
 Case Is > 10
 ComboBox1.SelStart  = Len(ComboBox1)
End Select


et ça ne marche pas
vous auriez une idée?
et pour les codes barres Japonais? Américains?

je vous remercie d'avance!

10 réponses

gets7 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 26 février 2010
26 févr. 2010 à 16:36
oups pardon ,le code était celui là
Select Case Len(ComboBox1.Text)
 Case Is > 10
 ComboBox1.Text = Left(ComboBox1.Text, 10)
   ComboBox1.SelStart = Len(ComboBox1)
End Select
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
26 févr. 2010 à 18:29
Bonjour,
en utilisant left, tu reprends les caractères à gauche !
Utilise donc Mid :
ComboBox1.Text = Mid(ComboBox1.Text, 4,12)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
gets7 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 26 février 2010
26 févr. 2010 à 18:45
merci
oui mais Mid pas suffisamment précis pour mon utilisation
idéalement il me faudrait comme critères:

Case caractère = "|"
garder tout ce qu'il y a avant le | /ou effacer tout ce qui vient après le |

Case commence par 01045 et fait 19 caractère
garder ce qu'il y a entre le 3e et le 14e caractère


etc...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
26 févr. 2010 à 20:22
On ne voit pas ton "|" dans "0104571263624013301" que tu nous as montré !
Comment ceux-tu qu'on te réponde valablement ?
Je supute alors qu'il faut utiliser la fonction Instr, mais j'aimerais vraiment que les choses soient enfin claires !
A tout hasard, toutefois (je vais essayer de me substituer à toi) :
regarde ce que fait ceci (à main levée)
toto = "blabla|bliblibliblilibonjour"
msgbox mid(toto, instr(toto, "|") + 1, 12)

QSi ce n'est pas cela non plus, il va falloir que tu expliques clairement la logique qui t-e permet de distinguer ! (pas de solution sans logique derrière, clairement définie et toujours valable).
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gets7 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 26 février 2010
26 févr. 2010 à 20:55
j'ai l'impression de me faire engueuler :s

alors désolé je croyais avoir été suffisamment clair quand j'ai dit:
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 '|'


alors voilà qq exemples de codes barres ^^
ECA7403V-1_|S1000010|011587470018113

la référence à chercher est ECA7403V-1

ECM1042_|P5|818660|

la référence à chercher est ECM1042

et pour nos amis Japonais la partie en gras:
01045712636240130000000000

merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
26 févr. 2010 à 21:05
Oui, c'est certain (tu es en train de te faire "engueuler") !
Pardi !
quel est le rapport logique entre tes deux 1ers exemples et le 3ème ? ===>> expose-le !
- 1er exemple :
ECA7403V-1_|S1000010|011587470018113

la référence à chercher est ECA7403V-1

=>>
toto = "ECA7403V-1_|S1000010|011587470018113"
reference = left(toto, instr(toto, "_|') - 1)

- rigoureusement idem pour le second :

Logique commune aux deux : prendre ce qui est à droite de la chaîne "_|"

Et pour le 3ème exemple, quelle logique exacte ?
Le développement informatique passe par bien évidemment par l'établissement d'une logique claire et "indéformable" ! (bis repetita)

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
26 févr. 2010 à 21:11
- Et je t'ai déjà répondu en ce qui concerne l'utilisation de Mid pour "relever" n caractères à partir d'un caractère de rang x
- et l'exemple que je t'ai donné de l'utilisation de Instr (> 0 si la chaîne concernée existe au sein d'une autre chaîne) devrait te permettre de savoir si tu as affaire à une chaîne de type "##########", ou de type "##################" ou de type "####_|##########...", non ? (pour autant que tu te "foules un peu" ou veuilles réellement t'appliquer ! ...


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
26 févr. 2010 à 21:16
Même l'utilisation de l'opérateur Like (ouvre donc ton aide en ligne sur ce mot) ferait ici parfaitement l'affaire (pour peu que tu t'y intéresses)

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
gets7 Messages postés 13 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 26 février 2010
26 févr. 2010 à 21:36
merciiiiiiiiiiii!
bien sur que je m'y intéresse^^
je suis très coutumier des forums, mais dans d'autres rubriques cependant ^^
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
26 févr. 2010 à 21:52
Bon...

je te mets sur la piste avec un petit exemple :

regarde :

Private Sub CommandButton1_Click()
   MsgBox dans_quel_cas("1234567890")
   MsgBox dans_quel_cas("11234567890978456")
   MsgBox dans_quel_cas("blabla_|12345678")
   MsgBox "et ucfoutu m'a montré le code à utiliser dans chaque cas de figure. Je vais relire et appliquer ..."
End Sub

Private Function dans_quel_cas(chaine As String) As String
  If chaine Like "##########" Then
    dans_quel_cas = "cas d'un code barre sur 10 chiffrres"
  ElseIf chaine Like "###########*" Then
    dans_quel_cas = "cas d'un code barre composé de plus de chiffres, mais en nombre supérieur à 10 et je dois prendre les caractères 4 à 13"
  ElseIf chaine Like "*_|##*" Then
    dans_quel_cas = "cas américain et je dois prendre tout ce qui se trouve à gauche de la chaîne _|"
  Else
    dans_quel_cas = " tiens ! je n'avais pas prévu ce cas-là !"
  End If
End Function

Et applique, selon le cas, tes extractions (on les a toutes vues !)

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0