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

Gauche ou droite selon condition

  • Initiateur de la discussion René du var
  • Date de début
R

René du var

Guest
Bonjour le forum,

J'ai besoin d'une formule capable de d'extraire 15 caractères

Comme on peut le voir ci-dessous parfois ils se trouvent à droite du "/"
ou à gauche.


Exemples ;

Réimputation mars 100151K/75905212602534

677123005103819/340M0010


Merci d'avance

René du var
 
@

@+Thierry

Guest
Bonjour René, re Jean Marie

En fait René est un truqueur LOL !! cette ligne vient de me faire chercher un moment pourquoi ma Function "SPLIT15" ne retournait rien :

Réimputation mars 100151K/75905212602534

Car "75905212602534" ne contient que 14 caratères !! lol

Donc même la formule de Jean-Marie est tributaire d'avoir exactement 15 caractères car sinon dans ce cas de figure elle retourne :
"/75905212602534"

En fait j'ai fait deux fonctions, que l'on peut utiliser directement depuis la feuille dans une cellule :
=SPLIT15(A1)
=SPLITLONGEST(A1)

Function SPLIT15(ByRef Cell As Range)
Dim TheString As String, TheString15 As String
Dim i As Byte
Dim contenu As Variant
Application.Volatile

TheString = Cell.Value
contenu = Split(TheString, Chr(47))
  For i = 0 To UBound(contenu)

   If Len(contenu(i)) = 15 Then
     TheString15 = contenu(i)
   End If
  Next

SPLIT15 = TheString15
End Function


Function SPLITLONGEST(ByRef Cell As Range)
Dim TheString As String, TheLongestString As String
Dim i As Byte, x1 As Byte, x2 As Byte
Dim contenu As Variant
Application.Volatile

TheString = Cell.Value
contenu = Split(TheString, Chr(47))
   For i = 0 To 1
     x1 = Len(contenu(0))
     x2 = Len(contenu(1))
   Next

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If x1 < x2 Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TheLongestString = contenu(1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TheLongestString = contenu(0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If

SPLITLONGEST = TheLongestString
End Function


La fonction SPLIT15 te retournera uniquement la chaine de caractère ayant 15 digits (quelle que soit le nombre de Slash)

La fonction SPLITLONGEST te retournera la chaine de caractère la plus long en deux chaines séparée par un seul Slash (ou le premier si il y en a plus)

Bon Dimanche
@+Thierry

PS La Function "SPLIT" est reconnue uniquement depuis Excel 2000 et +
 
R

René du var

Guest
Bonjour Jean Marie et Thierry et le forum,

SI(ESTNUM(STXT(A1;1;15)+0);GAUCHE(A1;15);DROITE(A1;15))

11222333444555/55555 333444555/55555 <<< "réponse bizarre"
11/111222333444555 111222333444555
644121309102597//6853 644121309102597


Effectivement il arrive parfois que le le matricule soit tronqué à 14 caractères .......

Dans ce cas là il faudrait renvoyer la réponse "Erreur" afin de me faciliter la tâche.

Serait-il possible d'avoir une traduction litérale des formules ?

Merci encore d'avoir eu de la patience


René du var
 
J

Jean-Marie

Guest
Re...

=SI(STXT(A1;16;1)="/";GAUCHE(A1;15);SI(STXT(A1;nbcar(A1)-16;1)="/";DROITE(A1;15);"Erreur de positionnement"))

Litéralement si le 16ème caractère placé à gauche de la chaîne est le "/" prendre les 15 premiers caractères, ce n'est pas le cas, il faut contrôler si le 16ème caractère placé à droite de la chaîne est le "/" prendre les 15 derniers caractères, dans le cas contraire message d'erreur.

@+Jean-Marie
 
R

René du var

Guest
Voici le résultat


formule initiel :
=SI(STXT(A1;16;1)="/";GAUCHE(A1;15);SI(STXT(A1;nbcar(A1)-16;1)="/";DROITE(A1;15);"Erreur de positionnement"))

formule après modification :
SI(STXT(A4;16;1)="/";GAUCHE(A4;15);SI(STXT(A4;NBCAR(A4)-"""15""";1)="/";DROITE(A4;15);"Erreur de positionnement"))

J'ai mis 15 au lieu de 16 et les résultats semblent correctes

tu peux confirmer STP

Merci d'avance

René du var
 
R

René du var

Guest
Suite .........

Un autre problème se pose avec la formule ..

Parfois il y a un espace avant ou après le " / " donc "erreur"

Merci pour ta patience


René du var
 
J

Jean-Marie

Guest
Re...

Formule un peu plus longue mais sur la même base

=SI(STXT(substitue(A1;" /";"/");16;1)="/";GAUCHE(A1;15);SI(STXT(substitue(A1;"/ ";"/");nbcar(A1)-15;1)="/";DROITE(A1;15);"Erreur de positionnement"))

@+Jean-Marie
 

Discussions similaires

Réponses
11
Affichages
734
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…