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?
Sub Test()
strValue = "A1B2C3D4"
For lngLoop = Len(strValue) - 1& To 1& Step -2&
strReturn = strReturn & Mid$(strValue, lngLoop, 2)
Next lngLoop
MsgBox strReturn
End Sub
Function myReverse(ByRef R As Range) As String
Dim Z$, i As Byte, s$
Z = StrReverse(R.Text)
For i = 1 To Len(Z) Step 2
s = s & StrReverse(Mid(Z, i, 2))
Next
myReverse = s
End Function
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 …
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
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
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 .
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