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

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:

Dranreb

XLDnaute Barbatruc
Avec mes fonctions perso, en C1 :
Code:
=EntCol(ColEnt($A1)+$B1)
Pour A1 = "ZAA" et B1 = 78, renvoie "ZDA"
Pour A1 = "A" et B1 = 18277, renvoie "ZZZ"
Marcherait aussi pour plus de 3 lettres.
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…