XL 2019 Incrémentation

sum01

XLDnaute Occasionnel
Bonjour à toutes et tous,

Je fais appel à votre aide avant de sombrer dans la folie car au départ je pensais le problème simple mais après une journée et les yeux qui se croise. J'essaie de trouve une solution pour incrémenter une liste de codes. Cette liste suit une logique. Chaque fois que j'arrive à 9, je recommence avec la lettre A ou à l'inverse, lorsque j'arrive à la lettre Z, je recommence avec le chiffre 0 et ainsi de suite. J'ai essayé de représenter la progression dans le petit fichier Excel ci-joint.
Je ne parviens pas à trouver une formule pour incrémenter cette progression. Une des piste que j'ai essayé de suivre est de remplacer les lettres par des chiffres en suivant la position dans l'alphabet mais là aussi je me suis perdu.
 

Pièces jointes

  • incrémentation.xlsx
    9.4 KB · Affichages: 35

sum01

XLDnaute Occasionnel
Bonjour,
Il faudrait aussi que l'on comprenne à quoi ça vous sert 🤔
@+
Bonjour Bruno, c'est vrai que sans le contexte cette demande n'a ni queue ni tête. Cette codification alphanumérique est en place depuis des années (je n'en suis pas à l'origine). Et j'essaie de créer une liste compète qui n'existe pas à ce jour. En effet, pour seule documentation, j'ai des notions d'intervalles écris sur un doc. word. Par exemple si nous avons à faire à tel article alors cet article se trouve dans la zone codifiée [599-6AB]. J'essaie d'améliorer cela en tentant de reconstituer ce qui se trouve entre 599 et 6AB (exemple).
 

sum01

XLDnaute Occasionnel
Re-Bonjour le Forum, j'ai peut-être trouvé une partie de solution dans l'onglet essai du fichier ci-joint. La formule me permet d'incrémenter jusqu'à Z mais ensuite je bloque pour poursuivre la progression avec 41A
 

Pièces jointes

  • incrémentation.xlsx
    10.9 KB · Affichages: 6

Phil69970

XLDnaute Barbatruc
Bonjour @sum01, Bruno, le forum

Issue de ce forum et légèrement retouché
Cela permet d'aller de A à ZZ
Si tu mets A en A1 :
Code:
Sub Incrementation()

Dim i As Integer, j As Integer, x As Integer, s As Integer, Z&
Dim lettre As String
Dim tablo()

On Error Resume Next
For Z = 1 To 701
    For i = 0 To 25
        lettre = Chr(i + 65)
        ReDim Preserve tablo(i)
        tablo(i) = lettre
    Next
   
    For j = 0 To 25
        For r = 0 To 25
            lettre = tablo(j) & tablo(r)
            x = UBound(tablo) + 1
            ReDim Preserve tablo(x)
            tablo(x) = lettre
        Next
    Next
   
    For s = 0 To UBound(tablo)
        If tablo(s) = Cells(Z, 1).Value Then
            Cells(Z + 1, 1).Value = tablo(s + 1)
        End If
    Next

Next Z
End Sub

Si cela peut donner des idées à quelqu'un...

@Phil69970
 

sum01

XLDnaute Occasionnel
Bonjour @sum01, Bruno, le forum

Issue de ce forum et légèrement retouché
Cela permet d'aller de A à ZZ
Si tu mets A en A1 :
Code:
Sub Incrementation()

Dim i As Integer, j As Integer, x As Integer, s As Integer, Z&
Dim lettre As String
Dim tablo()

On Error Resume Next
For Z = 1 To 701
    For i = 0 To 25
        lettre = Chr(i + 65)
        ReDim Preserve tablo(i)
        tablo(i) = lettre
    Next
 
    For j = 0 To 25
        For r = 0 To 25
            lettre = tablo(j) & tablo(r)
            x = UBound(tablo) + 1
            ReDim Preserve tablo(x)
            tablo(x) = lettre
        Next
    Next
 
    For s = 0 To UBound(tablo)
        If tablo(s) = Cells(Z, 1).Value Then
            Cells(Z + 1, 1).Value = tablo(s + 1)
        End If
    Next

Next Z
End Sub

Si cela peut donner des idées à quelqu'un...

@Phil69970
Bonjour Phil, merci pour cette réponse. Superbe macro que j'ai essayé d'adapter. Lorsque on arrive à Z on passe à AA. Mais si je souhaite que, arrivé à Z, la boucle recommence à A de façon à incrémenter comme dans mon petit exemple feuille essai2 et cela jusqu'à 99 ?
Comment pourrait-on adapter la macro ?
Un tout grand merci pour votre aide !
 

Pièces jointes

  • incrémentation.xlsx
    18.1 KB · Affichages: 2

sum01

XLDnaute Occasionnel
ReBonjour à Tous, merci pour votre réponse PierreJean. J'ai fusionné les deux marco et et je crois bien que l'objectif est atteint. Je joins le fichier si cela peut-être utile. Par contre, je ne suis pas sûr que du point de vue de la structure la macro tel que je la présente maintenant soit propre ?
Encore mille fois merci pour votre aide toujours fantastique
 

Pièces jointes

  • incrémentation(2).xlsm
    32.8 KB · Affichages: 3
Dernière édition:

Phil69970

XLDnaute Barbatruc
Re

Je suis pas sur du tout que cela corresponde à ta demande initiale car 6AB est non trouvé dans la liste crée.

la zone codifiée [599-6AB].
1616243985254.png


@Phil69970
 
C

Compte Supprimé 979

Guest
Bonjour le fil,

Si j'ai bien compris, ce n'est pas si simple que ça, voici un fichier avec du code (non optimisé) qui semble faire le job ;)

@+
 

Pièces jointes

  • Sum01_incrémentation.xlsm
    101.6 KB · Affichages: 6

job75

XLDnaute Barbatruc
Bonjour sum01, Bruno, Phil69970, Pierre,

Voyez le fichier joint et cette macro évènementielle dans le code de la feuille "Essai" :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Set Target = Target(1)
If Not Target Like "#*[A-Z]" Then Exit Sub
Dim n&, a%
Cancel = True
n = Val(Target)
a = Asc(Right(Target, 1))
Target(2) = IIf(a < Asc("Z"), n & Chr(a + 1), n + 1 & "A")
End Sub
A+
 

Pièces jointes

  • incrémentation(1).xlsm
    17.7 KB · Affichages: 6

job75

XLDnaute Barbatruc
Une variante dans ce fichier (2) avec le choix du nombre de cellules à remplir :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Set Target = Target(1)
If Not Target Like "#*[A-Z]" Then Exit Sub
Dim x$, nn, resu$(), i&, n&, a%
Cancel = True
Do
    x = InputBox("Nombre de cellules à remplir :", "Incrémentation", nn)
    If x = "" Then Exit Sub
    nn = Int(Val(x))
Loop While nn < 1 Or Target.Row + nn > Rows.Count
ReDim resu(1 To nn, 1 To 1)
x = Target
For i = 1 To nn
    n = Val(x)
    a = Asc(Right(x, 1))
    x = IIf(a < 90, n & Chr(a + 1), n + 1 & "A")
    resu(i, 1) = x
Next
'---restitution---
Target(2).Resize(nn) = resu
End Sub
 

Pièces jointes

  • incrémentation(2).xlsm
    19.1 KB · Affichages: 9
C

Compte Supprimé 979

Guest
Salut Job75, joli travail, mais...

Pour info, si on souhaite partir de 599, ça ne fonctionne pas ;)

Ensuite il y a une erreur, dans ton code on passe de 59Z à 60A, or dans l'exemple de sum01 on doit passer à à 5A0 :eek:

Comme je l'ai dit, pas si simple 😜

@+
 
Dernière modification par un modérateur:

sum01

XLDnaute Occasionnel
Bonjour Job75, Bruno, Phil69970, Pierre,
Punaise, quelle sacrées solutions que vous amenez ici. Des œuvres d'art en terme de code pour lequel, même avec 200 ans à disposition, je n'y serai jamais arrivé. Ces solutions font le job et vont m'aider à construire une table de correspondance pour rendre plus facile la lecture de cette codification. Il est vrai que la structure a été mal pensée dès le départ et il est impossible de la changer malheureusement. Encore merci pour votre aide. Très bon week-end
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 499
Messages
2 110 250
Membres
110 711
dernier inscrit
chmessi