Génération automatique code d'enregistrement

Bonjour à tous,

Après avoir recherché nombre d'informations sur le forum qui m'ont permis de faire avancer mon projet, j'ai franchi le pas de l'inscription suite à une question restée sans réponse ou sans équivalent. Pour information, j'ai quelques bases en VBA mais rien de bien impressionnant.

J'ai récupéré un projet sur le site que j'ai adapté à mes contraintes.

L'objectif est de pouvoir enregistrer des informations via un userform pour ensuite les archiver informatiquement et physiquement pour revenir dessus en cas de besoin.

Aujourd'hui, ce qu'il me reste à faire est pour chaque nouvel enregistrement, générer automatiquement un code unique, qui correspond à un dossier réel archivé.

Pour ce faire, j'ai créé un code du type TRYyymmddXXX. Exemple, si je dois enregistrer un premier dossier aujourd'hui, le code serait TRY130603001. Le second serait alors TRY130603002 etc.

J'arrive sans problème à générer le début du code TRYyymmdd seulement le compteur qui vient ensuite reste à 1. Voici mon code:

Sub CodeTRY()

Dim CodeTRY As String

Dim NouveauNum As Integer

NouveauNum = NouveauNum + 1

CodeTRY = "TRY" & Format(Date, "yymmdd") & Format(NouveauNum, "000")

TextBox9 = CodeTRY

End Sub

Le problème: le compteur NouveauNum reste affiché à 001. Ensuite, ce mode d'enregistrement ne fonctionne pas puisque le compteur XXX s'incrémenerait tout le temps alors que je souhaiterais qu'il reparte de 001 chaque jour.

Pour information, le compteur s'incrémente à chaque ouverture du Userform.

Quelqu'un aurait-il une solution ou une piste pour moi?

Par avance, merci

Clément

Bonjour,

A la lecture de ta demande, je pense qu'il vaudrait mieux mettre ton fichier en ligne pour t'aider

Est-ce possible ?

A te relire

Voila le projet.

J'ai placé les lignes de code dans le sub userform_intialize() .

Clément

RE,

Corrige tes codes comme suit :

1. Dans Private Sub UserForm_Initialize()

- Supprime Dim NouveauNum As Integer (Il est déjà en entête de toutes tes macros et doit rester là !)

2. Dans la Private Sub CommandButton1_Click()

  • Supprime les deux lignes "Unload Me" et "UserForm1.Show"
  • Ajoute en début cette instruction -> Dim codetry As String
  • Copie le code ci-dessous qui est dans la Private Sub UserForm_Initialize() et colle le juste avant le END SUB
NouveauNum = NouveauNum + 1
codetry = "TRY" & Format(Date, "yymmdd") & Format(NouveauNum, "000")
TextBox9 = codetry

Tout cela suppose que tu ne complètes ton fichier qu'une seule fois par jour. Sinon dès que tu fermeras ton USF le compte repartira à 0.

Si ok, clique sur le V vert à coté du bouton EDITER lors de ta réponse pour cloturer le fil

Amicalement

Tout cela suppose que tu ne complètes ton fichier qu'une seule fois par jour. Sinon dès que tu fermeras ton USF le compte repartira à 0.

Le hic est que le fichier va être modifié plusieurs fois par jour. Comment faire pour que le comptage reprenne là où il s'est arrêté?

Clément

re,

là c'est moins évident car il faut aller controler dans la référence si la date est identique ou supérieure à la dernière enregistrée et ensuite pour cette date récupérer le dernier numéro enregistré.

De l'analyse à faire donc et à retranscrire dans ton code

je regarde cela

Re,

J'avais essayé en copiant le code sans les 3 caractères alpha puis en comparant les données, mais je n'arrivais à rien.

Merci pour ton aide.

Clément

re,

Est-il pensable d'enlever les trois lettres TRY ?

A te relire

Je devrais pouvoir m'en sortir même sans les lettres. Ca aurait été mieux de les conserver mais a priori elles semblent dérangeantes.

Dans ce cas je pourrais toujours rajouter les lettres dans la BDD dans une autre colonne avec une formule.

Clément

Les 3 lettres peuvent effectivement être supprimées.

Clément

Re,

Voici le code que j'ai tenté, qui ne fonctionne pas.

A chaque nouvel enregistrement, j'enregistre la date dans la colonne L. Ensuite je recherche la date la plus récente que je compare avec la date actuelle. Si les dates sont différentes, je génere un nouveau code TRY, sinon j'incrémente mon compteur CPT1.

Le code généré est toujours TRYyymmdd001

Dim Codetry As String

Dim Cpt1 As Integer

Dim Lig As Long

Dim memo As Date

For Lig = 2 To Range("L65536").End(xlUp).Row

If DateValue(Cells(Lig, 1)) > memo Then

memo = DateValue(Cells(Lig, 1))

End If

Next Lig

If Format(memo, "yyyymmdd") <> Format(Date, "yyyymmdd") Then

Cpt1 = 1

Else

Cpt1 = Cpt1 + 1

End If

Codetry = "TRY" & Format(Date, "yymmdd") & Format(Cpt1, "000")

TextBox9 = Codetry

Re,

Fais ceci :

  • Dans ton fichier colonne I, supprime tous les "Try"
  • Remplace le code "Private Sub UserForm_Initialize()" par celui ci-après :
Private Sub UserForm_Initialize()
'Dan : Macro modifée le 05/06/13
Label27.Caption = "Mode : Création"
CommandButton5.Visible = True
CommandButton6.Visible = True
initialisecombo
TextBox1 = Year(Date)
Me.TextBox2.SetFocus

If Left(WorksheetFunction.Max(Range("I2:I" & Range("I" & Rows.Count).End(xlUp).Row)), 6) = Format(Date, "yymmdd") Then
NouveauNum = Right(WorksheetFunction.Max(Range("I2:I" & Range("I" & Rows.Count).End(xlUp).Row)), 3) + 1
Else: NouveauNum = NouveauNum + 1
End If
TextBox9 = Format(Date, "yymmdd") & Format(NouveauNum, "000")
End Sub
  • En début de code "Private Sub CommandButton1_Click()", supprime --> Dim codetry As String
  • Dans le code "Private Sub CommandButton1_Click()", entre END WITH et END SUB, place les 2 lignes ci-après
NouveauNum = NouveauNum + 1
TextBox9 = Format(Date, "yymmdd") & Format(NouveauNum, "000")

Si ok, lors de ta réponse clique sur le V vert à coté du bouton EDITER pour cloturer le fil

Amicalement

Merci beaucoup ce fonctionne très bien !

Clément

Re bonjour,

Après quelques jours d'utilisation, je me suis aperçu que les numéros générés repartaient à 1 après chaque fermeture du classeur. Il m'arrive donc d'avoir plusieurs codes identiques dans la même journée.

Y-a-t-il possibilité de modifier le code?

Clément

re,

J'avais testé cette éventualité et pas de souci avec ce que je t'ai proposé

Merci de me donner le fichier dont tu sers afin que je vérifie

Amicalement

Re,

Je remet en ligne le projet sur lequel je travail, qui a bien évolué depuis la version précédente. Cependant, j'ai été obligé de retirer l'une des bases de données qui contient des informations confidentielles.

Mon projet reel contient plus de lignes mais je suis limité en taille de PJ.

Depuis la dernière version, j'ai été obligé de rajouter l'ensemble des numéros tryptiques déjà enregistrés, et n'ayant pas le même type de codification. Exemple, avant les numéros étaient inscrits "à la louche" donc 1,2,3,10,11,500,501,60211 etc. On inscrivait un numéro susceptible d'être disponible. Aujourd'hui, je ne peux pas supprimer ou modifier ces anciens numéros (tout est déjà archivé) et le système doit donc en tenir compte. Je ne sais pas si ce sont ces anciens numéros qui perturbent ton code.

Le nouveau numéro de Référence est YYMMDDXXX sachant que d'anciens numéros se trouvent dans la BDD.

J'abuse peut-être de ton aide mais j'ai également les problèmes suivants (avec lesquels je sature)

1- J'ai un numéro de pochette qui doit prendre la 1ère valeur disponible (max + 1) à chaque nouvel enregistrement. Le problème est le même que précédemment, le numéro est remis à 0 à chaque ouverture du fichier alors qu'il devrait prendre la 1ere valeur disponible à la suite des autres.

2- Lorsque j'effectue une recherche avec mes combobox, il arrive que celle-ci n'affiche pas les bonnes informations. Exemple je recherche le 130614001 et la combobox me redonne les informations du 130611001. Idem pour le 133 qui m'affiche les données du 1. Ce sont 2 exemples qui arrivent régulièrement.

Je pense que mon projet contient quelques petites erreurs qui demandent beaucoup de temps de réflexion pour un néophite comme moi !

Merci de ton aide

Clément

EDIT: Après recherche dans mon programme, il s'avère que j'avais laissé actif le "unload me" contrairement a ce que tu m'avais dis. C'est maintenant reglé et ca fonctionne ! Tout partait donc d'une erreur de ma part et ton code fonctionnait depuis le debut !

J'ai également solvé le problème de n° de pochette de la même manière (comme quoi un programme tient à peu de choses).

Pour ce qui est de la recherche avec le n° 133, je pense qu'il y a un lien avec le fait qu'il existe un n° 133A qui peut perturber la recherche parce que la recherche fonctionne avec tous les autres n° sauf ceux qui ont une variation en XXXXXA - XXXXXB etc.

20enreg-try-v2.zip (106.77 Ko)

Re,

J'avais une erreur à l'ouverture de ton USF.

le DIM i as double est une erreur là dans la sub intialisecombo

Avant de regarder ton souci, voici quelques modifications à faire

A tester mais Ta "Public Sub initialisecombo()" peut être celle-ci.

Public Sub initialisecombo()
Dim i As Integer
With Sheets("feuil2")
    For i = 2 To .Range("a65536").End(xlUp).Row
        ComboBox1.AddItem .Cells(i, 10)
        ComboBox4.AddItem .Cells(i, 14)
    Next i
End With
End Sub

Maintenant pourquoi ne pas mettre cela dans la "Private Sub UserForm_Initialize" à la place de l'instruction "Initialisecombo". ce serait plus simple.

Attention aussi que ta variable i utilise la colonne A et que si tu veux tout dans ta combo 1 et 4, il faut que tu aies une donnée dans ta colonne A pour les colonnes 10 (combobox1) et 14 (combobox 4)

Autre sujet :

Dans la Private Sub CommandButton1_Click(), l'instruction "UserForm1.Show False" ne sert pas puisque tu as juste avant "Unload Me"

Là si tu veux pouvoir encore entrer de nouvelles données, enlève ces deux instructions

UNLOAD.ME et USERFORM1.SHOW = FALSE

Pour quitter, l'USERFORM soit tu utilises la croix ou le bouton ANNULER

Fais le test et dis moi si tout est ok. Ensuite je regarderai ta demande points 1 et 2

A te relire

Bonjour,

Je viens d'effectuer les modifs que tu préconisais. La modification du "i" en integer n'a pas posé de problèmes.

"Maintenant pourquoi ne pas mettre cela dans la "Private Sub UserForm_Initialize" à la place de l'instruction "Initialisecombo". ce serait plus simple." => Je me sert de cette instruction ailleurs, d'où la necessité de conserver le sub.

J'ai également supprimé les "unload me" et "userform1.show FALSE". Sur la version 2003 d'excel je ne rencontre aucun problème de lancement, cependant sur les versions plus récentes j'ai un message d'erreur à l'ouverture de l'userform.

Ensuite, dans les combobox, le dernier enregistrement n'est jamais trouvé. il faut fermer le UF pour le trouver. J'ai essayé de mettre à jour les champs après chaque enregistrement mais pas de résultats.

Clément

Rechercher des sujets similaires à "generation automatique code enregistrement"