Faisabilite : aide saisie et conversion de données

Bonjour à tous,

je fais appel à votre communauté aujourd’hui pour avoir un avis et éventuellement de l'aide concernant le cas suivant:

apiculteur amateur j'ai fabriqué des code barres pour m'aider dans ma collecte de spécimen inclus dans un projet d'étude à long terme de nos chères butineuses.

je vais essayer d'être clair.

je saisi des données (origine du spécimen) en provenance d'un code à barre "2parmis5" à l'aide d'un douchette dans un tableau word très basique comprenant 2 colonnes 20 lignes. (avant je faisais tout au stylo....)

les données sont affichées sous forme d'une suite numérique à 10 ou 12 digit, à la suite ,ligne après lignes au fur et à mesure que les codes barres sont "scannés" à l'aide la la douchette.

je voudrai gagner un peu de temps à l'aide d'un tableau excel :

  • 1- lorsque je scanne un des codes barres dans la première cellule col.A, les deux premiers digit du nombre soient convertis en une chaîne de 4 lettres prédéfinie affiché dans la colonne B
  • 2- que la date et l'heure de la saisie s'affiche dans la colonne C
3- que la saisie se positionne sur la cellule de la ligne suivante pour une nouvelle saisie.

-4- que la dernière case en bas de mon tableau m'indique le nombre de spécimen collecté (nb de code barre lus)

exp. si la douchette envoie 607032220157 en A.1 alors soit affiché dans la cellule B1 la chaîne de caractères correspondant à "60" c à dire "Ruche Mona"

seuls les 2 premiers digit (nom de la ruche) sont à considérer et à convertir en texte, j'ai 12 ruches concernées pour l'instant .

60 "ruche MONA"

61 "ruche YVON"

62 "ruche GAEL" etc....

Quelle est la solution à laquelle je dois m'attaquer. Complètement ignorant d'excel j'ai lu beaucoup de questions et de solutions dans ce forums mais plus je lis...plus je suis englué...

comment aborder ce problème ?

en vous remerciant pour le temps passé à me lire,

Michel

Salut KenDufides,

un début de solution en VBA qui demande à être complété (noms des ruches) :

Target.Offset(0, 1) = "Ruche " & Choose(iFlag, "Mona", "Yvon", "Gaël")

Pour décoder le reste, ne connaissant pas les codes-barres, faudra expliquer...

Code à coller dans la feuille recevant le scan.

Private Sub Worksheet_Change(ByVal Target As Range)
'
If Not Intersect(Target, Range("A:A")) Is Nothing Then
    If Len(Target) > 0 Then
        Target.NumberFormat = "0"
        iFlag = Val(Left(Target.Value, 2) - 59)
        Target.Offset(0, 1) = "Ruche " & Choose(iFlag, "Mona", "Yvon", "Gaël")
    End If
End If
'
End Sub

A+

Bonjour Curulis57,

un grand merci pour votre aide , après avoir tâtonné longuement j'ai réussi à faire fonctionner le code que vous m'avez aimablement fourni.

Et à comprendre comment il fonctionne !! c'était malin et simple à la fois.

donc mes origines de spécimen n'étant pas toute en 60,61,62... je suis bloqué.

voila la liste complète des origines

05 "FRELO"

06 "VESPA"

08 "LAVAN"

09 "TILLEUL"

12 "VALLE"

39 "CASCA"

43 "CHENE"

44 "CHATAI"

60 "MONA"

61 "YVON"

62 "GAEL"

88 "SUD3"

92 "FERME"

je vais essayer de faire une condition :

avec iFlag = Val(Left(Target.Value, 2)) qui devrait retourner mes deux digit

SI iFlag = 05 ALORS

target.Offset(0, 1) = "FRELO "

c'est l'idée, reste à savoir comment avoir tout ma table d'origine accessible sans avoir a imbriquer des IFNOT....THEN

MErci encore de me mettre sur la voie,

cordialement,

Michel

Salut KenDufides,

une autre solution VBA...

Inconvénient : si ta liste de ruche devait évoluer, tu devrais mettre les mains dans le cambouis pour actualiser la fonction :

Switch(iFlag = 5, "FRELO", iFlag = 6, "VESPA", ...

Il y a encore moyen de faire le travail par une formule 'RECHERCHEV' via un tableau dont la mise à jour, par contre, serait plus aisée.

Private Sub Worksheet_Change(ByVal Target As Range)
'
Application.EnableEvents = False
'
If Not Intersect(Target, Range("A:A")) Is Nothing Then
    If Len(Target) > 0 Then
        Target.NumberFormat = "0"
        iFlag = Val(Left(Target.Value, 2))
        Target.Offset(0, 1) = Switch(iFlag = 5, "FRELO", iFlag = 6, "VESPA", iFlag = 8, "LAVAN", iFlag = 9, "TILLEUL", iFlag = 12, "VALLE", iFlag = 39, "CASCA", _
            iFlag = 43, "CHENE", iFlag = 44, "CHATAI", iFlag = 60, "MONA", iFlag = 61, "YVON", iFlag = 62, "GAEL", iFlag = 88, "SUD3", iFlag = 92, "FERME")
    Else
        Target.Offset(0, 1) = ""
    End If
End If
'
Application.EnableEvents = True
'
End Sub

A+

6ruches.xlsm (17.16 Ko)

bonjour,

veuillez m'excuser pour cette réponse tardive, j'étais en vadrouille.

tout cela marche à merveille...grace a vous !

un grand MERCI a Curulis57 pour votre disponibilité et votre patience.

j'ai appris des petits truc et modifié le code pour ajouter l'heure et la date en troisième colonne (c'était facile)

et changer la couleur de la cellule en fonction de ce qui est saisi ! c'était moins facile mais ça marche !

jai rajouté une cellule pour quand j'y saisi le code de l'apiculteur exp; "MI BA 02" cela me colorie le fond de la cellule en fonction de "BA" pour m'y retrouver dans mes boites, mais là ....c'est autre chose, j'ai affaire à une chaine de caracteres et non plus des chiffres !!

donc j'ai plein de code apiculteurs mais heureusement ils sont tous de la meme forme:

soit "XX BA XX" couleur de boite "rouge"

soit "XX NC XX" couleur de boite "bleu"

soit "XX CE XX" couleur de boite "vert"

j'essaye d'utiliser la fonction : =STXT(texte; numéro_de_départ; nombre_de_caractères)

If Not Intersect(Target, Range("B3:B3")) Is Nothing Then

If Len(Target) > 0 Then

Target.NumberFormat = "@"

iCol = STXT(B3; 4; 2)

If iCol = "NC" Then

Target.Interior.ColorIndex = 42

End If

End If

End If

mais sans succes, erreur de syntaxe ...

qu'en pensez vous ?

Michel

EDIT : VICTOIRE !! j'ai trouvé !

 If Not Intersect(Target, Range("B3:B3")) Is Nothing Then
    If Len(Target) > 0 Then
        Target.NumberFormat = "@"
        iCol = Mid((Range("B3").Value), 4, 2)
        If iCol = "NC" Then
            Target.Interior.ColorIndex = 42
        End If
    End If
End If

quelle satisfaction pour un non initié !!!

Michel

Salut Ken,

belle promenade, par ce beau temps, j'espère!?

Mais, pige pas trop comment ça peut marcher... "B3:B3"...?

If Not Intersect(Target, Range("B3:B3")) Is Nothing Then

Tant mieux, hein!?

A+

Bonsoir,

Je verrai plus ça comme ça (on ne sait pas dans quelle procédure évènementielle se trouve ce code ?) :

If Target.Address(0, 0) <> "B3" Then Exit Sub
If Target.Value = "" Then Exit Sub
If Target.Count > 1 Then Exit Sub

Target.NumberFormat = "@"

If Split(Range("B3").Value, " ")(1) = "NC" Then Target.Interior.ColorIndex = 42
Rechercher des sujets similaires à "faisabilite aide saisie conversion donnees"