VBA N°client automatique incrémenté

Bonsoir j' crée un usf, et je voudrais avoir un numéro de client du genre CLT-1 incrémente à chaque fois je valide un client,

Si possible rappelé les données dans l'usf avec une combobox pour toute modification éventuel de se client ;

Merci et si joint mon usf déjà un peu compilé.

185vba1.xlsm (50.17 Ko)

Salut,

Dans ton fichier, tu as un chiffre en A2 de la seule feuille présente. Si j’ouvre le UserForm par la macro ‘Private Sub VALIDER_Click’ (se serait plus facile de l’ouvrir par un bouton), le numéro en A2 est incrémenté de 1 dans le TextBox ‘N_CLIENT’. Qu’est-ce qui ne te convient pas avec cette solution ? Est-ce qu’au lieu d’avoir une incrémentation 1, 2, 3, etc., tu voudrais avoir une incrémentation CLT-1, CLT-2, etc. ?

A te relire.

Bonsoir Yvouille,

Oui c'est ou à fait sa je voudrais une incrémentation pluto avec CLT-1?CLT-2 CLT3 etc.. pour mon code client

Déjà merci pour ta réponse

Un essai en annexe.

Amicalement.

317vba-v2.xlsm (42.88 Ko)

Bonjour,

@Yvouille : Si j'ai bien compris la demande, Kira souhaite se faire une base de données Clients, avec en Ligne 2 : CLT-1, en ligne 3 : CLT-2 etc... Ta solution incrémente bien le n° de client, mais écrase systématiquement la ligne précédente.

@Kira : Si tu souhaites une base comme indiqué ci-dessus, en reprenant le code d'Yvouille, cela donne :

Private Sub userForm_Initialize()
jour = Date ' la date du jour dans une textbox lors de l'ouverture de l'userform .
'Correspond au programme du FORMULAIRE
Dim Ws As WorkSheet
Dim Ligne As Integer

  Set Ws = Sheets("CLIENT") 'Attention ce nom doit correspondre au nom de votre ONGLET

  ' affiche le n° dans l'UserForm1 dans ma colonne A qui est ma textbox22
  Ligne = Ws.Range("A65536").End(xlUp).Row 'Permet de se positionner sur la dernière ligne de tableau
    If Ligne = 1 Then
      UserForm1.N_CLIENT = "CLT-" 1
    Else
      UserForm1.N_CLIENT = "CLT-" & Right(Cells(Ligne, 1), Len(Cells(Ligne, 1)) - 4) + 1
    End If
End Sub

Et dans le code du bouton :

Private Sub VALIDER_Click()
Dim L As Integer

If MsgBox("Etes-vous certain de vouloir INSERER ce nouveau contact ?", vbYesNo, "Demande de confirmation") = vbYes Then
    L = Sheets("CLIENT").Range("A65536").End(xlUp).Row + 1
    Range("A" & L).Value = N_CLIENT 'colonne vide qui me servira de pointage ou de numérotation automatique.
    'Bla bla bla
    'le reste du code ici
End If
Unload Me 'Ferme le formulaire
UserForm1.Show 'Ouvre le formulaire
End Sub

Petit conseil supplémentaire : Pour éviter de déclarer systématiquement le nom complet de la feuille, puisque l'UserForm s'adresse en particulier à la feuille Client, je déclarerai Wsh_Clients en tête du Module de l'UserForm, comme ceci :

Option Explicit

Dim Wsh_Clients As WorkSheet

Private Sub userForm_Initialize()
'à l'ouverture du Formulaire, on initialise notre variable :
Set Wsh_Clients = Sheets("CLIENT")
'bla bla bla
End Sub

'Et maintenant on peut utiliser cette variable dans tous les 
'codes du Module de l'UserForm. Comme ceci :
Private Sub VALIDER_Click()
Dim L As Integer

If MsgBox("Etes-vous certain de vouloir INSERER ce nouveau contact ?", vbYesNo, "Demande de confirmation") = vbYes Then
    L = Wsh_Clients.Range("A65536").End(xlUp).Row + 1
    'bla bla bla
End If
End Sub

Salut Pijaku,

L’ancien code de Kira écrasait le chiffre inscrit en A2. Dans un tel cas je laisse les choses comme elles étaient avant à ce niveau et je réponds uniquement à la demande du membre ; qui sait, peut-être veut-il cela ainsi Ou peut-être que mon petit coup de main lui permet de résoudre lui-même la suite du problème

Ensuite, si le membre me dit : « C’est bien ce que tu as fait mais je constate encore ce problème ….. » alors je tente de résoudre le nouveau problème exposé.

Cordialement.

Bonjour Yvouille,

Tu as entièrement raison... Je n'ai répondu qu'en lisant la question et sans consulter le code de Kira.

Bon... Il (elle) dispose maintenant de plusieurs solutions et pourra choisir celle qui convient à son souci.

Bonne journée à toi

@++

Bonjour et merci à vous deux ,

Je vais essayer cela et vous tien au parfum.

Et j'ai testé la feuille c'est ok mais si ma ligne A2 est vide à la base j'ai une erreur donc je suis obligé déjà d'inscrire un numéro pour que la numérotation incrémenté soit prise en compte du genre CLT-1,

Il faut que si ma base est vide au départ lorsque je valide mon usf mon code se génère directement .

Dite moi SVP voilà code compilé par vous

UserForm1.N_CLIENT = "CLT-" & Right(Cells(Ligne, 1), Len(Cells(Ligne, 1)) - 4) + 1

et le mien

UserForm1.N_CLIENT = Cells(Ligne, 1) + 1

Donc dite moi quoi correspond le

Len(Cells(Ligne, 1)) - 4) + 1

Re,

Len détermine la longueur d’une chaine / Right prend en compte un certain nombre de signes à droite d’une chaine ; la chaine dans laquelle est pris l’extrait étant le premier argument de la fonction, le nombre de signe à prendre en compte étant le deuxième argument.

La longueur de la chaine CLT-1 est par exemple de 5, la longueur de la chaine CLT-122 est par exemple 7. Si tu enlèves 4 à ces deux chiffres, tu obtiens 1 dans le premier cas et 3 dans le deuxième cas. Si maintenant tu indiques que dans la chaine CLT-1 il ne faut retenir que 1 argument tout à droite, tu trouveras 1 et si tu indiques que dans la chaine CLT-122 il ne faut retenir que 3 arguments tout à droite, tu trouveras 122. Si j’ajoute 1 à 1, ça donne 2. Si j’ajoute 1 à 122, ça donne 123. Si je reconstruis une nouvelle chaine en y ajoutant CLT- devant, j’obtiens dans le premier cas CLT-2 et dans le deuxième cas CLT-123.

Dans ton cas, ce n’est pas la ligne que tu nous fournis qui crée problème, mais deux lignes plus en avant, soit :

    If Ligne = 3 Then
      UserForm1.N_CLIENT = "0"

Tu dois les transformer de la manière suivante :

    If Ligne = 1 Then
      UserForm1.N_CLIENT = "CLT-1"

Mais je ne sais toujours pas où tu veux en venir avec ton code. Veux-tu aller dans le sens de Pijaku qui t’indique qu’il faut incrémenter tes lignes sur la feuille Excel ?

As-tu testé les propositions de Pijaku ?

A te relire.

PS : N'édite pas tes messages quelque temps après ou tu prends le risque que l'on a déjà pris connaissance de ta première information et que l'on ne soit plus tenu au courant que tu y a placé un complément. C'est complètement pas hasard que j'ai vu la deuxième partie de ton message.

Merci à vous deux

J'ai compris se que tu m as indiquer dans ton précédent message, et j'ai mis votre code

Option Explicit

Dim Wsh_Clients As Worksheet

Private Sub userForm_Initialize()

'à l'ouverture du Formulaire, on initialise notre variable :

Set Wsh_Clients = Sheets("CLIENT")

Dim Ws As Worksheet

Dim Ligne As Integer

Set Ws = Sheets("CLIENT") 'Attention ce nom doit correspondre au nom de votre ONGLET

' affiche le n° dans l'UserForm1 dans ma colonne A qui est ma textbox22

Ligne = Ws.Range("A65536").End(xlUp).Row 'Permet de se positionner sur la dernière ligne de tableau

If Ligne = 1 Then

UserForm1.N_CLIENT = "CLT-1"

Else

UserForm1.N_CLIENT = "CLT-" & Right(Cells(Ligne, 1), Len(Cells(Ligne, 1)) - 4) + 1

End If

End Sub

Si par expl: If Ligne = 1 Then

UserForm1.N_CLIENT = "fact-1"

Else

UserForm1.N_CLIENT = "fact-" & Right(Cells(Ligne, 1), Len(Cells(Ligne, 1)) - 5) + 1

cela fonctionne très bien mais lorsque la base de donnée est vide je peux donc incrémenté ligne donc maintenant je peux essayé de me consacré sur la partie de mas qui est la modification des données d'une ligne via un combobox

se fichier est sur une autre feuille que je peux maintenant rajouté votre code Merci

Salut,

J’ai un peu de peine à comprendre ton texte. Est-ce que tu as encore besoin d’aide ou non ? Si oui, il faudra être un peu plus explicite et – au lieu de nous fournir un bout de macro sur ton message – il vaudrait mieux nous fournir ton fichier et nous dire à quel endroit ta macro bloque, c’est-à-dire quelle est la ligne en jaune lorsque tu actives le débogueur.

Cordialement.

Bonjour et merci à Yvouille et pijaku bien sur autres membres.

Donc voilà un autre fichier avec conseil donnée par vous et pour le moment tout fonctionne bien

Sauf que si ma feuille client est vide et que je clique sur le bouton modifier ou supprimé qui se trouve sur mon USF accueil me donne un débogage et je n'arrive pas à trouver la solution ; mais le reste fonction bien donc un petit coup d’œil de votre part pour me si ma base est bonne ou pas et pour mon débogage aussi merci d'avance .

59vba1-1.xlsm (43.41 Ko)

Bonjour,

Le problème se passe lorsque, puisque vous n'avez pas de valeur saisies, votre variable Ligne = 2. Donc modifiez les procédures

UserForm_Initialize de vos UserForm 3 & 4 comme ceci :
Private Sub userForm_Initialize()
    Textbox11 = Date ' la date du jour dans une textbox lors de l'ouverture de l'userform .
    With Sheets("CLIENT")
        Ligne = Range("B" & Rows.Count).End(xlUp)(2).Row
        If Ligne > 2 Then 'teste si des valeurs sont saisies...
            ComboBox1.List = Range("B2:B" & Ligne).Value
            Ligne = Ligne - 1
            ComboBox1.ListIndex = 0
        End If
    End With
End Sub

Votre fichier modifié en retour :

181vba1-1-1.xlsm (39.59 Ko)

Merci à toi pijaku

J'ai tester et c'est ok donc si ma ligne insertion commence à la 3 ligne donc se sera if Ligne > 3 Then

C'est sa ou j'ai pas compris.

Dans le fichier exemple, si aucun client n'est saisi, Ligne = 2.

C'est tout.

Tu n'as à adapter cela que si tu as plus de deux lignes d'entête...

Merci pour tout

Rechercher des sujets similaires à "vba client automatique incremente"