Bonjour
Je recherche un code qui puisse générer un numéro de facture dans un text box.
Mon format de facture serait : 2021-01-001
2021 l'année
01 le mois
001 numéro qui change
Je souhaiterais que le numéro change de 001 à 002, 003 etc etc en fonction des factures déjà éditer dans le mois.
(j'ai créer un tableau historique facture sur une autre feuille pour savoir à quel numéro de facture je rendu)
Et je souhaiterais également que le numéro repart à Zéro le mois suivant.
Ex
2021-01-001
2021-01-002
.......
........
2021-01-0015
Un tout petit peu de recherche de ta part t'aurais permis d'avoir une réponse à la question que tu poses
Pour avoir le tiret en plus que tu demandes
VB:
If Month(Date) <> CLng(Mid([lenum], [B]6[/B], 2)) Or Year(Date) <> CLng(Left([lenum], 4)) Then
Et bien sur modifié en conséquence :==> Format(Date, "yyyy-mm-001")
Pour avoir de meilleur chance d'avoir une réponse il est d'usage de mettre un fichier anonyme qui précise ce tu as fait et ce que tu veux faire.
Un fichier anonymiser est un fichier qui respecte le RGPD c'est à dire qu'il n'y a pas de nom, adresse, mail .... de personnes réelles et identifiables , donc à la place des dits nom, adresse, mail .... tu mets dans ton fichier
suivant ton inspiration par exemple toto Pierre, 15 rue de l’inconnue, toto.pierre@free.fr.....
Si ton fichier n'a aucun nom, adresse, mail .... alors pas de problème et qu'il est conforme à la charte du site que tu as évidement lu et accepté pour t'inscrire.
* De plus, il est de bon ton de faire un retour à la communauté du forum de la solution que tu as choisis et qui fonctionne pour ta demande voir un mixte de plusieurs solution quand tu as plusieurs réponses et solution qui correspondent à ta demande ce qui permettra d'aider d'autres personnes qui peuvent se poser des questions similaires.
Sub NouveauNuméro()
With Sheets("Numéros")
DL = .Range("A65500").End(xlUp).Row
T = Split(.Cells(DL, "A"), "-")
If Val(T(0)) = Year(Date) And Val(T(1)) = Month(Date) Then
.Cells(DL + 1, "A") = T(0) & "-" & T(1) & "-" & CStr(Format(1 + Val(T(2)), "00"))
Else
.Cells(DL + 1, "A") = CStr(Year(Date) & "-" & Format(Month(Date), "00") & "-" & "01")
End If
MsgBox "Le dernier numéro utilisé est le : " & .Cells(DL, "A") & Chr(10) & Chr(10) & _
"Le nouveau numéro à utiliser est le : " & .Cells(DL + 1, "A")
.Cells(DL + 1, "A").Copy
End With
End Sub
En sortant le nouveau numéro est copié dans le presse papiers, il suffit de faire CTRL+v pour le coller là où il faut.
Sub NouveauNuméro()
With Sheets("Numéros")
DL = .Range("A65500").End(xlUp).Row
T = Split(.Cells(DL, "A"), "-")
If Val(T(0)) = Year(Date) And Val(T(1)) = Month(Date) Then
.Cells(DL + 1, "A") = T(0) & "-" & T(1) & "-" & CStr(Format(1 + Val(T(2)), "00"))
Else
.Cells(DL + 1, "A") = CStr(Year(Date) & "-" & Format(Month(Date), "00") & "-" & "01")
End If
MsgBox "Le dernier numéro utilisé est le : " & .Cells(DL, "A") & Chr(10) & Chr(10) & _
"Le nouveau numéro à utiliser est le : " & .Cells(DL + 1, "A")
.Cells(DL + 1, "A").Copy
End With
End Sub
En sortant le nouveau numéro est copié dans le presse papiers, il suffit de faire CTRL+v pour le coller là où il faut.
If Month(Date) <> CLng(Mid([lenum], [B]6[/B], 2)) Or Year(Date) <> CLng(Left([lenum], 4)) Then
Et bien sur modifié en conséquence :==> Format(Date, "yyyy-mm-001")
Pour avoir de meilleur chance d'avoir une réponse il est d'usage de mettre un fichier anonyme qui précise ce tu as fait et ce que tu veux faire.
Un fichier anonymiser est un fichier qui respecte le RGPD c'est à dire qu'il n'y a pas de nom, adresse, mail .... de personnes réelles et identifiables , donc à la place des dits nom, adresse, mail .... tu mets dans ton fichier
suivant ton inspiration par exemple toto Pierre, 15 rue de l’inconnue, toto.pierre@free.fr.....
Si ton fichier n'a aucun nom, adresse, mail .... alors pas de problème et qu'il est conforme à la charte du site que tu as évidement lu et accepté pour t'inscrire.
* De plus, il est de bon ton de faire un retour à la communauté du forum de la solution que tu as choisis et qui fonctionne pour ta demande voir un mixte de plusieurs solution quand tu as plusieurs réponses et solution qui correspondent à ta demande ce qui permettra d'aider d'autres personnes qui peuvent se poser des questions similaires.
La PJ du post #3 réponds bien à votre demande.
"c'est pas ce que je voulais" est un peu court. Où se trouve l'erreur par rapport à la demande du post #3 ?
La PJ du post #3 réponds bien à votre demande.
"c'est pas ce que je voulais" est un peu court. Où se trouve l'erreur par rapport à la demande du post #3 ?
Le code me plait bien sauf que je ne veut plus de -.
annéemoisnumero : 20210201
Et je n'arrive pas à l'intégrer dans mon Userform
En gros quand j'ouvre le Userform je veut que dans le textbox5 il ya ce numéro afficher
quand je clique sur le bouton ajouter du Userform. toute les information vont sur un tableau; l'utilisateur a le choix de supprimer ou ajouter. la facture est accepter et la il va dans le tableau historique des creation de facture. c'est seulement sur ce tableau la que je veut récupérer le dernier numero et le croiser avec le textbox5.
j'espère que je suis plus clair
dsl mais je suis sur un casse tête et je suis sur que c'est simple mais la je sèche
je joint encore le classeur peut être sa peut aider
merci a toi pour ton aide
Bonjour,
Il suffisait simplement d'adapter.
Une maquette avec le nouveau numéro, nouveau format, nouveau rangement :
VB:
Sub NouveauNuméro()
With Sheets("Historique creation facture")
DL = .Range("B65500").End(xlUp).Row
If Val(Mid(.Cells(DL, "D"), 1, 4)) = Year(Date) And Val(Mid(.Cells(DL, "D"), 5, 2)) = Month(Date) Then
.Cells(DL + 1, "D") = Mid(.Cells(DL, "D"), 1, 7) & Format(Val(Mid(.Cells(DL, "D"), 8, 2)) + 1, "00")
Else
.Cells(DL + 1, "D") = CStr(Format(Year(Date), "0000") & Format(Month(Date), "00") & "-" & "01")
End If
.Cells(DL + 1, "B") = Format(Date, "dd-mmm")
.Cells(DL + 1, "C") = Right(.Cells(DL + 1, "D"), 2)
End With
End Sub
Quand à la gestion de la première feuille je vous la laisse, elle ne concerne pas directement la gestion des N° de factures.
Il vous suffit d'appeler cette macro pour que le nouveau numéro soit créer, à vous de gérer sa destination.
Bonjour,
Il suffisait simplement d'adapter.
Une maquette avec le nouveau numéro, nouveau format, nouveau rangement :
VB:
Sub NouveauNuméro()
With Sheets("Historique creation facture")
DL = .Range("B65500").End(xlUp).Row
If Val(Mid(.Cells(DL, "D"), 1, 4)) = Year(Date) And Val(Mid(.Cells(DL, "D"), 5, 2)) = Month(Date) Then
.Cells(DL + 1, "D") = Mid(.Cells(DL, "D"), 1, 7) & Format(Val(Mid(.Cells(DL, "D"), 8, 2)) + 1, "00")
Else
.Cells(DL + 1, "D") = CStr(Format(Year(Date), "0000") & Format(Month(Date), "00") & "-" & "01")
End If
.Cells(DL + 1, "B") = Format(Date, "dd-mmm")
.Cells(DL + 1, "C") = Right(.Cells(DL + 1, "D"), 2)
End With
End Sub
Quand à la gestion de la première feuille je vous la laisse, elle ne concerne pas directement la gestion des N° de factures.
Il vous suffit d'appeler cette macro pour que le nouveau numéro soit créer, à vous de gérer sa destination.
Merci pour la formule je la garde précieusement elle va me servir
Mais je retourne au point de départ
car je ne veut pas de bouton dans ma feuille historique de facture
je souhaite juste que à l'ouverture du Userform le texbox5 affiche le prochain numéro de facture.
Je ne sais pas faire je bloque
Voila la raison de pourquoi je demande de l'aide
tout ce que j'ai fait depuis le début avec d'autre méthode pour avoir le numero de facture +1 ça marche sur la même feuille avec comme vous un bouton
mais quand je vais cela avec un user form je bloque je ny arrive pas.
Je ne sais pas faire je bloque
Voila la raison de pourquoi je demande de l'aide
tout ce que j'ai fait depuis le début avec d'autre méthode pour avoir le numero de facture +1 ça marche sur la même feuille avec comme vous un bouton
mais quand je vais cela avec un user form je bloque je ny arrive pas.
Mon Userform gère mon numéro de facture en fonction de la dernière valeur du tableau historique création facture.
mais un fois que je fait ajouter dans le user form il rempli un tableau et après l'utilisitateur à le choix de supprimer ou valider, si il valide la seulement il va remplir le tableau historique creation facture.
Faire cela c'est reprendre un code qu'on ne connait pas, ni le but ni l'organisation.
Un ex en PJ qui marche, mais je ne sais pas si c'est ce que vous cherchez.
Mais il y a tout le code qui va bien pour être repris pour remplir la fonction que vous voulez.
le code de création de N° et de remplissage de userform est :
Code:
Sub Ajoutertableaucreafact()
'
' Bouton pour ouvrir la feuille Creation de facture et le fourmulaire de Creation de facture
' Bouton utiliser pour l'acceuil et dans la feuille
'
'
Sheets("Creation de facture").Activate
NouveauNuméro
DL = Sheets("Historique creation facture").Range("B65500").End(xlUp).Row
UserFormcreationfacture.TextBoxDate = Sheets("Historique creation facture").Cells(DL, "B")
UserFormcreationfacture.TextBoxFacture = Sheets("Historique creation facture").Cells(DL, "C")
UserFormcreationfacture.TextBoxNumero = Sheets("Historique creation facture").Cells(DL, "D")
UserFormcreationfacture.Show
End Sub
La gestion du nouveau numéro est :
Code:
Sub NouveauNuméro()
With Sheets("Historique creation facture")
DL = .Range("B65500").End(xlUp).Row
If Val(Mid(.Cells(DL, "D"), 1, 4)) = Year(Date) And Val(Mid(.Cells(DL, "D"), 5, 2)) = Month(Date) Then
.Cells(DL + 1, "D") = Mid(.Cells(DL, "D"), 1, 7) & Format(Val(Mid(.Cells(DL, "D"), 8, 2)) + 1, "00")
Else
.Cells(DL + 1, "D") = CStr(Format(Year(Date), "0000") & Format(Month(Date), "00") & "-" & "01")
End If
.Cells(DL + 1, "B") = Format(Date, "dd-mmm")
.Cells(DL + 1, "C") = Right(.Cells(DL + 1, "D"), 2)
End With
End Sub
La gestion de la feuille Creation de facture est :
VB:
Private Sub CommandButton1_Click()
' Gestion numéros et rangement par ordre décroissant, date la plus récente en haut
If MsgBox("confirmez-vous l'ajout des donnees ?", vbYesNo, "Confirmation") = vbYes Then
With Sheets("Creation de facture")
Range("Tableau3").ListObject.ListRows.Add (1)
.Cells(7, "B") = TextBoxDate
.Cells(7, "C") = TextBoxFacture
.Cells(7, "D") = TextBoxNumero
End With
End If
' Fermer le formulaire creationfacture
Unload UserFormcreationfacture
' Sauvegarde classeur excel
ActiveWorkbook.Save
End Sub
J'ai aussi modifié quelques bricoles pour éviter les erreurs.
Faire cela c'est reprendre un code qu'on ne connait pas, ni le but ni l'organisation.
Un ex en PJ qui marche, mais je ne sais pas si c'est ce que vous cherchez.
Mais il y a tout le code qui va bien pour être repris pour remplir la fonction que vous voulez.
le code de création de N° et de remplissage de userform est :
Code:
Sub Ajoutertableaucreafact()
'
' Bouton pour ouvrir la feuille Creation de facture et le fourmulaire de Creation de facture
' Bouton utiliser pour l'acceuil et dans la feuille
'
'
Sheets("Creation de facture").Activate
NouveauNuméro
DL = Sheets("Historique creation facture").Range("B65500").End(xlUp).Row
UserFormcreationfacture.TextBoxDate = Sheets("Historique creation facture").Cells(DL, "B")
UserFormcreationfacture.TextBoxFacture = Sheets("Historique creation facture").Cells(DL, "C")
UserFormcreationfacture.TextBoxNumero = Sheets("Historique creation facture").Cells(DL, "D")
UserFormcreationfacture.Show
End Sub
La gestion du nouveau numéro est :
Code:
Sub NouveauNuméro()
With Sheets("Historique creation facture")
DL = .Range("B65500").End(xlUp).Row
If Val(Mid(.Cells(DL, "D"), 1, 4)) = Year(Date) And Val(Mid(.Cells(DL, "D"), 5, 2)) = Month(Date) Then
.Cells(DL + 1, "D") = Mid(.Cells(DL, "D"), 1, 7) & Format(Val(Mid(.Cells(DL, "D"), 8, 2)) + 1, "00")
Else
.Cells(DL + 1, "D") = CStr(Format(Year(Date), "0000") & Format(Month(Date), "00") & "-" & "01")
End If
.Cells(DL + 1, "B") = Format(Date, "dd-mmm")
.Cells(DL + 1, "C") = Right(.Cells(DL + 1, "D"), 2)
End With
End Sub
La gestion de la feuille Creation de facture est :
VB:
Private Sub CommandButton1_Click()
' Gestion numéros et rangement par ordre décroissant, date la plus récente en haut
If MsgBox("confirmez-vous l'ajout des donnees ?", vbYesNo, "Confirmation") = vbYes Then
With Sheets("Creation de facture")
Range("Tableau3").ListObject.ListRows.Add (1)
.Cells(7, "B") = TextBoxDate
.Cells(7, "C") = TextBoxFacture
.Cells(7, "D") = TextBoxNumero
End With
End If
' Fermer le formulaire creationfacture
Unload UserFormcreationfacture
' Sauvegarde classeur excel
ActiveWorkbook.Save
End Sub
J'ai aussi modifié quelques bricoles pour éviter les erreurs.
Super merci beaucoup j'ai trouver ce que je voulais avec tout le temps que tu ma consacrer
Bonne journée
et encore merci pour ta patiente et tes renseignement