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

XL 2019 Extraire une chaine entre deux positions

undo74

XLDnaute Nouveau
Bonjour,
Je cherche à extraire une chaîne de caractère entre 2 positions après des tests avec les fonctions cherche et STXT le résultat n'est pas concluant
voir l'exemple en PJ colonne E il serait possible d'avoir une aide soit directement par une fonction Excel ou bien en vba.
PI:
les données dans la pj sont de fausse information.
je vous remercie par avance.
 

Pièces jointes

  • Extraire Chaine.xlsx
    9.4 KB · Affichages: 34
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonsoir undo74, Staple,

ta demande est impossible à réaliser !

quand il y a 2 adresses mail comme en A3 et A5, comment veux-tu
que ça devine tout seul s'il faut prendre le 1er nom (comme en F3)
ou le 2ème nom (comme en F5) ? par méditation transcendentale
ou par télépathie ?

à cause du RGPD, fais vite un undo ! (appuie sur les touches Ctrl z)


soan
 

soan

XLDnaute Barbatruc
Inactif
@Staple1600

j'avais déjà téléchargé le fichier avant retrait, et vu les adresses mail ;
même par VBA, solution impossible à cause de ce que j'ai écrit dans
mon post #3 : s'il y a 2 emails dans la même cellule, y'a pas moyen
d'savoir s'il faut prendre le nom du 1er email ou le nom du second
email. (seul l'utilisateur peut décider lequel des deux !)


soan
 

undo74

XLDnaute Nouveau
Hello Soan, j'ai une idée mais que je n'arrive pas le faire via le formule Excel : c'est de cherché le premier "_"+ 3 caractères dans l'exemple en A3 = _DRT et en A5 = _MPO puis extraire la chaine entre @ et "_"+ 3.
merci à toi
 

Staple1600

XLDnaute Barbatruc
Re

=>undo74
Donc une petite macro (que je te laisse tester)
VB:
Sub test()
Dim c As Range, t
For Each c In Range("A2", Cells(Rows.Count, "A").End(xlUp))
t = Split(c.Text, "(@")
With c.Offset(, 1).Resize(, UBound(t))
.Value = t
End With
Erase t
Next
End Sub
Ensuite à toi de jouer pour
après je ferais un traitement pour extraire les noms et prénoms.
 

Staple1600

XLDnaute Barbatruc
Re

=>undo74
En attendant tes commentaires sur ton test du code du message#9
Une petite formule pour le fun
(qui fonctionne pour 2 exemples sur 3)
Code:
=GAUCHE(STXT(A3;CHERCHE("(@";A3)+2;CHERCHE("-";A3)-3);CHERCHE("-";STXT(A3;CHERCHE("(@";A3)+2;CHERCHE("-";A3)-3))-1)
 

undo74

XLDnaute Nouveau
@Staple1600, j'ai fais un test de ton code le résultat n'est pas correct
Merci encore pour ton aide
 

soan

XLDnaute Barbatruc
Inactif
@undo74, Staple,

ton fichier en retour (anonymisé) ; pour les résultats, je peux pas faire mieux.

VB:
Function GetNom(txt$) As String
  Dim chn$, p1%, p2%, p3%
  p3 = InStrRev(txt, "_"): If p3 = 0 Then Exit Function
  p2 = InStrRev(txt, "-", p3): If p2 = 0 Then p2 = p3
  p1 = InStrRev(txt, "@", p2)
  chn = Mid$(txt, p1 + 1, p2 - p1 - 1)
  p3 = InStrRev(txt, "_", p1): If p3 = 0 Then GoTo 1
  p2 = InStrRev(txt, "-", p3): If p2 = 0 Then p2 = p3
  p1 = InStrRev(txt, "@", p2)
  chn = Mid$(txt, p1 + 1, p2 - p1 - 1) & "   " & chn
1 GetNom = chn
End Function

formule en B3 (tirée vers le bas) : =SI(A3="";"";GetNom(A3))

soan
 

Pièces jointes

  • Extraire Chaine.xlsm
    15.2 KB · Affichages: 8
Dernière édition:

undo74

XLDnaute Nouveau
Re, Effectivement le résultat pour les données A3 et A4 sont correct mais la problématique est sur A5


merci
 

soan

XLDnaute Barbatruc
Inactif
@undo74

as-tu essayé le fichier de mon post #13 ?

ce fichier utilise une fonction personnalisée ; je vais
faire le même fichier, mais avec une sub à la place.

les résultats seront tous identiques, mais ils seront écrits
« en dur » ; tu pourras les modifier plus simplement.


soan
 

Discussions similaires

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