VBA Formulaire Id automatique

Bonsoir,

Je dois faire un formulaire est pour chaque nouvel enregistrement, j'ai besoin de rajouter un Id(numéro de client) unique et qui s'incrémente à chaque fois pour chaque nouveau client

capture bdd

rajouté à ma base de donnée.

Merci,

sparow1.

Bonjour,

la clé primaire est unique et s'incrémente automatiquement..

@+JP

comment l'utilisé en VBA ? sachant que le fomulaire doit etre vierge au départ

Bonjour,

quand tu écris / enregistre une ligne ,

la clé prend "1"

tu peux imaginer "2018" & "000" & "1"

clé : 1

ClientNum : "20180001"

@+JP

ça ne répond pas du tout à ma question.

Je demande au niveau du code, comment je dois faire pour qu'a chaque nouvel enregistrement, un Id(numéro de client) se créer et s'incrémente à chaque fois pour chaque nouveau client rajouté à ma base de donnée. Tout cela de manière automatique, sans devoir ajouter des données manuellement dans ma bdd. La colonne que j'utilise pour cette Id est la 1ere.

Bonjour,

j'ai un doute , ta base de donnée , c'est ton fichier excel ?

@+JP

Bonjour,

ok , j'ai vu la capture , c'est donc ton fichier excel

@+JP

Bonjour,

la dernière ligne (écrite) c'est :

LigneFin = Sheets(OngletName).range("A" & Rows.Count).End(xlUp).Row

le prochain numéro c'est LigneFin et tu écris en LigneFin +1

@+JP

LigneFin = Sheets(Clients).Range("A" & Rows.Count).End(xlUp).Row

je dois déclarer une variable ?? Et comment je fais pour écrire le résultat justement. Désolé je débute vraiment

Bonjour

pour mettre un compteur unique dans un TextBox

TextBox1.Value = Application.Max(Columns(1)) + 1

A+

Maurice

Bonjour,

tu dois insérer un UserForm dans la partie VBA

capture1

Bonsoir,

Si tu veux avoir des réponses pertinentes et adaptées à ce que tu as fais, il va falloir que tu prennes l'habitude de joindre ton fichier à chaque fois que tu poses une question.

Une solution à adapter :

Cells(ligne,1)=Application.WorksheetFunction.Max(Columns(1)) + 1

A+

Bonjour,

dans la boite à outil , tu sélectionnes

capture2

tu ajoutes une étiquette : Label1

capture3

tu ajoutes une texte box : Textbox1

capture4

tu ajoutes un bouton : CommandButton1

capture5

Le numéro ne doit pas être rentré manuellement, il doit être créer et non modifiable par l'utilisateur (de préférence)

Bonjour,

tu as 9 colonnes , il te faut donc 9 textbox

capture6

le numéro de client ne doit pas être accessible , il faut donc verrouiller la textbox1

capture13 capture7

on va maintenant appeler le form

Private Sub CmdFormulaire_Click()
    UserForm1.Show 0
End Sub
capture8

voila la totalité du code

Private OngletName As String
Private LigneFin As Long
Private LigneNew As Long

Private Sub UserForm_Initialize()
    OngletName = "Feuil1"
    Call InitialiseForm
End Sub

Private Sub InitialiseForm()
    If Range("A2").Value = "" Then
        LigneFin = 2
        LigneNew = 2
        Me.TextBox1.Value = 1
    Else
        LigneFin = Sheets(OngletName).Range("A" & Rows.Count).End(xlUp).Row
        Me.TextBox1.Value = LigneFin
        LigneNew = LigneFin + 1
    End If
    For n = 2 To 9
        Me.Controls("Textbox" & n).Value = ""
    Next n
End Sub

Private Sub CmdValider_Click()
    For n = 1 To 9
        Sheets(OngletName).Cells(LigneNew, n).Value = Me.Controls("Textbox" & n).Value
    Next n
    Call InitialiseForm
End Sub

quand le form est chargé ,

on contrôle si c'est le premier enregistrement

on indique le numéro du nouveau client

on efface toutes les "cases"

quand on Valide avec le bouton "Valider"

on boucle sur les 9 "cases" et on écrit les "data"

capture9

on prépare le form pour un autre enregistrement

capture10

on écrit et on prépare...

capture11

le Fichier_JP-v2

@+JP

Bonsoir,

Comme visiblement ton tableau est un objet tableau, ci-dessous le code pour incrémenter automatiquement ton numéro client :

   
    With ActiveSheet.ListObjects(1)
        'si dernière ligne du tableau non vide, ajout d'une ligne
        If .ListColumns("Num Client").DataBodyRange.Rows(.ListRows.Count) <> Empty Then .ListRows.Add
        'incrémentation automatique du numéro de client
        .ListColumns("Num Client").DataBodyRange.Rows(.ListRows.Count) = Application.Max(.ListColumns("Num Client").DataBodyRange) + 1
    End With

"ActiveSheet.ListObjects(1) est l'objet tableau présent sur la feuille active.

Num Client" est le nom de la première colonne de ton tableau.

Application.Max(.ListColumns("Num Client").DataBodyRange) donne le numéro le plus élevé de la colonne Num Client

Bonsoir,

Si tu veux avoir des réponses pertinentes et adaptées à ce que tu as fais, il va falloir que tu prennes l'habitude de joindre ton fichier à chaque fois que tu poses une question.

Une solution à adapter :

Cells(ligne,1)=Application.WorksheetFunction.Max(Columns(1)) + 1

A+

où dois je mettre ce bout de code de l'initialisation de mon userform ? ou sur le bouton pour ajouter un client ?

mjpmjp, merci mais celà mais inutile je sais quand meme les bases, j'ai tout un code derrière qui (comme le montre mon screen) alimente ma base de donnée mais il me manque l'Id automatisé

Bonsoir,

Comme visiblement ton tableau est un objet tableau, ci-dessous le code pour incrémenter automatiquement ton numéro client :

   
    With ActiveSheet.ListObjects(1)
        'si dernière ligne du tableau non vide, ajout d'une ligne
        If .ListColumns("Num Client").DataBodyRange.Rows(.ListRows.Count) <> Empty Then .ListRows.Add
        'incrémentation automatique du numéro de client
        .ListColumns("Num Client").DataBodyRange.Rows(.ListRows.Count) = Application.Max(.ListColumns("Num Client").DataBodyRange) + 1
    End With

"ActiveSheet.ListObjects(1) est l'objet tableau présent sur la feuille active.

Num Client" est le nom de la première colonne de ton tableau.

Application.Max(.ListColumns("Num Client").DataBodyRange) donne le numéro le plus élevé de la colonne Num Client

merci de ta réponse, ce code doit apparaitre à quel endroit exactement ? merci

merci de ta réponse, ce code doit apparaitre à quel endroit exactement ? merci

Ce code correspond à l'ajout d'une ligne au tableau

    
    With ActiveSheet.ListObjects(1)
        'si dernière ligne du tableau non vide, ajout d'une ligne
        If .ListColumns("Num Client").DataBodyRange.Rows(.ListRows.Count) <> Empty Then .ListRows.Add
        'incrémentation automatique du numéro de client
        .ListColumns("Num Client").DataBodyRange.Rows(.ListRows.Count) = Application.Max(.ListColumns("Num Client").DataBodyRange) + 1
        .ListColumns("Nom").DataBodyRange.Rows(.ListRows.Count) = .....
        .ListColumns("Prénom").DataBodyRange.Rows(.ListRows.Count) = .....
        .............................................
    End With

NB : L'incrémentation du numéro de client suit la même logique que celle donnée par Galopin.

Rechercher des sujets similaires à "vba formulaire automatique"