Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Série de lettres

chifounou

XLDnaute Occasionnel
En étirant une cellule sur celles d'à côté, on peut aisément obtenir une série de chiffres

Est-il possible d'accomplir une série de lettres ? La première case contenant par exemple BD, et obtenir BE, BF, BG dans les cases suivantes (verticalement ou horizontalement)

Merci
 

vgendron

XLDnaute Barbatruc
Re !

Avec une fonction personalisée qui fonctionne quelque soit la longueur de la chaine initiale
VB:
Public Function IncrémentLettre(LettresInit As String) As String
Application.Volatile
nbcar = Len(LettresInit)

pos = nbcar
If Left(LettresInit, 1) = "Z" Then 'permet d'allonger la chaine de caractères d'une lettre
    LettresInit = "A" & String(nbcar, "A")
    GoTo fin
End If
fin = False
While fin = False
    If Mid(LettresInit, pos, 1) <> "Z" Then
        LettresInit = Left(LettresInit, pos - 1) & Chr(Asc(Mid(LettresInit, pos, 1)) + 1)
        If pos <> nbcar Then
            LettresInit = LettresInit & String(nbcar - pos, "A")
          
        End If
         fin = True
    Else
        pos = pos - 1
    End If
Wend
fin:
IncrémentLettre = LettresInit
End Function

mettre ce code dans un module vba standard
et il suffit de taper dans la feuille excel =Incrémentlettre(A1) et tirer vers le bas ou la droite (avec A1 qui contient la chaine de départ)
 

vgendron

XLDnaute Barbatruc
à remplacer par ce code
VB:
Public Function IncrémentLettre(LettresInit As String) As String
Application.Volatile
nbcar = Len(LettresInit)

pos = nbcar
For i = 1 To nbcar
    If Mid(LettresInit, i, 1) <> "Z" Then
        NoFullZ = True
    End If
Next i

If NoFullZ = False Then 'permet d'allonger la chaine de caractères d'une lettre
    LettresInit = "A" & String(nbcar, "A")
    GoTo fin
End If
fin = False

While fin = False
    If Mid(LettresInit, pos, 1) <> "Z" Then
        LettresInit = Left(LettresInit, pos - 1) & Chr(Asc(Mid(LettresInit, pos, 1)) + 1)
        If pos <> nbcar Then
            LettresInit = LettresInit & String(nbcar - pos, "A")
           
        End If
         fin = True
    Else
        pos = pos - 1
    End If
Wend
fin:
IncrémentLettre = LettresInit
End Function

Le précédent faisait passer Z à AA
mais aussi ZA à AAA. au lieu de ZB
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour chifounou, à tous,
Un autre essai avec commentaires:
VB:
Function ABC$(ByVal x$)
Dim I&, C As String * 1, R As Boolean, Res$
    x = UCase(x): R = True
    For I = Len(x) To 1 Step -1
        C = Mid$(x, I)  'Ième caractère (à partir de la droite)
        If R Then    'si retenue R
            C = Chr(Asc(C) + 1)  'on incrémente le Ième caractère
            If C <= "Z" Then     'C est inférieur à "Z" donc autorisé
                Res = C & Res    'on ajoute C au résultat
                R = False        'il n'y a pas de retenue
            Else
                C = "A"          'C est supérieur à "Z" donc interdit, on passe C à "A"
                Res = C & Res    'on ajoute C au résultat
                R = True         'il y a une retenue
            End If
        Else    'si pas de retenue R
            Res = C & Res     'on ajoute C au résultat
            R = False         'il n'y a pas de retenue
        End If
    Next I
    'traitement de la dernière retenue R
    If R Then ABC = "A" & Res Else ABC = Res
End Function
 

Pièces jointes

  • chifounou-série lettres- v1.xlsm
    22.5 KB · Affichages: 27
Dernière édition:

Discussions similaires

Réponses
3
Affichages
351
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…