XL 2019 Numérotations

Monkeyju56

XLDnaute Nouveau
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

2021-02-001
2021-02-002
.......
.....

Merci par avance pour votre aide
 
Dernière édition:

Phil69970

XLDnaute Accro
Bonjour @Monkeyju56 , le forum

Un tout petit peu de recherche de ta part t'aurais permis d'avoir une réponse à la question que tu poses

1612099674751.png


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.

@Phil69970
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Monkeyju56,
Un essai en PJ avec :
VB:
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.
 

Pièces jointes

  • Numéros.xlsm
    16.6 KB · Affichages: 8

Monkeyju56

XLDnaute Nouveau
Bonjour Monkeyju56,
Un essai en PJ avec :
VB:
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.
Merci pour ta réponse malheureusement c'est pas ce que je voulais
et le numero de facture à légèrement changer voici le classeur.
 

Pièces jointes

  • Classeur1.xlsm
    66.3 KB · Affichages: 5

Monkeyju56

XLDnaute Nouveau
Bonjour @Monkeyju56 , le forum

Un tout petit peu de recherche de ta part t'aurais permis d'avoir une réponse à la question que tu poses

Regarde la pièce jointe 1093691

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.

@Phil69970
Merci pour t'a réponse mais le code je les déjà vu mais je n'arrive pas à le faire avec un texbox et la recherche du dernier numéro dans un tableau.
 

Pièces jointes

  • Classeur1.xlsm
    66.3 KB · Affichages: 0

Monkeyju56

XLDnaute Nouveau
Bonjour,

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
 

Pièces jointes

  • Classeur1.xlsm
    71.1 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

Pièces jointes

  • Classeur1 (31).xlsm
    70.1 KB · Affichages: 4

Monkeyju56

XLDnaute Nouveau
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.
 

Monkeyju56

XLDnaute Nouveau
Ca, j'ai compris. Dans votre Userform appelez cette macro . Lisez ce que j'écris

Ma PJ n'est qu'une maquette, rien de plus
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.
 

Monkeyju56

XLDnaute Nouveau
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.
Finalement ces mon Userform (texbox5)qui gère mes numéros de facture
et qui va chercher la dernière valeur dans le tableau historique facture

pas l'inverse ?
 

Monkeyju56

XLDnaute Nouveau
Finalement ces mon Userform (texbox5)qui gère mes numéros de facture
et qui va chercher la dernière valeur dans le tableau historique facture

pas l'inverse ?
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.

Donc ces bien le Userform qui cher mon numero ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

Pièces jointes

  • Classeur1 (31) (1).xlsm
    71.4 KB · Affichages: 11
Dernière édition:

Monkeyju56

XLDnaute Nouveau
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
 
Haut Bas