incrementation da l'alphabet (pour calcul Nb nouvelle plaque immat)

Macpoy

XLDnaute Impliqué
bonsoir le forum,

j'avoue, ce soir je n'ai rien de plus matériel / sérieux à proposer à votre perspicacité!

comment puis je incrémenter l'alphabet de manière à calculer le nombre de véhicules déjà immatriculés depuis la mise en place des nouvelles plaques.

rappel: format des plaques :

aa 001 aa, aa 002 aa, etc (dans cette série cela représente 999 immatriculations)
ensuite, on passe à aa 001 ab => 999 autres, etc ........

sachant que ao et ai, ne sont pas utilisés et que ss peut être pas.
pour u j'en sais rien !!!

à ce jour j'ai vu une plaque AQ 678 JN.

merci de bien vouloir (comme moi) vous amuser avec Excel pour répondre
à cette futile interrogation.

@plus
 

ROGER2327

XLDnaute Barbatruc
Re : incrementation da l'alphabet (pour calcul Nb nouvelle plaque immat)

Bonjour Macpoy
À vérifier :
Code:
[COLOR="DarkSlateGray"][B]=SI(A1="";"";(((CODE(GAUCHE(A1;1))-(CODE(GAUCHE(A1;1))>73)
-(CODE(GAUCHE(A1;1))>79)-(CODE(GAUCHE(A1;1))>85))*23
+CODE(STXT(A1;2;1))-(CODE(STXT(A1;2;1))>73)
-(CODE(STXT(A1;2;1))>79)-(CODE(STXT(A1;2;1))>85)
-(CODE(GAUCHE(A1;1))*23+CODE(STXT(A1;2;1))>1992))*528
+(CODE(STXT(A1;8;1))-(CODE(STXT(A1;8;1))>73)
-(CODE(STXT(A1;8;1))>79)-(CODE(STXT(A1;8;1))>85))*23
+CODE(DROITE(A1;1))-(CODE(DROITE(A1;1))>73)
-(CODE(DROITE(A1;1))>79)-(CODE(DROITE(A1;1))>85)
-(CODE(STXT(A1;8;1))*23+CODE(DROITE(A1;1))>1992)
-825240)*999+STXT(A1;4;3))[/B][/COLOR]

Avec AQ-678-JN en A1, renvoie 7 581 090.​
ROGER2327
#3449


20 Floréal An CCXVIII
2010-W18-7T02:03:26Z
 

Macpoy

XLDnaute Impliqué
Re : incrementation da l'alphabet (pour calcul Nb nouvelle plaque immat)

bonjour le forum, kiki29, ROGER2327,

merci à tous les deux pour vos réponses qui vont bien audela de mes espérances.
certes ce n'est que de la culture générale mais bon !!

par contre, ce doit être tout bête mais je n'arrive toujours pas à incrémenter l'alphabet . les poignées de recopies, ne me permettent que de recopier la lettre se trouvant dans la cellule d'origine.
avez vous une idée ?

@plus
 

ROGER2327

XLDnaute Barbatruc
Re : incrementation da l'alphabet (pour calcul Nb nouvelle plaque immat)

Re...
Je ne vois pas très bien ce que vous voulez exactement. J'avais cru répondre ce matin en proposant une formule donnant le rang d'une plaque donnée.
(...) comment puis je incrémenter l'alphabet de manière à calculer le nombre de véhicules déjà immatriculés depuis la mise en place des nouvelles plaques (...)
Quant à incrémenter l'alphabet, je ne comprends même pas. Pour mémoire :
incrémenter, verbe transitif
Sens : Augmenter d'une quantité déterminée une variable à chaque boucle d'un programme.
incrémenter : définition et conjugaison du mot incrémenter
En informatique, l'incrémentation est l'opération qui consiste à ajouter une valeur entière fixée à un compteur. L'opération inverse, la décrémentation, consiste à retirer une valeur entière au compteur.
Incrémentation - Wikipédia
Définition du mot INCREMENTER :
Désigne le fait d'ajouter une valeur (habituellement la valeur est 1) à une variable.
INCREMENTER

À tout hasard, voici une formule réciproque de la précédente, permettant de trouver le libellé de la nième plaque d'immatriculation conforme au Système d'Immatriculation des Véhicules (S.I.V.) depuis le 15 avril 2009 :
Code:
[COLOR="DarkSlateGray"][B]=SI((A1>0)*(A1<278505217);INDEX(TAB;1+(((A1-1-MOD(A1-1;999))/999
-MOD((A1-1-MOD(A1-1;999))/999;528))/528
+(((A1-1-MOD(A1-1;999))/999
-MOD((A1-1-MOD(A1-1;999))/999;528))/528>383)
-MOD(((A1-1-MOD(A1-1;999))/999
-MOD((A1-1-MOD(A1-1;999))/999;528))/528
+(((A1-1-MOD(A1-1;999))/999
-MOD((A1-1-MOD(A1-1;999))/999;528))/528>383);23))/23)
&INDEX(TAB;1+MOD(((A1-1-MOD(A1-1;999))/999
-MOD((A1-1-MOD(A1-1;999))/999;528))/528
+(((A1-1-MOD(A1-1;999))/999
-MOD((A1-1-MOD(A1-1;999))/999;528))/528>383);23))
&"-"&TEXTE(1+MOD(A1-1;999);"000")&"-"
&INDEX(TAB;1+(MOD((A1-1-MOD(A1-1;999))/999;528)
+(MOD((A1-1-MOD(A1-1;999))/999;528)>383)
-MOD(MOD((A1-1-MOD(A1-1;999))/999;528)
+(MOD((A1-1-MOD(A1-1;999))/999;528)>383);23))/23)
&INDEX(TAB;1+MOD(MOD((A1-1-MOD(A1-1;999))/999;528)
+(MOD((A1-1-MOD(A1-1;999))/999;528)>383);23));"")[/B][/COLOR]
Il faut définir la matrice TAB ainsi :
Code:
[COLOR="DarkSlateGray"][B]={"A"\"B"\"C"\"D"\"E"\"F"\"G"\"H"\"J"\"K"\"L"\"M"\"N"\"P"\"Q"\"R"\"S"\"T"\"V"\"W"\"X"\"Y"\"Z"}[/B][/COLOR]
Avec 7 581 090 en A1, on obtient AQ-678-JN.

278 505 216 en A1 renvoie ZZ-999-ZZ.

Est-ce plus conforme à votre attente ?​
ROGER2327
#3451


20 Floréal An CCXVIII
2010-W18-7T23:58:55Z
 

Pièces jointes

  • IMMATRICULATION_SIV_3451.xls
    17.5 KB · Affichages: 267

Macpoy

XLDnaute Impliqué
Re : incrementation da l'alphabet (pour calcul Nb nouvelle plaque immat)

bonjour le forum, ROGER2327, kiki29,

merci beaucoup pour la grande quantité de travail que vous a demandé cette question.
vos réponses vont bien au-delà de ce que j'espérai. avec l'avantage d'en apprendre un peu plus sur la manipulation des formules et sur la langue française.

merci encore
vous souhaitant bonne journée.
 

ROGER2327

XLDnaute Barbatruc
Re : incrementation da l'alphabet (pour calcul Nb nouvelle plaque immat)

Re...
J'ai rappelé la définition d'incrémenter non pas comme une leçon, mais parce que je n'en connais pas d'autre. Sincèrement, je ne comprends pas bien ce que vous souhaitez. C'est pourquoi j'ai cherché d'abord une formule qui, à partir du libellé d'une plaque (AQ-678-JN) donne le rang de la plaque (7 581 090) depuis la première. J'ai cherché ensuite une formule qui fait l'inverse : trouver le libellé de la plaque en connaissant son rang dans la série.
Je ne suis d'ailleurs pas certain à 100% d'avoir une solution exacte, car je trouve des résultats souvent différents de ceux qu'on trouve sous le lien proposé par kiki29. (Je n'ai pas pris le temps de décortiquer les formules pour voir pourquoi les résultats sont différents...)

Est-ce que vos propres résultats correspondent à l'une ou l'autre des solutions ?

D'autre part, compte tenu de la complication des formules que je propose, je me demande s'il n'y a pas plus simple. Si quelqu'un peut simplifier, je suis preneur...
À suivre, peut-être...​
ROGER2327
#3452


21 Floréal An CCXVIII
2010-W19-1T16:47:33Z
 

Macpoy

XLDnaute Impliqué
Re : incrementation da l'alphabet (pour calcul Nb nouvelle plaque immat)

bonsoir le forum, ROGER2327, kiki29,

sans le vouloir, je crois bien que j'ai créer un post ou les passionnés d'Excel
veulent aller plus loin. c'est vachement sympa !!!

Code:
Est-ce que vos propres résultats correspondent à l'une ou l'autre  des  solutions ?

ben en fait .... euh ....
pour que mes résultats puissent correspondre, il faudrait que je possède votre habileté à manipuler les formules.
perso je pensai plus simplement à aligner les immatriculations et utiliser, par exemple, NBVAL.

je vous avoue être désolé d'avoir occupé votre temps ainsi. il n'en reste pas moins que j'apprécie vraiment ce que vous m'avez fait découvrir.


sans dénigrer le travail fourni, qui je le répète est au-delà de mes espérances et pour lequel je vous suis infiniment reconnaissant,
le but premier était :

Code:
comment puis je incrémenter l'alphabet

je met "a" en A1 et je tire les poignées de recopie pour avoir "b" en A2,
"c" en A3, "d" en A4 etc ...... jusqu'à "z"

merci encore de vous passionner pour ce fil,
au plaisir de vous lire.

@plus Jacques
 

job75

XLDnaute Barbatruc
Re : incrementation da l'alphabet (pour calcul Nb nouvelle plaque immat)

Bonsoir Macpoy, Roger,

je met "a" en A1 et je tire les poignées de recopie pour avoir "b" en A2,
"c" en A3, "d" en A4 etc ...... jusqu'à "z"

Cela n'est pas difficile, mettre en A1 :

Code:
=CAR(96+LIGNE())

Mais pour incrémenter les numéros d'immatriculation, c'est une autre paire de manche !

A+
 

ROGER2327

XLDnaute Barbatruc
Re : incrementation da l'alphabet (pour calcul Nb nouvelle plaque immat)

Re...
(...)
Mais pour incrémenter les numéros d'immatriculation, c'est une autre paire de manche !
(...)
Il y a une solution :
1. mettre 911085 (par exemple) en A3 ;
2. mettre la formule du message #5 en B3 (on obtient AB-996-SR) ;
3. sélectionner la plage A3:B3 ;
4. tirer la sélection vers le bas par le coin inférieur droit de B3.

On obtient alors la série :
AB-996-SR
AB-997-SR
AB-998-SR
AB-999-SR
AB-001-ST
AB-002-ST
AB-003-ST
AB-004-ST
AB-005-ST
AB-006-ST
(...)
Évidemment, ce n'est pas encore parfait puisqu'on utilise deux colonnes...​
ROGER2327
#3454


21 Floréal An CCXVIII
2010-W19-1T22:59:02Z
 

Staple1600

XLDnaute Barbatruc
Re : incrementation da l'alphabet (pour calcul Nb nouvelle plaque immat)

Bonsoir à tous


Macpoy
Pour avoir le choix entre minuscule/majuscule
avec en B1 1 ou 0 comme valeur
En A1:
=SI($B$1=0;CAR(LIGNE()+96);CAR(LIGNE()+64))
puis recopie vers le bas.

EDITION: comme je me suis amusé à le faire en VBA
je le poste
Code:
Sub c_alpha(casse As Boolean)
With [A1].Resize(26)
    .FormulaLocal = IIf(casse, "=CAR(96+LIGNE())", "=CAR(64+LIGNE())")
    .Value = .Value
End With
End Sub
Code:
Sub a_min()
c_alpha 1
End Sub
Code:
Sub a_maj()
c_alpha 0
End Sub
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : incrementation da l'alphabet (pour calcul Nb nouvelle plaque immat)

Suite...
Les formules sont décidément trop lourdes. Je crois qu'écrire des formules personnalisées en VB est plus efficace... ...et beaucoup plus facile.

Par exemple, pour passer du rang au libellé :
Code:
[COLOR="DarkSlateGray"][B]Function libN$(N)
Application.Volatile
Dim ch, u&
   If IsNumeric(N) Then
      If (0 < N) * (N < 278505217) Then
         ch = Array("A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", _
            "M", "N", "P", "Q", "R", "S", "T", "V", "W", "X", "Y", "Z")
         libN = "-" & Format(1 + (N - 1) Mod 999, "000") & "-"
         N = (N - 1) \ 999
         u = N Mod 528: u = u - (u > 383)
         libN = libN & ch(u \ 23) & ch(u Mod 23)
         u = N \ 528: u = u - (u > 383)
         libN = ch(u \ 23) & ch(u Mod 23) & libN
      End If
   End If
End Function[/B][/COLOR]
ou encore :
Code:
[COLOR="DarkSlateGray"][B]Function libN1$(N)
Application.Volatile
Dim ch$, u&
   If IsNumeric(N) Then
      If (0 < N) * (N < 278505217) Then
         ch = "ABCDEFGHJKLMNPQRSTVWXYZ"
         libN1 = "-" & Format(1 + (N - 1) Mod 999, "000") & "-"
         N = (N - 1) \ 999
         u = N Mod 528: u = u - (u > 383)
         libN1 = libN1 & Mid$(ch, 1 + u \ 23, 1) & Mid$(ch, 1 + u Mod 23, 1)
         u = N \ 528: u = u - (u > 383)
         libN1 = Mid$(ch, 1 + u \ 23, 1) & Mid$(ch, 1 + u Mod 23, 1) & libN1
      End If
   End If
End Function[/B][/COLOR]
Alors =libN(7581090) (ou =libN1(7581090)) renvoie AQ-678-JN

En sens inverse :
Code:
[COLOR="DarkSlateGray"][B]Function Nlib(lib$)
Application.Volatile
Dim ch$, x&, y&
   ch = "ABCDEFGHJKLMNPQRSTVWXYZ"
   lib = Replace(Replace(lib, "-", ""), " ", "")
   If lib Like "??###??" And Not (lib Like "??000??" Or lib Like "*SS*" Or lib Like "*I*" Or lib Like "*O*" Or lib Like "*U*") Then
      x = 23 * (InStr(1, ch, Mid$(lib, 6, 1)) - 1) + InStr(1, ch, Mid$(lib, 7, 1)) - 1
      y = 23 * (InStr(1, ch, Mid$(lib, 1, 1)) - 1) + InStr(1, ch, Mid$(lib, 2, 1)) - 1
      Nlib = 999 * (528 * (y + (y > 383)) + x + (x > 383)) + Mid$(lib, 3, 3)
   Else
      Nlib = ""
   End If
End Function[/B][/COLOR]
Alors, =Nlib("AQ-678-JN") renvoie 7581090.

L'incrémentation au sens où l'entend Macpoy (merci au passage d'avoir soulevé une question aussi amusante...) devient facile.
Par exemple : mettre PQ-997-SR en A1, puis =libN(Nlib(A1)+1) en A2 et recopier vers le bas...
ROGER2327
#3455


21 Floréal An CCXVIII
2010-W19-1T23:35:04Z
 

miju16

XLDnaute Nouveau
Re : incrementation da l'alphabet (pour calcul Nb nouvelle plaque immat)

Bonsoir ROGER2327,

je suis nouveau sur le forum et curieux.

Je n'arrive pas à comprendre la formule de la cellule dans le tableau Excel ( et non en VBA)
qui permet à partir d'un libellé de trouver son rang d'immatriculation


- à quoi correspond 1992 ? ( peut être ((23*23)-2) )
- et surtout 825240 ?????????
- lorsqu'on tape en A1" "WW-001-AA", il y a un rang qui s'affiche alors que cette série est "interdite". est-ce que cette série est incluse dans le 825240??????



Merci
 
Dernière édition:

13GIBE59

XLDnaute Accro
Re : incrementation da l'alphabet (pour calcul Nb nouvelle plaque immat)

Bonsoir le forum.

Juste un petit merci à Macpoy d'avoir posé cette question "prenante", et un grand merci à Roger, Job et Staple pour leurs réponses ô combien instructives !
Je me régale...

Bonne soirée à tous.
 

ROGER2327

XLDnaute Barbatruc
Re : incrementation da l'alphabet (pour calcul Nb nouvelle plaque immat)

Re…
Bonsoir ROGER2327,

je suis nouveau sur le forum et curieux.
Ce n'est pas incompatible.

Je n'arrive pas à comprendre la formule de la cellule dans le tableau Excel ( et non en VBA)
qui permet à partir d'un libellé de trouver son rang d'immatriculation
Moi-même, j'ai du mal…
Non, je déconne !

- à quoi correspond 1992 ? ( peut être ((23*23)-2) )
Je ne crois pas : 23 x 23 -2 = 527.

- et surtout 825240 ?????????
Cette constante tient au fait que 1°) le SIV utilise 23 lettres ; 2°) le code ASCII de la lettre A est 65. Si les codes ASCII de l'alphabet majuscule A-Z avaient été 0-25 au lieu de 65-90, la constante eût été nulle.

- lorsqu'on tape en A1" "WW-001-AA", il y a un rang qui s'affiche alors que cette série est "interdite". est-ce que cette série est incluse dans le 825240??????
Non.

La règlementation évolue. Le groupement SS a d'abord été interdit, puis, plus tard la série WW qui n'était pas initialement exclue, l'a été. Les formules que j'ai proposées jadis tiennent compte de la première évolution, mais ignorent la deuxième.

Voici une formule tenant compte de l'exclusion de la série WW :
Code:
=SI(NBCAR(A1)=9;SI(((CHERCHE("I";A1&" I")+CHERCHE("O";A1&" O")+CHERCHE("U";A1&" U")+CHERCHE("SS";A1&" SS"))<44)+(GAUCHE(A1;2)="WW")+NON(EXACT(A1;MAJUSCULE(A1)))+NON(ESTNUM(0+STXT(A1;4;3)))+(0+STXT(A1;4;3)=0);"";
(((CODE(A1)-(CODE(A1)>73)-(CODE(A1)>79)-(CODE(A1)>85))*23
+CODE(STXT(A1;2;1))-(CODE(STXT(A1;2;1))>73)-(CODE(STXT(A1;2;1))>79)-(CODE(STXT(A1;2;1))>85)
-(CODE(A1)*23+CODE(STXT(A1;2;1))>1992)
-(CODE(A1)*23+CODE(STXT(A1;2;1))>2088))*528
+(CODE(STXT(A1;8;1))-(CODE(STXT(A1;8;1))>73)-(CODE(STXT(A1;8;1))>79)-(CODE(STXT(A1;8;1))>85))*23
+CODE(DROITE(A1))-(CODE(DROITE(A1))>73)-(CODE(DROITE(A1))>79)-(CODE(DROITE(A1))>85)
-(CODE(STXT(A1;8;1))*23+CODE(DROITE(A1))>1992)
-825240)*999+STXT(A1;4;3));"")
Les constantes :
Code:
9	Évident !
23	=NBCAR("ABCDEFGHJKLMNPQRSTVWXYZ")
44	Évident ! (Le test associé élimine les immatriculations contenant I ou O ou U ou SS)
73	=CODE("I")
79	=CODE("O")
83	=CODE("S")
85	=CODE("U")
87	=CODE("W")
528	=NBCAR("ABCDEFGHJKLMNPQRSTVWXYZ")^2-1
999	=10^3-1
1992	=CODE("S")*NBCAR("ABCDEFGHJKLMNPQRSTVWXYZ")+CODE("S")
2088	=CODE("W")*NBCAR("ABCDEFGHJKLMNPQRSTVWXYZ")+CODE("W")
825240	=(CODE("A")*NBCAR("ABCDEFGHJKLMNPQRSTVWXYZ")+CODE("A"))*(NBCAR("ABCDEFGHJKLMNPQRSTVWXYZ")^2-1)+(CODE("A")*NBCAR("ABCDEFGHJKLMNPQRSTVWXYZ")+CODE("A"))
Avec cette nouvelle formule, ZZ-999-ZZ renvoie 277 977 744.

Le jour où un zozo s'avisera d'exclure les groupements ou les séries JC, FN, KK, NS, PC, PD, PQ, PS, PT, PV, QQ, SA…, il faudra encore bricoler.


De rien.
ROGER2327
#4851


Mercredi 11 Décervelage 138 (Saint Eustache, libérateur, SQ)
19 Nivôse An CCXIX
2011-W01-6T14:34:07Z
 
Dernière édition:

Statistiques des forums

Discussions
312 153
Messages
2 085 800
Membres
102 980
dernier inscrit
brossadan