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. 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
    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 ?
      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
      2. J'ai une erreur de compilation Attendu : Expression en modifiant mon code par le tiens, il me sélectionne SELECT
      3. bonjour
        c'etait un essai .
        je ne vois pas la solution
      4. Merci quand même
    2. Merci pour vos réponses, j'ai encore quelques problèmes de code mais je devrais y arriver.
      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
        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...
          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 ?
            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 :)