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 SubA+
Bonjour Bruno45,
Super, merci beaucoup.
Ce sont les vacances je vais pouvoir "bosser" le VBA.
A plus tard.