XL 2019 Codage pour incrémenter une suite de nombre

PR.

XLDnaute Nouveau
Bonjour au groupe.

Je me casse la tête depuis ce matin en vain.
Dans le fichier joint, je souhaiterais qu'a chaque ajout de nouvelle personne dans la liste, le N° de client s'incrémente tout seul.

Mais je n'ai pas réussis a obtenir quoi que ce soit de probant dans la modification de mon code.
Ci-dessous la partie concernée.

NumClient = InputBox("Quel est le N°", "Numéro de Client")
Dim Colonne As Integer
Colonne = 1
If Cells(1, Colonne) = "" Then
' La cellule 1 est vide
Cells(1, Colonne) = NumClient
Else
Cells(Rows.Count, Colonne).End(xlUp).Offset(1, 0) = NumClient
End If

Cela doit etre si simple que j'ai du passer devant la solution au moins 150 fois depuis ce matin.

Merci de votre aide.
PR
 

Pièces jointes

  • Dev_Fact Fich client base travail.xlsm
    19.9 KB · Affichages: 5

Phil69970

XLDnaute Barbatruc
Et pour répondre à ta question
je souhaiterais qu'a chaque ajout de nouvelle personne dans la liste, le N° de client s'incrémente tout seul.
Comme tu es dans un TS j'ai modifié le TS pour que l'incrémentation se fasse toute seule
Voir fichier

Perso je serais passé soit par un USF soit par un autre onglet
 

Pièces jointes

  • Dev_Fact Fich client base travail V1.xlsm
    19.5 KB · Affichages: 2

Eric KERGRESSE

XLDnaute Occasionnel
Bonjour à tous,

Comme Phil, je pense que les inputbox sont une mauvaise idée, surtout si ce n'est pas vous qui faites la saisie 🥵. Dans le fichier joint, j'ai ajouté un onglet Formulaire. L'incrémentation se fait à partir du nombre de lignes du tableau structuré.
 

Pièces jointes

  • Pr Dev_Fact Fich client base travail.xlsm
    26.5 KB · Affichages: 4

chris

XLDnaute Barbatruc
Bonjour

Gérer une saisie à partir d'une succession d'inputbox est lourd et peu convivial...

Soit laisse les personne remplir le tableau et gères juste le numéro, soit tu crées un formulaire de saisie...

EDIT : on n'est plus informé des posts... Message inutile du coup. Sorry
 

PR.

XLDnaute Nouveau
Hop là!!! ça va trop vite pour moi.

Tout d'abord merci à vous trois.
Au cas où cela ne se soit pas vu, même si je passe pour un bennais, je souhaite réaliser ce projet qui sera dans ma boite. (en cours de création) Ma problématique est que mon expérience en codage à commencé avant-hier...
Mais j'ai pas peur ça va le faire.

Phil69970

Tu me dit que je suis dans un TS que tu as modifié. c'est quoi un TS?
Idem pour le USF?

Eric KERGRESSE et chris

sont d'accord avec toi sur la lourdeur des Input Box.
Après essai, Oui c'est beaucoup plus simple et convivial, je confirme.

Par contre deux constats :
  1. Je dois incrémenter le numéro de Client manuellement
  2. Avez-vous un lien pour comprendre comment construire un tel formulaire.
Merci à vous.
PR.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour P.R., Chris, Eric, Phil,
Un essai en PJ avec un userform. C'est vrai que c'est plus pratique et plus convivial.
Le Userform s'ouvre avec :
VB:
Sub UserformOn()
Application.ScreenUpdating = False
NbreLigne = [Tableau3].ListObject.ListRows.Count
Numéro = [Tableau3].Item(NbreLigne, 1) + 1
UserForm1.NoClient = Numéro
UserForm1.Show
End Sub
et le traitement de données est dans le bouton Retour :
Code:
Private Sub CommandButton1_Click()
NbreLigne = 1 + [Tableau3].ListObject.ListRows.Count
With UserForm1
    [Tableau3].Item(NbreLigne, 1) = .NoClient
    [Tableau3].Item(NbreLigne, 2) = .TextBox1.Value
    [Tableau3].Item(NbreLigne, 3) = .TextBox2.Value
    [Tableau3].Item(NbreLigne, 4) = .TextBox3.Value
    [Tableau3].Item(NbreLigne, 5) = .TextBox4.Value
    [Tableau3].Item(NbreLigne, 6) = .TextBox5.Value
    [Tableau3].Item(NbreLigne, 7) = .TextBox6.Value
    [Tableau3].Item(NbreLigne, 8) = .TextBox7.Value
    [Tableau3].Item(NbreLigne, 9) = .TextBox9.Value
    [Tableau3].Item(NbreLigne, 10) = .TextBox10.Value
End With
Unload UserForm1
End Sub
J'ai réparé les items de façon à pouvoir faire ensuite des sécurité ( absence de remplissage par ex )
 

Pièces jointes

  • Dev_Fact Fich client base travail.xlsm
    30.1 KB · Affichages: 2

PR.

XLDnaute Nouveau

Eric KERGRESSE,​

Voici en vert dans le code ce que j'ai pu "traduire"ou pas.

Sub CreerUnNouveauClient()
'Nom de la procédure

Dim I As Integer
'?
Dim TabClients As ListObject
'Le TabClient est la liste d'objets
Dim LigneClient As ListRow
'?
Dim AireRenseignements As Range
'?
Set TabClients = Sheets("Fichier Clients").ListObjects("t_Clients")
'Prend le tableau t_Clients comme liste d'objets
Set AireRenseignements = Range("t_Formulaire[Renseignements]")
'Dans le tableau t_Formulaire le contenu de la colonne renseignements est égale à la variable AireRenseignements
Set LigneClient = TabClients.ListRows.Add
'?
With LigneClient
'?
For I = 1 To .Range.Count
'?
.Range(1, I) = AireRenseignements(I)
'?

Next I
'?
End With
'fin fonction avec
Set TabClients = Nothing: Set AireRenseignements = Nothing: Set LigneClient = Nothing
'?
End Sub
'Fin procédure
 

Phil69970

XLDnaute Barbatruc
@PR.

Un TS est un tableau structuré c'est ce que tu as fait et qui s'appelle Tableau3 dans ton fichier

Un peu de lecture

Un USF est un .... formulaire

Voici une aide au nommage

Et ne pas croire que c'est pour faire joli

Label35 ne veut pas dire grand chose alors que par exemple Lbl_Jours12 je vois tout de suite que c'est le label qui correspond au 12 eme jour !! C'est tout de suite plus parlant non !!!

Et si tu les nommes correctement tu peux facilement faire une boucle dessus pour leur donner une étiquette pour le label ou une valeur pour les textbox très facilement en 2 ou 3 ligne de code etc .....

Gain de temps pour l'écriture et la maintenance du code ;)
Tu peux t'en inspirer librement et adapter bien sur à ton gout ;)
 

Eric KERGRESSE

XLDnaute Occasionnel
VB:
Sub CreerUnNouveauClient() 'Nom de la procédure

' Avec Dim on déclare les variables et on les type avec As
Dim I As Integer
Dim TabClients As ListObject  ' ListObject est la variable pour les tableaux structurés
Dim LigneClient As ListRow    ' Est la variable pour définir une ligne d'un tableau structuré
Dim AireRenseignements As Range ' Représente les cellules du formulaire

' Après avoir créé les variables, on instancie celles qui doivent l'être. En clair on réserve un espace de 'mémoire. 
Set TabClients = Sheets("Fichier Clients").ListObjects("t_Clients") 'Prend le tableau t_Clients comme liste d'objets
Set AireRenseignements = Range("t_Formulaire[Renseignements]") 'Dans le tableau t_Formulaire le contenu de la colonne renseignements est égale à la variable AireRenseignements

Set LigneClient = TabClients.ListRows.Add ' on crée une nouvelle ligne dans la table Clients


With LigneClient ' On utilise la ligne client qui est composée de N colonnes (.Range.count)

For I = 1 To .Range.Count ' On crée une boucle pour charger les cellules de la nouvelle ligne avec les cellules ' du formulaire puisqu'il y a le même nombre de cellules.
.Range(1, I) = AireRenseignements(I)
Next I

End With

'fin fonction avec

Set TabClients = Nothing: Set AireRenseignements = Nothing: Set LigneClient = Nothing

'On décharge la mémoire.

End Sub

'Fin procédure
 

PR.

XLDnaute Nouveau
Bonjour P.R., Chris, Eric, Phil et sylvanu

Compris ce qu'est un Userform donc USF.
Et oui c'est top.
Fait exprès ou pas il i avait des erreur de codage sur les trois dernières lignes.
Mais aidé de l'ensemble de vos remarques et essais, tout fonctionne et c'est pile poil le résultat escompté.
Vous êtes au top!
La route est encore longue mais à chaque jour suffit sa peine.
Merci encore.
PR.
 

Discussions similaires

Réponses
3
Affichages
436
Réponses
4
Affichages
367

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh