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é.
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
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
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 .
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 :
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...