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
-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+
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