XL 2019 FORMULE -incrémenter de A à ZZZ avec un pas d'incrément variable

Yaphilde

XLDnaute Nouveau
Bonjour à tous
je me casse les dents sur une formule pour incrémenter des lettres au dessus de Z. Je vous décris ma situation:

En A1: L'utilisateur peut saisir de 1 à trois caractères. Tous les caractères sont des lettre de "A" à "Z". Par Exemple "F" ou "AX" ou "EAA".

En B1: l'utilisateur saisi un nombre entier. C'est un nombre qui correspond à une valeur d'incrément. Si je saisi 5 en B1 ca aura pour signification un incrément de 5 sur la variable présente en A1 pour la la formule de calcul qui sera en C1.

En C1: Je souhaite une formule excel qui me donne le résultat de calcul d'une suite logique. l'incrémentation commence toujours de la droite vers la gauche comme le systeme numérique unité, dizaine, centaine mais avec des lettres. Voici la logique:

Si par exemple il y a un seul caractère comme la lettre F (indiqué en A1) et un incrément de 5 (indiqué en B1), on rajoute en suivant l'ordre alphabétique 5 lettres (incrément) à la lettre F ce qui nous donne en résultat la lettre K en C1. A chaque fois que l'incrément dépasse la lettre Z on incrémente une lettre sur la gauche, toujours en suivant l'ordre alphabétique. Si il n'y a pas de lettre à la gauche on la rajoute en commençant par la lettre A. Par exemple en A1 j'ai la lettre X. En B1 La valeur d'incrément 5 le résultat que je dois trouver en C1 sera "AC". Si Cette fois ci en A1 on indique AC et toujours un incrément de 5 ca doit nous donner "AH". Si en A1 je renseigne AH et en B1 la valeur de 20 en C1 le résultat devrait être BB.
Pouvez vous m'aider à construire la formule en C1.


Merci à tous de l'intérêt porté à mon sujet.
Yann
 

dysorthographie

XLDnaute Accro
Bonjour,
Un truc du genre
Code:
Sub Test()
Dim I As Long
Dim Txt As String
 
Txt = ""
I = 1 
 
Colonne_1 = AtoZ(Txt)
Colonne_2 = AtoZ(Colonne_1)
Colonne_3 = AtoZ(Colonne_2)
 
End Sub
Function AtoZ(ByVal Txt As String, Optional ByVal inx As Long = 0) As String
Txt = Space(inx + 1) & Txt
    For I = Len(Txt) - inx To 1 Step -1
        If Trim(Mid(Txt, I, 1)) = "" Then Mid(Txt, I, 1) = "A": AtoZ = Txt: Exit Function
        If Trim(Mid(Txt, I, 1)) = "Z" Then Mid(Txt, I, 1) = "A": AtoZ = AtoZ(Txt, inx + 1): Exit Function
        Mid(Txt, I, 1) = Chr(Asc(Mid(Txt, I, 1)) + 1): AtoZ = Trim(Txt): Exit Function
    Next
 
End Function
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Fonctions perso :
VB:
Function EntCol(ByVal N As Long) As String
   Do: N = N - 1: EntCol = Chr$(N Mod 26 + 65) & EntCol: N = N \ 26: Loop Until N = 0
   End Function
Function ColEnt(ByVal C As String) As Long
   Dim P As Long: For P = 1 To Len(C): ColEnt = ColEnt * 26 + Asc(UCase(Mid$(C, P, 1))) - 64: Next P
   End Function
Exemple de formule :
Code:
=EntCol(ColEnt(DECALER(C13;-1;0))+$D$12)
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Pouvez vous m'aider à construire la formule en C1.
Bonsour©
1695323524096.png


:confused: Limitation à XFD (16384 colonnes dans excel)
- mais possibilité d'avoir un pas négatif
- résultats en ligne ou colonne
 
Dernière édition:

Discussions similaires

Réponses
10
Affichages
438

Statistiques des forums

Discussions
313 322
Messages
2 097 141
Membres
106 850
dernier inscrit
benbeckman