Convertir un champs dans plusieurs champs voisins

MarioC83 -  
MarioC83 Messages postés 13 Statut Membre -
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

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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
    1. MarioC83 Messages postés 13 Statut Membre
       
      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
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > MarioC83 Messages postés 13 Statut Membre
       
      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
    3. MarioC83 Messages postés 13 Statut Membre
       
      Bonjour yg_be,

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

      Merci encore !
      0
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > MarioC83 Messages postés 13 Statut Membre
       
      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
    5. MarioC83 Messages postés 13 Statut Membre
       
      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