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

XL 2013 Inverser des caractères deux par deux dans une cellule

maxou

XLDnaute Nouveau
Bonjour à tous,

il y a longtemps que je ne suis pas passé sur le forum excel. Je galère sur un problème. Je cherche à inverser les chaines de caractères deux par deux sur une cellule?
Je dispose de cette chaîne A1B2C3D4, je cherche à obtenir 4C3B2A1.
Pour l'instant j'ai créé une fonction:

Function Reverse$(ByVal S$)
Reverse = StrReverse(S)
End Function

mais le résultat n'est pas le bon. puisque j'obtient 4D3C2B1A; Comment puis je continuer a avancer?

Merci pour votre aide.

Cordialement Maxime
 

Dranreb

XLDnaute Barbatruc
Bonsoir Staple1600
Et pourquoi l'argument R y est-il passé ByRef, alors qu'à aucun moment la fonction ne le change par un Set ?
Encore qu'on se fiche de préciser ByVal alors qu'il le faudrait, soit, mais qu'en plus on précise ByRef à la place, c'est un comble …
 

Staple1600

XLDnaute Barbatruc
Bonsoir Dranreb

Parce qu’après une journée de boulot, je devrais faire une pause et prendre une collation avant de faire du VBA
Merci de me remettre les idées en place.
VB:
Function myReverse(ByRef R As Range) As String
Dim Z$, i As Byte, s$
If Len(R) < 4 Or R.HasFormula Then Exit Function
Z = StrReverse(R.Text)
For i = 1 To Len(Z) Step 2
s = s & StrReverse(Mid(Z, i, 2))
Next
myReverse = s
End Function
 
Dernière édition:

dg62

XLDnaute Barbatruc
Re,
Adaptation du code de Simply en fonction
VB:
Function reverse(chaineIni As Range) As String
    Dim l As Integer
    Dim chaine As String
    chaine = ""
    For l = Len(chaineIni) - 1 To 1 Step -2
        chaine = chaine & Mid$(chaineIni, l, 2)
    Next l
 reverse = chaine
End Function
 

maxou

XLDnaute Nouveau
Bonjour a tous,

Merci pour vos multiples réponses, j'avais en effet besoin d'adapté sa dans une fonction. Je vous remercie pour votre aide précieuse qui me fait gagner un temps énorme et les erreurs de saisie .
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
autre approche extraite d'un précédent travail de colorimétrie Offset
VB:
Function RevHex(target, Nbcar As Integer)
Dim idx As Integer, Cible As String
        Cible = Right(String(Nbcar, "0") & CStr(target.Value), Nbcar)
        For idx = 1 To Nbcar Step 2
                RevHex = Mid(Cible, idx, 2) & RevHex
        Next
End Function
 

Discussions similaires

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