Matricule alphanumérique en associant le nom de l’onglet, l’année en cours et un compteur de trois c

ksimat

XLDnaute Junior
Bonjour à toutes et à tous,

Je sais qu’il y a eu sur le NET plusieurs postes sur ce sujet mais je n’ai malheureusement pas trouvé de réponse qui règle mon problème. Je voudrais dans une petite base de données générer par macro des matricules automatiques qui seraient composés du nom de l’onglet + l’année en cours + un compteur de trois chiffres commençant par 001.

Je voudrais dès que je saisis le nom de la personne à inscrire en (B2), un matricule alphanumérique lui soit automatiquement assigné en (A2) en récupérant le nom de l'onglet + l’année en cours suivi 3 chiffres (001).

Exemple: Sous l’onglet dénommé MAS le matricule de toto devrait être MAS2017001, celui de son suivant MAS2017002.

Je joins un fichier test pour de plus amples détails.

Merci d’avance à tous ceux qui passeront.

Ksimat
 

Pièces jointes

  • matricule alphanumerique.xlsx
    11.2 KB · Affichages: 57
Dernière édition:

ksimat

XLDnaute Junior
Bonjour ChTi160, les autres,
Ça marche! Merci mille fois et surtout pour la pédagogie. J'ai bien aimé les commentaires sur la structuration et la portée des instructions de la macro. Cela m'a permis de comprendre le pourquoi du blocage et le comment de la solution apportée. D'autres néophytes qui passeront apprendront la leçon car j'ai fait mes plus grandes acquisitions en parcourant les fils ouverts par les autres. Je remercie tous les membres de ce site.

MERCI maître ChTi160!
Et bonne journée à vous aussi!
Ksimat
 

eriiic

XLDnaute Barbatruc
Bonjour,

autre façon un peu allégée :
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim pl As Range, c As Range
    Select Case Sh.Name
    Case "MAS", "DRK", "KLM"
        Set pl = Intersect(Target, Sh.Columns(2), Sh.[2:999])    '999 car limité à 3 chiffres
        If Not pl Is Nothing Then
            For Each c In pl
                If c = "" Then
                    c.Offset(, -1) = ""
                Else
                    With c.Offset(, -1)
                        Application.EnableEvents = False
                        .Value = Sh.Name & Year(Date) & Format(.Row - 1, "000")
                        Application.EnableEvents = True
                    End With
                End If
            Next c
        End If
    End Select
End Sub
eric
 

ChTi160

XLDnaute Barbatruc
Re
Bonjour Eriiiic
Bonjour Le Fil,Le Forum
afin de ne pas se limiter en Lignes Lol
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim pl As Range, c As Range
    Select Case Sh.Name
    Case "MAS", "DRK", "KLM"
        Set pl = Intersect(Target, Sh.Columns(2))    '
        If Not pl Is Nothing Then
             For Each c In pl
                    c.Offset(, -1) = IIf(c = "", "", Sh.Name & Year(Date) & Format(c.Row - 1, "####000"))
            Next c
        End If
    End Select
    Application.CutCopyMode = False
End Sub
merci
Bonne fin de Journée
Amicalement
Jean marie
 
Dernière édition:

ksimat

XLDnaute Junior
Bonjour eriiic, le fil,
eriiiic , merci pour votre code qui marche parfaitement. Mais excusez mon ignorance si je ne comprend pas bien la ligne [ Set pl = Intersect(Target, Sh.Columns(2), Sh.[2:999]) '999 car limité à 3 chiffres].
Merci d'avance à quiconque pourrait éclairer ma lanterne.
Ksimat
 

ksimat

XLDnaute Junior
Re-bonjour eriic, ChTi160, le fil,
eriiic j'ai compris maintenant; merci.
ChTi160, toutes mes excuses pour la réaction tardive: je n'avais pas vu votre 2ème proposition qui tres intéressante. Merci à toi aussi.
Bonne continuation à tous.
Ksimat
 

ksimat

XLDnaute Junior
Re-bonjour eriiiic, ChTi160, le fil
eriiiic je comprends le truc maintenant, merci.
ChTi160, toutes mes excuses pour la réaction tardive. Je n'avais pas vu votre intéressante proposition améliorant l'approche de eriiic. Merci à toi aussi.
Bonne fin de journée à tous.
ksimat
 

Statistiques des forums

Discussions
315 144
Messages
2 116 721
Membres
112 846
dernier inscrit
Filou714