Aide pour une incrémentation

Résolu
Bonjour,
Je souhaite réaliser une base de donnée pour une collection et j'aimerais que ma clé se crée automatiquement, il faudrait quelle récupère les 3 premières lettre d'un mot, les 3 première d'un autre et quelle incrémente un numéro ensuite. Sachant que si les 6 lettres sont différentes, une nouvelle incrémentation commence. En plus il y aurait possibilité d'avoir des doublons dans la collection, du coup j'aimerais rajouter une lettre à la suite des chiffre afin de déterminer si c'est le premier exemplaire(a), le deuxième (b) ....
Est ce possible ou dans mes rêves les plus fous , et si c'est possible, comment faire ?
Je débute totalement avec access.
Merci de vos réponses.

9 réponses

  1. Un truc du genre :
    "livre" "mécanique" => id = "livméc" et si c'est pas le premier "licmécX" où X vaut "a", puis "b", etc ?

    Je te conseille d'avoir quand même une key primaire en numéro auto_increment, parce si tu commence à chercher sur ta clé avec des doublons ça va mettre le bazar (il me semble)

    Je peux pas t'être d'une grande aide à part te souhaiter bon courage pour ton développement :)
    0
    1. Hummm pas tout compris, je débute totalement, mais en gros le code que je veux obtenir sera celui qui permettra de nommer chaque échantillon, donc il faut que je trouve comment réussir à la faire automatiquement. Je me vois mal devoir rentrer ça à chaque fois, surtout devoir retrouver le dernier numéro donné pour mettre le suivant.
      Normalement il ne peut pas y avoir de doublons sur une clé d'après ce que j'ai pu comprendre depuis 2 jours que je débute avec access non ?
      0
      1. Modérateur
        Salut,

        si c'est une clé primaire, alors les doublons sont interdits...

        Pour une clé primaire personnalisée, tu peux faire des recherches sur google, il y a de la matière...
        0
        1. Bonjour
          Un exemple que j'ai utilise dans une base
          Un N°auto plus champ saison.
          Ce qui me créeé une cle primaire dans un champ IdAdhIns

          Saison et IdAdh sont des champs present dans le formulaire
          Ce qui me donne par exemple 2010\2011~1544
          Private Sub IdAdhIns_Enter()
          Dim AdhIns, AdhIns1
          'calcul la clé primaire
          AdhIns = Left([Saison], 9) & "~" & Right([IdAdh], 4)
          'AdhIns1 = Mid([Code activité], 1, 4)
          Me.[IdAdhIns] = AdhIns
          End Sub

          Si cela peut d'aider
          0
          1. Merci pour vos réponses, j'ai encore quelques problèmes de code mais je devrais y arriver.
            0
            1. Voilà mon code :
              Option Compare Database

              Function fNumAutoTxt(strTbl$, strFldAuto$, strTxtStart$, intLenId%) As String
              '** La référence "Microsoft DAO x.x Object Library est nécessaire
              '** sur l'événement "Après mise à jour" qui consitue "strTxtStart"

              Dim rst As DAO.Recordset
              Dim strRst As String
              Dim lngId As Long

              strRst = "Select [" & Clé_espèce & "] From [" & Table_Espèce & "] ORDER BY [" & Clé_espèce & "];"
              Set rst = CurrentDb.OpenRecordset(strRst, dbOpenDynaset)

              With rst
              If Not .BOF Then
              .FindLast "[" & Clé_espèce & "] like """ & Embranchement & Famille & "*"" " & " AND Len([" & Clé_espèce & "]) = " & Len(Embranchement & Famille) + 4
              If .NoMatch = True Then
              lngId = 1
              Else
              lngId = CLng(Mid(.Fields(Clé_espèce), Len(Embranchement & Famille) + 1)) + 1
              End If
              End If
              End With

              rst.Close: Set rst = Nothing

              fNumAutoTxt = Embranchement & Famille & Format(lngId, String(intLenId, "0"))

              End Function

              Private Sub Embranchement_AfterUpdate()
              Me.Clé_espèce = fNumAutoTxt("Table_Espèce", "Clé_espèce", Left(Embranchement, 3) & Left(Famille, 3), 4)
              End Sub

              Private Sub Famille_AfterUpdate()
              Me.Clé_espèce = fNumAutoTxt("Table_Espèce", "Clé_espèce", Left(Embranchement, 3) & Left(Famille, 3), 4)
              End Sub

              J'ai un message d'erreur qui s'affiche : " Erreur d'exécution '3131' Erreur de syntaxe dans la clause FROM. "
              Et la ligne : Set rst = CurrentDb.OpenRecordset(strRst, dbOpenDynaset) est surlignée en jaune.

              Est ce que quelqu'un peut me dire si le code est bon ? ou sinon d'où provient mon erreur ?
              0
              1. bonjour
                J'ai fait une comparaison de synthaxe entre ta raquete et une autre au hasard en reprenant les memes recherches apartir d'une table

                Ma requete

                SELECT T_Dates.IdDate, T_Dates.DateReunion, T_Dates.DateAn, T_Dates.datejour
                FROM T_Dates
                ORDER BY T_Dates.datejour;

                Ta requete

                strRst = "Select [" & Clé_espèce & "] From [" & Table_Espèce & "] ORDER BY [" & Clé_espèce & "];"

                La requete modifié suivant la synthaxe de mon exemple

                strRst = SELECT Table_Espece.Clé_espèce
                FROM Table_Espèce
                ORDER BY Table_Espece.Clé_espèce
                0
              2. J'ai une erreur de compilation Attendu : Expression en modifiant mon code par le tiens, il me sélectionne SELECT
                0
              3. bonjour
                c'etait un essai .
                je ne vois pas la solution
                0
              4. Merci quand même
                0
            2. J'ai réussi après moult tentatives!!
              Voici mon code si ça peut en dépanner quelques uns :

              If IsNull(Me.Clé_espèce) Then
              strCode = AutoNumber("Table_espèce", "Clé_espèce", "??????", 4)
              strCode = Replace(strCode, "??????", Format(Mid$([Embranchement], 1, 3), ">") & Format(Mid$([Famille], 1, 3), ">"))
              Me.Clé_espèce = strCode
              End If
              0