Convertir un champs dans plusieurs champs voisins

Fermé
MarioC83 - 25 nov. 2019 à 14:59
MarioC83 Messages postés 13 Date d'inscription mardi 19 novembre 2019 Statut Membre Dernière intervention 12 mars 2023 - 29 nov. 2019 à 13:11
Bonjour,


Je suis nouveau sur ACCESS 2016.
Je cherche à convertir ("convertir" = langage Excel) un champ qui est entrée à l'aide d'une douchette à code barres dans plusieurs champs voisins.
Je sais comment réaliser cette tâche avec EXCEL et une macro mais pour ACCESS j'en ai aucune idée.

Le format du champ à convertir est le suivant :
SL234567T;A1-B;2;1;28.88;24;149

Qui devrait se convertir en 6 champs soit :
NoContrat : SL234567T
NoModel: A1-B
Qté : 2
NbPli : 1
Longueur : 28.88
NbMcx : 24
NbPmp : 149

Merci à l'avance pour votre aide et explications.

Bonne journée !

Configuration: iPhone / Safari 10.0

1 réponse

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
25 nov. 2019 à 16:17
bonjour,
Excel et Access sont très différents.
que veux-tu réellement réaliser? veux-tu créer de nouveaux enregistrements dans une table Access contenant les 7 champs que tu indiques?
si oui, je pense à ces options:
1) enregistrer les données entrées via la douchette comme des nouveaux enregistrements dans une table temporaire, et, régulièrement, vider cette table et créer les enregistrements dans la table finale.
2) utiliser un formulaire utilisé pour l'encodage via la douchette. ce formulaire stockerait les données directement dans la table finale
3) garder ta logique actuelle, et adapter ta macro à Access. si tu veux de l'aide pour cela, peux-tu partager le code de ta macro?
1
MarioC83 Messages postés 13 Date d'inscription mardi 19 novembre 2019 Statut Membre Dernière intervention 12 mars 2023
26 nov. 2019 à 04:05
Bonjour yg_be,

Merci pour ta réponse.

Ce que je cherche à faire c'est de créer une table à 10 champs qui se remplierait à la lecture d'un seul code (Code QR). Chaque code scanné représenterait un enregistrement différent.
Les champs seraient comme suit :
#1 : NoAuto
#2 : Code scanné (par exemple : SL234567T;A1-B;2;1;28.88;24;149)
#3 : NoContrat : SL234567T
#4 : NoModel: A1-B
#5 : Qté : 2
#6 : NbPli : 1
#7 : Longueur : 28.88
#8 : NbMcx : 24
#9 : NbPmp : 149
#10 : Date/Heure de la création de l'enregistrement

Comme je suis nouveau sur Access et que j'apprends de manière autonome, je ne comprend pas les options proposées 1 et 2. Ce que je cherche à faire c'est plutôt ton option 3, mais je ne sais vraiment pas comment y arriver sous Access.

Le module de macro que j'utilise pour convertir les codes dans Excel c'est le suivant :

Sub Macro1()

Range("A3:A503").Select
Selection.Copy
Range("B3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Range("B3"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1)), TrailingMinusNumbers:=True
End Sub

Merci encore pour ton aide ! :)
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > MarioC83 Messages postés 13 Date d'inscription mardi 19 novembre 2019 Statut Membre Dernière intervention 12 mars 2023
26 nov. 2019 à 10:42
il faut maintenant déterminer ce que va faire la macro dans Access.
je suggère que la macro travaille sur tous les enregistrements où le code scanné est non vide.
sur tous ces enregistrements, la macro remplirait les champs 3 à 9, et viderait le champ 2.
qu'en penses-tu?
0
MarioC83 Messages postés 13 Date d'inscription mardi 19 novembre 2019 Statut Membre Dernière intervention 12 mars 2023
26 nov. 2019 à 13:49
Bonjour yg_be,

Si cette option est possible, ça serait très satisfaisant pour moi.

Merci encore !
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > MarioC83 Messages postés 13 Date d'inscription mardi 19 novembre 2019 Statut Membre Dernière intervention 12 mars 2023
26 nov. 2019 à 15:36
voici une suggestion:
Option Explicit
Sub mariosplit()
Dim rs As DAO.Recordset, code As String, champ, numchamp As Integer, nomschamps
nomschamps = Array("NoContrat", "NoModel", "Qté", "NbPli", "Longueur", "NbMcx", "NbPmp")
Set rs = CurrentDb.OpenRecordset("select * from " + "latabledemarioc83" + " where [Code scanné] is not null")
Do While Not rs.EOF
    code = rs![Code scanné]
    numchamp = 0
    rs.Edit
    For Each champ In Split(code, ";", 7)
        rs.Fields(nomschamps(numchamp)) = champ
        numchamp = numchamp + 1
    Next champ
    rs![Code scanné] = Null
    rs.Update
    rs.MoveNext
Loop
End Sub
0
MarioC83 Messages postés 13 Date d'inscription mardi 19 novembre 2019 Statut Membre Dernière intervention 12 mars 2023
29 nov. 2019 à 06:10
Bonjour yg_be,

Je suis en questionnement, à votre avis, ne serait-ce pas plus simple de faire des champs calculés dans la même table ?
Par exemple, quelle serait l'expression (dans les champs 3 et 4) adéquate dans un champs calculé pour sortir de SL234567T;A1-B;2;1;28.88;24;149

SL2344567T dans le 3e champs et
149 dans le 4e champs ?

Le nombre de caractères par champ peut différer d'un enregistrement à l'autre.

Merci !
0