Numérotation automatique

Bonsoir,

Grâce à l'aide de plusieurs d'entre vous et notamment Bruno M45 je me "familiarise" avec les tableaux structurés en VBA (...pas facile).

J'ai voulu modifier un peu le code en faisant apparaître le prochain n° de la ligne de saisie dans la table "TabBdD" à l'initialisation du formulaire avec:

TxtNum = Application.Max([TabBdD[N°]]) + 1

J'ai alors modifié le code du bouton "enregistrer" pour récupérer dans le tableau structuré cette valeur obtenue.

' Inscrire le nouveau numéro
Lo.DataBodyRange(Lig, 1) = TxtNum.Value

Or désormais j'ai un bug et je ne comprends pas ce qui bloque.

Quelqu'un peut-il m'aider?

Merci beaucoup.

Bonjour Sylvain24

Ta procédure Initialize de l'USF n'est pas correcte.

Comme tu as ajouté une colonne avec le numéro, il faut soit récupérer le numéro lorsque c'est une modification
soit créer le nouveau numéro quand c'est un ajout

Voici le code modifié

Private Sub UserForm_Initialize()
  Dim Lig As Long, Cel As Range
  ' Définir le tableau à traiter
  Set Lo = ThisWorkbook.Sheets("BDD").ListObjects("TabBdD")
  ' Remplir les Combo
  Me.cboDirection.Clear
  For Each Cel In Range("TabDir[#Headers]")
    If Cel.Value <> "" Then Me.cboDirection.AddItem Cel
  Next Cel
  Me.CboCategorie.Clear
  For Each Cel In Sheets("Params").Range("TabCat[#Headers]")
    If Cel.Value <> "" Then Me.CboCategorie.AddItem Cel
  Next Cel
  With Me.CboMouvement
    .Clear
    .AddItem "ENTREE"
    .AddItem "SORTIE"
    .Value = "ENTREE"
  End With
  If TypeSaisie = "MODIF" Then
    Me.Caption = "MODIFICATION PLAN et HORS PLAN..."
    Me.BtnAnnulation.Enabled = False
    Lig = LigTab
    Me.TxtNum = Lo.DataBodyRange(Lig, 1)
    Me.txtDate = Lo.DataBodyRange(Lig, 2)
    Me.txtNom = Lo.DataBodyRange(Lig, 3)
    Me.TxtPrenom = Lo.DataBodyRange(Lig, 4)
    Me.cboType = Lo.DataBodyRange(Lig, 5)
    Me.cboMotif = Lo.DataBodyRange(Lig, 6)
    Me.cboBureau = Lo.DataBodyRange(Lig, 8)
    Me.cboDirection = Lo.DataBodyRange(Lig, 7)
    Me.CboCategorie = Lo.DataBodyRange(Lig, 9)
    Me.cboGrade = Lo.DataBodyRange(Lig, 10)
    Me.TxtCoutM = Lo.DataBodyRange(Lig, 11)
    Me.TxtProrata = Lo.DataBodyRange(Lig, 15)
    Me.cboQuotité = Lo.DataBodyRange(Lig, 12)
    Me.cboMoisA = Lo.DataBodyRange(Lig, 13)
    Me.Txt_Cout12m.Value = Lo.DataBodyRange(Lig, 14)
  Else
    TxtNum = Application.Max([TabBdD[N°]]) + 1
    Me.Caption = "NOUVELLE SAISIE PLAN et HORS PLAN..."
  End If
End Sub

A+

Bonjour Bruno45,

Super, merci beaucoup.

Ce sont les vacances je vais pouvoir "bosser" le VBA.

A plus tard.

Rechercher des sujets similaires à "numerotation automatique"