Inversion d'un case excel (ex : 321 >123)

Résolu
Bonjour,

Je dispose d'un fichier excel qui possède plusieurs données, avec une colonne dont les données sont inversées.
Par exemple dans ma colonne j'ai les donnée 54321 en réalité je veux la donnée 12345.

pour cela j'ai réalisé les 6 fonction suivante dans 6 case excel :

=GAUCHE(DROITE($G2;NBCAR($G2)-0);1) //permet de récupérer le 5 de mon exemple
=GAUCHE(DROITE($G2;NBCAR($G2)-1);1) //permet de récupérer le 4 de mon exemple
=GAUCHE(DROITE($G2;NBCAR($G2)-2);1) //permet de récupérer le 3 de mon exemple
=GAUCHE(DROITE($G2;NBCAR($G2)-3);1) //permet de récupérer le 2 de mon exemple
=GAUCHE(DROITE($G2;NBCAR($G2)-4);1) //permet de récupérer le 1 de mon exemple
=CONCATENER(L2;K2;J2;I2;H2) // pour récupérer mon 12345

j'aurais aimé effectuer un macro de tous ça pour ne prendre qu'une case au finale!

j'ai essayé de passer par des fonction puis de concaténer le tous mais ça ne marche pas.
Voici le code :

Function chiffre4()

chiffre4 = Left(Right(RC7, Len(RC7) - 0), 1)

End Function

Function chiffre3()

chiffre3 = Left(Right(RC7, Len(RC7) - 1), 1)

End Function

Function chiffre2()

chiffre2 = Left(Right(RC7, Len(RC7) - 2), 1)

End Function

Function chiffre1()

chiffre1 = Left(Right(RC7, Len(RC7) - 3), 1)

End Function

Function chiffre0()

chiffre0 = Left(Right(RC7, Len(RC7) - 4), 1)

End Function

Sub concatenation()

Range("M4").FormulaR1C1 = "=CONCATENATE(chiffre0(),chiffre1(),chiffre2(),chiffre3(),chiffre4())"

End Sub

Pour le moment j'essai de le faire sur une case pour au finale le faire sur l'ensemble des données.

Pourriez-vous m'aider ?

Merci d'avance

MachBin

6 réponses

  1. Oui c'est normal ... le retour des fonctions est une chaine de caractères ... il faut convertir le retour.

    Si tu prends la proposition de Zoul67

    Public Function ReverseString(Text As String) As Double
         ReverseString = CLng(StrReverse(Text))
    End Function

    1. WOAW c'est vraiment magique ^^

      Je débute seulement en vba et petit à petit je vois qu'on peut faire de belle chose !

      merci pour votre aide

      bonne journée cordialement

      MachBin
      1. Re,

        J'ai testé vos version elle marche toute à la perfection.
        Cependant je ne peux pas effectuer de traitement sur ces nouvelles valeurs, est-ce normal ?
        1. Re,

          Comme l'a expliqué ujmo, il faut que ton résultat soit un nombre si tu veux faire un "traitement" (ex. une somme) alors que nos fonctions génèrent un texte.
          Il suffit normalement de forcer le type "nombre" :


          Public Function ReverseString(Text As String)
          ReverseString = CLng(StrReverse(Text))
          End Function
      2. Bonjour,

        tout d'abord créer la fonction personnalisée "inverser" :

        code :

        Function inverser(s1 As Variant)
        Dim i, l As Long
        Dim s2 As String
            s2 = ""
            l = Len(s1)
            For i = 0 To l - 1
                s2 = s2 & Mid(s1, l - i, 1)
            Next i
            inverser = s2
        End Function


        ensuite utiliser cette fonction personnalisée en choisissant la catégorie fonctions personnalisée dans la liste déroulante des catégories lors de l'insertion de la fonction.

        Il y aura peut-être des modifs selon le contexte à effectuer.
        en particulier si on traite du numérique il faudra effectuer une conversion du résultat vers un numérique.

        bien-sûr il faut avoir accès à l'onglet développeur.

        Bon courage
        cordialement
        ujmo
        1. Bonjour,

          A adapter

          Dim i As Integer
          Dim c As String
          
          For i = Len(Cells(1, 1)) To 1 Step -1
               c = c & Mid(Cells(1, 1), i, 1)
          Next i
          
          Cells(1, 2) = c 


          ;0)
          1. Bonjour,

            ça existe presque tout fait :
            Public Function ReverseString(Text As String)
            ReverseString = StrReverse(Text)
            End Function

            A+