Microsoft 365 Codification unique ALPHA-NUMERIQUE incrémenté

Chaine

XLDnaute Nouveau
Bonjour à tous,
Forrest Gump Reaction GIF by MOODMAN

Je souhaite rendre unique chacune des tâches de mon tableau par le biais du codification ALPHA-NUMERIQUE spécifique du type REFERENCE+"INDICE&VARIANTE" :
CB-01-00-00AAA

En cas de doublon, cette codification prévois une incrémentation ALPHA-NUMERIQUE là aussi (00AAA).
Le code indice+variant 00AAA est composé de 2 digits NUM à incrémenter de 1 en 1, et quand on arrive à 99, les 3 digits lettres sont à incrémenter comme suit : 99AAA à 01AAB. (pas de 00AAx).

Une fois réalisée cette codification identifiera la tâche et la rendra unique. Il ne faudra dont pas qu’elle évolue (en particulier l’incrémentation du code indice+variant). Donc trouver la méthode qui va bien pour que le calcule s’arrête sur condition remplie. Je vous joins un extract du volumineux fichier.

J’ai essayé toutes les formules que je connaissais mais je tombe toujours sur des boucles alors j’ai pensé à un bout de VBA. Mais ma connaissance ne semble pas assez pointue pour trouver le code entier répondant au besoin.

Je remercie d'avance toute les bonnes âmes qui se pencherons sûr cette codification bien alambiquée.
;)
Voici un début provenant d’un autre outil :

' ***** INCREMENTATION ALPHABETIQUE ****
Function incralpha(s)
pl = Len(s)

If Right(s, 1) = "Z" Then
If pl = 1 Then
incralpha = "AA"
Else
incralpha = incralpha(Left(s, pl - 1)) & "A"
End If
Else
incralpha = Left(s, pl - 1) & Chr(Asc(Right(s, 1)) + 1)
End If
End Function
 

Pièces jointes

  • TEST1.xlsx
    95.6 KB · Affichages: 10

Chaine

XLDnaute Nouveau
Bonjour Chaine, bonjour le forum,

Ce "hey" est insupportable et pollue ton fil inutilement... Moi ça ne me donne pas envie de continuer.
Bonjour et merci Robert d'avoir pris le temps de me répondre, ton commentaire ma été d'une grande aide. Quel dommage que ta proposition ne puisse pas m'aider.

J'espère que tu sauras retrouver ton humour et ta légèreté, ça m’embête pour toi.
Je te souhaite une agréable semaine.
Elodie
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Élodie, bonjour le forum,

Que faut-il faire ? T'envoyer des Gif animés avec des smileys qui se fendent la poire pour te montrer que j'ai encore de l'humour ?!... Ne sois pas embêtée, c'est l'âge... En vieillissant je deviens plus c** qu'avant. Déjà avant c'était grave, alors imagine...
 

vgendron

XLDnaute Barbatruc
Bonjour !!
moi ca me fait marrer Lieutenant Dan !!! (à dire avec l'accent :-D )
en ce qui concerne une réponse. effectivement, le besoin et le processus n'est pas très clair

1) la racine AA5: Comment évolue t-elle ??
AA5 puis AA6....AA9...AB1..??
qu'est ce qui la fait passer à l'incrément suivant?
2) la variante racine: memes questions?
3) CodeII
si je comprend bien on reprend le Code II de la colonne I et on le décompose en ajoutant des tirets pour avoir 6 caractères (3*2)
==> exemple de la ligne 9: CB01 devient CB-01-00 (on ajoute les 00 pour avoir les 6 caractères)
est ce que ce 00 va devoir etre incrémenté?? Si oui à quelle condition?
==> exemple de la ligne 15: CF02CB devient CF-02-BC
pourquoi ca ne devient pas CF-02-CB (inversion BC--CB)

4) code 00AAA ==> s'il doit etre incrémenté, à quelle condition?
5) le code dépend du verbe de la colonne O et du tableau de correspondance feuille "liste Verbes"==> la.. c'est facile

6) toujours la meme question pour les variante code et Localisation
 

Chaine

XLDnaute Nouveau
Bonjour !!
moi ca me fait marrer Lieutenant Dan !!! (à dire avec l'accent :-D )
en ce qui concerne une réponse. effectivement, le besoin et le processus n'est pas très clair

1) la racine AA5: Comment évolue t-elle ??
AA5 puis AA6....AA9...AB1..??
qu'est ce qui la fait passer à l'incrément suivant?
2) la variante racine: memes questions?
3) CodeII
si je comprend bien on reprend le Code II de la colonne I et on le décompose en ajoutant des tirets pour avoir 6 caractères (3*2)
==> exemple de la ligne 9: CB01 devient CB-01-00 (on ajoute les 00 pour avoir les 6 caractères)
est ce que ce 00 va devoir etre incrémenté?? Si oui à quelle condition?
==> exemple de la ligne 15: CF02CB devient CF-02-BC
pourquoi ca ne devient pas CF-02-CB (inversion BC--CB)

4) code 00AAA ==> s'il doit etre incrémenté, à quelle condition?
5) le code dépend du verbe de la colonne O et du tableau de correspondance feuille "liste Verbes"==> la.. c'est facile

6) toujours la meme question pour les variante code et Localisation
Bonjour Vgendron,

Et merci pour ton retour. Je m’excuse de ne répondre que maintenant (événement familiale imprévu).

Voici mes retours à tes questions (en fait, je bloque surtout sur le point n°4).

1°) Concernant la « Racine » : Le AA5 n’évoluera pas pour mon besoin, c’est la raison pour laquelle je n’ai pas apporté de précision dans mon fichier. Donc pour la racine on peut partir d’une données fixe (mais ton raisonnement était le bon, l’évolution logique est bien AA1, AA2, ....AA9...AB1…).
2°) « variante racine » : Elle est fixe (à ma connaissance elle ne change jamais).

Donc pour ces 2 points, nous pouvons partir du principe que la racine et la variante racine sont un PREFIXE à la référence unique.

3°) Pour le « CODE II » : Les données sont à aller récupérer sur la ligne en cours de codification, en colonne A Feuil1 (ou en colonne I si on part de l’onglet Tâche).
Par exemple avec quelque chose du genre, on obtient bien CB-01-00 si on à CB01 en cellule A1 :

=JOINDRE.TEXTE("-";VRAI;SI(STXT(A2;1;2)="";REPT(0;2-NBCAR(STXT(A2;1;2)));STXT(A2;1;2));SI(STXT(A2;3;4)="";REPT(0;2-NBCAR(STXT(A2;3;4)));STXT(A2;3;4));SI(STXT(A2;5;6)="";REPT(0;2-NBCAR(STXT(A2;5;6)));STXT(A2;5;6)))
Note : Le Code II, n’est pas à incrémenter. Il est seulement relatif à la colonne A et structuré ainsi (AlphaAlpha-NumériqueNumérique-AlphaOUnumériqueAlphaOUnumérique).

Jusque là, la formule suivante positionnée en D1 peut faire l’affaire :

=JOINDRE.TEXTE("-";VRAI;"AA5";"AAAA";SI(STXT(A2;1;2)="";REPT(0;2-NBCAR(STXT(A2;1;2)));STXT(A2;1;2));SI(STXT(A2;3;4)="";REPT(0;2-NBCAR(STXT(A2;3;4)));STXT(A2;3;4));SI(STXT(A2;5;6)="";REPT(0;2-NBCAR(STXT(A2;5;6)));STXT(A2;5;6)))
Et c’est à partir de là que je sèche.

4°) Pour l’INDICE et sa Variante (disassycodeVariant) : Cette codification sert uniquement à différencier les tâches les unes des autres afin que 2 tâches n’aient jamais la même référence.

Les règles d’incrémenter des digits "INDICE&VARIANTE" en colonne D, à chaque fois qu’une référence est créée la codification augmente de +1 :

  • Le code indice est composé de 2 digits NUM à incrémenter de 1 à 99
  • Le code variant complète l’indice. Il est composé de 3 digits ALPHA à incrémenter comme suit : AAA, AAB, …AAZ, ABA, …AZZ, BAA, ….
  • Cette combinaison s’articule comme suit : 00AAA, 01AAA, …99AAA, 01AAB. Une fois le nombre 99 atteint passer à 01AAB et ainsi de suite (subtilité il n’existera pas de 00AAB 00AAC00ABA, ..)

Juste pour confirmer le besoin, les conditions requises (si code VBA) pour que la codification s’applique dans la cellule en colonne D :

  • si « VALIDEE » en colonne E sur la ligne ===> Pas d’action de la macro en cellule Dx
  • si « <> de VALIDEE » ou « vide » en colonne E sur la ligne ===> Action macro OK en cellule Dx
Cette notion de VALIDER (par intervention humaine en colonne E) la codification réalisée par la macro (en colonne D) permettrait d’affecter la référence unique à la ligne de façon définitive (sauf si tu connais une autre méthode😉 )
Ainsi, si la macro est relancée ultérieurement, elle rechercherait l’incrémentation suivante à partir des n° précédemment validés (ceux qui sont "inscrits en dur").

5°) Pour les
CODE VERBES (N4 OP.) : Là aussi, la solution à mon sens n’est pas compliquée à appliquer : DESCRIPTION vs ONGLET LISTE VERBES. La recherche devra bien se faire sur toute la colonne B de l'onglet "Listes de verbes" dans le cas ou des verbes seraient ajoutés avec le temps.

6°) La variante code s'applique au CODE VERBES (N4 OP.) Elle incrémente le code verbe en cas de doublon comme suit : A, B, C, ….Z, ….1, 2, …9
Pour la
Localisation elle est incrémentée dans des cas exceptionnels => On partira du principe que s'est une données FIX tel un SUFFIXE à la référence.

Je sais pas ce que tu en penses mais, j'ai encore cherché coté formule mais je crois que définitivement c'est une macro qui rendra cette codification possible.

Merci pour ton soutien et encore merci pour ton aide.
Elodie
 

Pièces jointes

  • TEST1_20220506.xlsm
    116 KB · Affichages: 4

vgendron

XLDnaute Barbatruc
Hello
en PJ une nouvelle version dans laquelle j'ai ajouté une fonction "Incrémenter" qui permet de gerer l'incrémentation de la partie "IndiceVariant"
dans le code, j'ai mis arbitrairement une valeur à incrémenter (99ZAB) juste pour tester la fonction.
pour les codes qui n'existeront pas.. pourquoi? ils sont interdits.?? il faudra gerer ces cas dans la fonction: car pour l'instant, ils peuvent arriver.

maintenant;. reste à savoir à quel moment il faut appeler cette fonction..
lorsqu'une tache existe déjà? mais.. c'est quoi une tache?
les 3 eres lignes (inspecter la salle 1 2 3) sont 3 taches différentes..?
 

Pièces jointes

  • TEST1_20220506.xlsm
    124.8 KB · Affichages: 5

Chaine

XLDnaute Nouveau
Hello
en PJ une nouvelle version dans laquelle j'ai ajouté une fonction "Incrémenter" qui permet de gerer l'incrémentation de la partie "IndiceVariant"
dans le code, j'ai mis arbitrairement une valeur à incrémenter (99ZAB) juste pour tester la fonction.
pour les codes qui n'existeront pas.. pourquoi? ils sont interdits.?? il faudra gerer ces cas dans la fonction: car pour l'instant, ils peuvent arriver.

maintenant;. reste à savoir à quel moment il faut appeler cette fonction..
lorsqu'une tache existe déjà? mais.. c'est quoi une tache?
les 3 eres lignes (inspecter la salle 1 2 3) sont 3 taches différentes..?
Bonjour Vgendron,
Quelle efficacité, merci beaucoup.
En fait, je dis une tâche pour une action ou une ligne si tu veux. (exemple inspecter la salle n°1 c’est une action, une tâche à réaliser).

A°) « les 3 eres lignes (inspecter la salle 1 2 3) sont 3 taches différentes..? »
Oui, chaque ligne est unique, c’est pourquoi on doit créer une incrémentation sur leurs références.
Il existe plusieurs salles, elles ont toutes un nom mais pour simplifier je les aie numérotés. Et dans ces salles on peut avoir plusieurs rideaux gauches car plusieurs fenêtres. Exemple :

  • Rideau gauche (1ere fenêtre) de la salle OUESSANT : AA5-AAAA-CF-02-BC-00AAA-300A-A
  • Rideau gauche (2eme fenêtre) de la salle OUESSANT : AA5-AAAA-CF-02-BC-01AAA-300A-A
  • Rideau gauche (3eme fenêtre) de la salle OUESSANT : AA5-AAAA-CF-02-BC-02AAA-300A-A
  • Et imaginons une suite logique :
  • Rideau gauche (98ème eme fenêtre) de la salle OUESSANT : AA5-AAAA-CF-02-BC-99AAA-300A-A
  • Rideau gauche (99ème fenêtre) de la salle OUESSANT : AA5-AAAA-CF-02-BC-01AAB-300A-A

B°) Concernant les codes 00 Alpha Alpha Alpha (00AAB, 00AAC…00ABA…) ils sont tous à bannir en effet (sauf 00AAA qui sera indubitablement affecté à la 1er tâche rencontrée). Je ne connais pas la raison de cette exclusion.

« reste à savoir à quel moment il faut appeler cette fonction.. lorsqu'une tache existe déjà? ».
Oui je pense,
en reprenant notre exemple ci-dessus je propose :
SI dernière référence prise « 99 » (soit AA5-AAAA-CF-02-BC-99AAA-300A-A) ALORS incrémenter +2 (AA5-AAAA-CF-02-BC-01AAB-300A-A)
Qu’en penses-tu ?

Quelques questions :
1°) Ta proposition d’affecter le code à un bouton me convient parfaitement. Est-ce que tu me confirme que le code actuel respecte les conditions suivantes afin de figer les références déjà généré par l’outil :

  • si « VALIDEE » en colonne E sur la ligne ===> Pas d’action de la macro en cellule Dx
  • si « <> de VALIDEE » ou « vide » en colonne E sur la ligne ===> Action macro OK en cellule Dx

2°) Pour la liste de verbe : For i = 15 To 19
La recherche peut-elle se faire sur toute la colonne B de l'onglet "Listes de verbes" plutôt que sur la section 15 à 19 ?
 

vgendron

XLDnaute Barbatruc
Bonjour
Voir PJ pour nouvel essai
1) la liste des verbes est devenue une plage nommée
je l'ai déplacé en haut de la feuille... je ne vois pas l'intérêt de mettre ca en ligne 15.. c'est comme si tu prenais un cahier neuf et que tu commencais à le remplir à partir de la 15eme.. feuille....

2) j'ai commenté le code
3) l'option "Validée" n'est pas gérée... qu'est ce qui fait qu'une tache est validée ou pas??
ca pose des problèmes au cas où il y a une tache "Tache1" NON validée, et ensuite, plus tard dans le tablo, la meme tache "Tache1" est validée..
 

Pièces jointes

  • TEST1_20220506.xlsm
    127.5 KB · Affichages: 7

Chaine

XLDnaute Nouveau
Bonjour
Voir PJ pour nouvel essai
1) la liste des verbes est devenue une plage nommée
je l'ai déplacé en haut de la feuille... je ne vois pas l'intérêt de mettre ca en ligne 15.. c'est comme si tu prenais un cahier neuf et que tu commencais à le remplir à partir de la 15eme.. feuille....

2) j'ai commenté le code
3) l'option "Validée" n'est pas gérée... qu'est ce qui fait qu'une tache est validée ou pas??
ca pose des problèmes au cas où il y a une tache "Tache1" NON validée, et ensuite, plus tard dans le tablo, la meme tache "Tache1" est validée..
1°) 😊 La liste de verbe commence bien en ligne 15, j'avais juste enlevé les fioritures de mon doc d'origine pour ne garder que l’essentielle c-à-d les données à codifier et leurs emplacements dans le fichier, mais qu'importe je saurais m'adapter 😉
2°) merci pour les commentaires. c'est au TOP.
3°) En gros,
La macro pourrais être lancée à plusieurs reprises, par exemple si ajout de tâches/lignes. Je te donne un exemple concret :
Je lance la macro pour la 1ere fois => les références sont générer en col D
J'enregistre. Chaque tâches à une référence.
Puis quelques mois plus tard, on nous ajoute des nouvelles tâches à réaliser (nouvelles lignes).
(Note elles peuvent être insérées entre deux tâches déjà existantes)
Si je relance la macro sans cet OPTION :
Le code vas réaffecter une nouvelle référence à toutes les lignes. Hors, lorsqu'une référence est affectées à une tâche il ne faudrait plus quelle puisse changer.
D'où la colonne VALIDATION en E

Avec cette OPTION :
Je lance la macro pour la 1ere fois => les références sont générer en col D
Je valide toutes ses références en E
J'enregistre. Chaque tâches à sa référence unique.
Quelques mois plus tard, on nous ajoute des nouvelles tâches à réaliser
Je relance la macro pour codifier les nouvelles lignes.
Elle prend en compte l'incrémentation suivant les lignes déjà "ACTÉES"
Et j'enregistre. Les nouvelles tâches ont leurs références uniques (dont l'incrémentation vient à la suite des existantes)

Cette notion de VALIDER (par intervention humaine en colonne E) la codification réalisée par la macro (en colonne D) permettrait d’affecter la référence unique à la ligne de façon définitive (sauf si tu connais une autre méthode😉 )
Ainsi, si la macro est relancée ultérieurement, elle rechercherait l’incrémentation suivante à partir des n° précédemment validés (ceux qui sont "inscrits en dur").

Ce besoin est pas facile à expliquer je m'en excuse et surement difficile à comprendre j'avoue.
Dis-moi si besoin de plus de détaille.