Incrémentation numéro

Bonjour cher forum,

je vous souhaite tout d’abord de bonnes fêtes de fin d’année :evergreen_tree: :snowman_with_snow:

mon sujet concerne l’incrémentation d’un numéro de devis
dans mon fichier Excel joint j’utilise cette macro qui m’a été proposée par les membres du forum et qui fonctionne très bien. grâce à cette macro, dans mon « formulaire devis » le numéro de devis s’incrémente automatiquement et doit repasser à « 1 » à chaque changement d’année, le numéro de devis est sous la forme « MA-LUC-21-0001 »
par contre je me suis rendu compte que je devais faire le changement manuellement pour le premier devis de l’année.
je m’explique:
admettons que sur mon fichier excel « formulaire devis » le dernier numéro de devis de l’année 2021 soit le « MA-LUC-21-0256 »; lorsque je vais ouvrir mon « formulaire devis » pour la première fois en 2022, il affichera le dernier numéro « MA-LUC-21-0256 » et non « MA-LUC-22-0001 ». donc lorsque je vais lancer la macro, le premier devis de l’année 2022 sera enregistré avec le numéro « MA-LUC-21-0256 »
d’où ma question :
peut-on faire en sorte que lorsque j’ouvre mon « formulaire devis » pour la première fois en 2022, la date du jour soit prise en compte pour mettre à jour le numéro de devis et afficher « MA-LUC-22-0001 »
est-ce possible ???
j’espère que mes explications ont été claires
merci pour vos retours
test.xlsm (19,5 Ko)

Bonjour

Ton fichier adapté

Testes en mettant l’année 2020 en Cellule C2 onglet « données » puis cliques sur le bouton onglet « devis » le numéro se mets bien ainsi :

« MA-LUC-21-0001 »

Signe que dés que l’année du jour est celle de la cellule C2+1 celle-ci est remplacée par la nouvelle année et le compteur en cellule E1 redémarre à la valeur initiale : 1

Sinon c’est le fonctionnement normal qui s’effectue

Donc au premier jour de 2022 c’est cette particularité qui sera la règle

Fais des tests et dis moi

test (5).xlsm (18,9 Ko)

Bonjour FFO,

merci pour ton retour rapide
je viens de tester mais je ne vois pas la différence
lorsque je mets la date 2020 dans la cellule C2 de l’onglet « données », je bascule ensuite sur l’onglet « devis » il me faut appuyer sur le bouton « nouveau devis » pour que le numéro de devis devienne « MA-LUC-21-0001 »
est-ce que je fais la manip correctement ?

Oui c est tout à fait cela
Cela ne te convient pas ?
"MA-LUC-21-0001 » est bien là preuve de la reinitialisation du compteur au changement d année
N est ce pas ce que tu souhaites ?

FFO,

c’est bien ce que je souhaite.
il faut en fait savoir que lorsque j’appuis sur le bouton « nouveau devis » dans mon formulaire, la macro complète enregistre les données du devis dans un fichier excel, enregistre également le devis au format PDF et imprime ce même devis. Pour finir la macro supprime les données de mon formulaire et incrémente le numéro de devis. j’ai donc ensuite un formulaire vierge avec un nouveau numéro.
C’est pour cette raison que si j’ouvre à nouveau le formulaire en 2022 son numéro sera sous la forme « MA-LUC-21-0256 » (dernier devis de 2021), en effet le numéro n’aura pas été incrémenté en tenant compte de l’année, puisque le dernier lancement de la macro aura été fait en 2021.
Comme je l’explique dans mon premier message, en appuyant sur le bouton « nouveau devis » le numéro du premier devis de 2022 sera « MA-LUC-21-0256 » et ensuite pour le deuxième devis j’aurais effectivement comme numéro de devis le « MA-LUC-22-0001 ».
je pense que c’est la macro qui n’est pas construite correctement
existe-t-il des solutions ?

Donc cette mise à jour par le bouton ne te convient même si elle est effective comme tu as pu le constater
A quelle niveau là souhaites tu ?

FFO,

comme je l’expliquais dans mon premier message
« peut-on faire en sorte que lorsque j’ouvre mon « formulaire devis » pour la première fois en 2022, la date du jour soit prise en compte pour mettre à jour automatiquement le numéro de devis et afficher « MA-LUC-22-0001 » » dans ce cas sans avoir à lancer la macro ???
faut-il créer une seconde macro ?
mes compétences ne me permettent pas de répondre à ces questions

« la date du jour soit prise en compte »
En d autres termes cela correspond concrètement à quoi dans le fichier ?
Cette mise à jour souhaitée doit se traduire de quelle manière
Merci de me dire

FFO,

le date du jour correspond à la date de création du devis
en l’occurrence si un devis est fait le 01/01/2022 et si c’est le premier devis de l’année, la mise à jour consiste à ce que son numéro devienne automatiquement « MA-LUC-22-0001 »
de quelle façon y arriver ??

Bonjour
Ce n est pas ce que je demande
Quand tu souhaites qu à l ouverture du fichier le 1° Janvier 2022 celui-ci ait basculé avec une numérotation réinitialisée à la nouvelle année qu attends tu de voir au premier coup d oeil dans tes onglets au niveau des données comme signe de ce basculement attendu ?
Car j ai intégré celui-ci dans ton bouton qui tu l as constaté produit bien la référence facture dans cet esprit mais cela ne te convient pas
Que te faut il de plus à l ouverture quelles données dans quelles cellules dans quelles onglet pour enfin répondre à ton attente
J avoue être perplexe et dans l incompréhension
Merci de m éclairer

bonjour FFO,

je suis désolé, je vois que mes explications ne sont pas très claires et je ne sais pas comment les formuler autrement dans un langage informatique
je pense au final qu’il me faut deux boutons, un premier « nouveau devis » pour l’incrémentation d’un nouveau numéro de devis et un second « enregistrement devis » qui me permette d’enregistrer les données des cellules de mon formulaire devis dans un tableau excel.
peut-on dans ces conditions, grâce à une macro, ne faire apparaître qu’un bouton « nouveau devis » et lorsque on appui dessus faire apparaître « enregistrement devis » et masquer « nouveau devis » et inversement.
tant que le bouton « nouveau devis » n’est pas activé le formulaire devis est verrouillé
en pièce jointe un fichier qui peut peut-être éclairer mes explications :thinking:
devis test.xlsm (23,4 Ko)

Je te propose cette évolution dans ton dernier fichier transmis
J’ai inclus dans ta macro « enregistrement » en tout début la réinitialisation de la numérotation lors du changement d’année si celui-ci est détecté le jour de son exécution

Ainsi avec le traitement j’ai mis ceci dans les onglets :

onglet « données »

cellule C2 : 2020
cellule E2 : 93

onglet « devis » :

cellule F3 : MA-LUC-20-0093

j’ai exécuté la macro « enregistrement » que j’ai arrêté au moyen d’un point d’arrêt juste après mes lignes de code de réinitialisation de la numérotation pour le changement d’année :

onglet « données » j’ai obtenu ceci :

En cellule C2 la donnée de l’année : 2021
En cellule E2 le numéro initial : 1

Onglet « devis » j’ai obtenu ceci :

Cellule F3 le numéro de devis : MA-LUC-21-0001

Celui_ci a été mis à jour alors que le traitement de la macro « enregistrement » n’a pas été encore effectué seule la partie des lignes de code de la réinitialisation de la numérotation suite au changement d’année a été exécutée ni plus ni moins

Pour moi cela doit te convenir ou je ne comprends rien à tes attentes

Regardes essaies et dis moi

devis test.xlsm (28,6 Ko)

FFO,

merci de t’arracher les cheveux pour moi
Ta proposition fonctionne parfaitement dans le fichier joint, c’est exactement ce que je souhaite :+1:
par contre lorsque j’insère les lignes de macro dans ma macro complète je n’ai pas le même résultat
et vues mes connaissances en VBA, seul je n’y arriverai jamais, à moins d’un miracle
voici ma macro complète, ça fait un peu usine à gaz !!
peux-tu faire quelque chose ?



« par contre lorsque j’insère les lignes de macro dans ma macro complète je n’ai pas le même résultat »

Quelles lignes de macro uniquement les miennes pour réinitialiser la numérotation ?

Cette partie est totalement indépendant et doit être placées en tête ce qui semble le cas
Elles n’ont aucune action hors mis onglet « données » cellule C2 cellule E2 onglet « devis » cellule F3 si une nouvelle année est détectée

Pour le reste si tu as des résultats non conformes ce n’est pas ces lignes de code qui peuvent en être à l’origine

Quand tu dis je n’ai pas le même résultat peux tu préciser les différences obtenues

FFO,

oui, lorsque j’insère uniquement tes lignes de macro, mais ce ne sont pas elles qui sont en cause puisque ça fonctionne parfaitement avec le fichier que tu m’as envoyé

dans mon formulaire devis lorsque je mets « 2020 » dans la cellule C2 de l’onglet « données » et que j’appuis sur le bouton « enregistrement devis » de l’onglet « devis » de ma macro complète, j’ai un bug sur cette ligne

Sheets(« devis »).Range(« F3 ») = Sheets(« données »).Range(« A2 ») & Sheets(« données »).Range(« B2 ») & Right(Sheets(« données »).Range(« C2 »), 2) & Sheets(« données »).Range(« D2 ») & Format(Sheets(« données »).Range(« E2 »), « 0000 »)

Verifies le nom des onglets :

données
devis

Existent ils bien avec ces libellés exacts à la casse près et surtout sans espace aux extrémités de chacun

Tu peux aussi remplacer cette ligne de code :

Sheets(« devis »).Range(« F3 ») = Sheets(« données »).Range(« A2 ») & Sheets(« données »).Range(« B2 ») & Right(Sheets(« données »).Range(« C2 »), 2) & Sheets(« données »).Range(« D2 ») & Format(Sheets(« données »).Range(« E2 »), « 0000 »)

En la morcelant comme ceci :

Sheets(« devis »).Range(« F3 ») = Sheets(« données »).Range(« A2 »)

Tu essaies

Si OK

Tu la mets comme ceci :

Sheets(« devis »).Range(« F3 ») = Sheets(« données »).Range(« A2 ») & Sheets(« données »).Range(« B2 »)

Tu essaies

Si OK

Tu mets comme ceci

Sheets(« devis »).Range(« F3 ») = Sheets(« données »).Range(« A2 ») & Sheets(« données »).Range(« B2 ») & Right(Sheets(« données »).Range(« C2 »), 2)

Tu essaies

Si OK

Tu mets comme ceci

Sheets(« devis »).Range(« F3 ») = Sheets(« données »).Range(« A2 ») & Sheets(« données »).Range(« B2 ») & Right(Sheets(« données »).Range(« C2 »), 2) & Sheets(« données »).Range(« D2 »)

Tu essaies

Si OK

Tu mets comme ceci

Sheets(« devis »).Range(« F3 ») = Sheets(« données »).Range(« A2 ») & Sheets(« données »).Range(« B2 ») & Right(Sheets(« données »).Range(« C2 »), 2) & Sheets(« données »).Range(« D2 ») & Format(Sheets(« données »).Range(« E2 »), « 0000 »)

Dès que le blocage apparaît c est la dernière partie rajoutée qui est en cause

Fais moi un retour sur ces essais

Sinon peux tu me donner le message du bug

FFO,

je crois que j’ai trouvé l’erreur, dans ma macro je protège chaque feuille après chaque action et c’est la cause de l’erreur. l’onglet « devis » était protégé c’est pour cette raison que l’action n’a pas pu s’exécuter

image

Parfait
Il suffit d’enlever la protection avant ma partie de code puis la remettre
En tout début de la macro tu effectues dans le code une déprotection de l’onglet « données »
Il faut réaliser cette même opération avec ces mêmes lignes en changeant le nom données par devis pour déprotéger l’onglet « devis »
Réalises la même opération sur les lignes de code qui suivent qui remettent la protection pour l’onglet « données »
Cela devrait normalement résoudre la difficulté

Fais moi un retour

les différents essais sont concluants, je te remercie FFO :clap:
j’apprécie le fait de mettre tes compétences et connaissances au service des autres :man_student:
à bientôt pour d’autres sujets

Ce fut chaotique mais le résultat est là c’est l essentiel
Ce fut un plaisir pour moi
Prêt à réitérer quand tu veux
Au plaisir de te lire à nouveau