=JOINDRE.TEXTE("";VRAI;SIERREUR(--STXT(B4;LIGNE(INDIRECT("1:"&NBCAR(B4)));1);""))
merci beaucoup pour votre retour,Hello
Peut etre ai-je loupé un tour, mais les formules fonctionnent si:
o Il y a un espace avant le chiffre
o il n'y a pas de lettre après le chiffre
je veux pas être pénible (encore que), mais ce n'etait pas l'énoncé.
constituée de " lettres + chiffres + espaces(c'etait par contre le fichier exemple)
bon, bref, si ca fonctionne tant mieux, mais PowerQuery j'aime pas. J'ai tjs des problèmes de dates mal formatées avec.
merci beaucoup pour la réponse,Salut
Si on veut garder les chiffres du dernier mot (quelque soit le nombre d'espaces, yc le(s) zéro(s) en tête du dernier mot, on pourra utiliser:
VB:=DROITE(SUBSTITUE([@ID];" ";REPT(" ";250));250)
Si on veut le"nombre", on peut utiliser:
VB:=CNUM(DROITE(SUBSTITUE([@ID];" ";REPT(" ";250));250))
=JOINDRE.TEXTE("";VRAI;SIERREUR(--STXT(B4;LIGNE(INDIRECT("1:"&NBCAR(B4)));1);""))
bonjour,Bonjour à tous,
Depuis Excel 2016 il existe la fonction JOINDRE.TEXTE.
Voyez le fichier joint et cette formule matricielle en E4 :
à valider par Ctrl+Maj+Entrée.Code:=JOINDRE.TEXTE("";VRAI;SIERREUR(--STXT(B4;LIGNE(INDIRECT("1:"&NBCAR(B4)));1);""))
A+
Oui mais faire le contraire c'est conserver tout ce qui n'est pas un chiffre (espace, tiret etc).y'a t'il une formule de ce genre pour faire le contraire, c'est à dire garder les "lettres" et supprimer les "espaces et les chiffres"
=JOINDRE.TEXTE("";VRAI;SI(ESTERR(-STXT(B4;LIGNE(INDIRECT("1:"&NBCAR(B4)));1));STXT(B4;LIGNE(INDIRECT("1:"&NBCAR(B4)));1);""))
=SIERREUR(INDEX(TRANSPOSE(FILTRE.XML("<t><s>"&SUBSTITUE($B4;"-";"</s><s>")&"</s></t>";"//s[translate(.,'1234567890','')=.]"));1;COLONNE()-4);"")
Sub Insertion_Formule()
Range("E4:G4").FormulaArray = _
"=IFERROR(INDEX(TRANSPOSE(FILTERXML(""<t><s>""&SUBSTITUTE(B4,""-"",""</s><s>"")&""</s></t>"",""//s[translate(.,'1234567890','')=.]"")),1,COLUMN()-4),"""")"
Range("E4:G6").FillDown
End Sub
Function Lettres$(x$)
Dim accent$, y$, i%, z$
accent = "àáâãäåòóôõöøèéêëìíîïùúûüÿñç"
y = LCase(x) 'minuscules
For i = 1 To Len(x)
z = Mid(y, i, 1)
If Asc(z) > 96 And Asc(z) < 123 Or InStr(accent, z) Then Lettres = Lettres & Mid(x, i, 1)
Next
End Function
bonjour, @job75 , le fil;Bonjour Sofiane Boukecha, le fil,
Oui mais faire le contraire c'est conserver tout ce qui n'est pas un chiffre (espace, tiret etc).
La formule matricielle est plus longue car on ne peut pas utiliser SIERREUR :
A+Code:=JOINDRE.TEXTE("";VRAI;SI(ESTERR(-STXT(B4;LIGNE(INDIRECT("1:"&NBCAR(B4)));1));STXT(B4;LIGNE(INDIRECT("1:"&NBCAR(B4)));1);""))
bonjour,Bonjour le fil
Comme je n'ai pas Excel 2019 chez moi (mais 2013), je ne dispose pas de JOINDRE.TEXTE
Alors toujours en utilisant FILTRE.XML
(je suis parti du dernier fichier déposé par job75)
Regarde la pièce jointe 1133960
NB: Pour reproduire le test, saisir la formule ci-dessous en E4
Puis tout en restant dans la barre de formule, sélectionnez F4 et G4 puis valider par CRTL+SHIFT+ENTREECode:=SIERREUR(INDEX(TRANSPOSE(FILTRE.XML("<t><s>"&SUBSTITUE($B4;"-";"</s><s>")&"</s></t>";"//s[translate(.,'1234567890','')=.]"));1;COLONNE()-4);"")
Sinon lancer cette petite macro qui fera le boulot
VB:Sub Insertion_Formule() Range("E4:G4").FormulaArray = _ "=IFERROR(INDEX(TRANSPOSE(FILTERXML(""<t><s>""&SUBSTITUTE(B4,""-"",""</s><s>"")&""</s></t>"",""//s[translate(.,'1234567890','')=.]"")),1,COLUMN()-4),"""")" Range("E4:G6").FillDown End Sub
Function alpha(txt As String) As String
Dim b, bytes() As Byte: bytes = txt
For Each b In bytes
If Chr(b) Like "[A-Za-z]" Then alpha = alpha & Chr(b)
Next b
End Function
Function alphac(S As String) As String
Static RX As Object
If RX Is Nothing Then
Set RX = CreateObject("VBScript.RegExp")
RX.Global = -1
End If
RX.Pattern = "[^a-zA-Zàéèùäë]"
alphac = RX.Replace(S, "")
End Function
bonjour,Re
Si on peut utiliser une fonction VBA personnalisée pour ne garder que les lettres
Voici une autre fonction possible
A mettre dans un module standard
NB: code retrouvé dans mes archives.VB:Function alpha(txt As String) As String Dim b, bytes() As Byte: bytes = txt For Each b In bytes If Chr(b) Like "[A-Za-z]" Then alpha = alpha & Chr(b) Next b End Function
Mode d'emploi sur le fichier exemple
=alpha(E4)
Si tu testes sur un fichier vierge (dans lequel tu auras insérer un module puis copier/coller le code VBA dans celui-ci)
Saisis par exemple en A1: Staple1600 a mangé 3 pommes
Puis en B1: =alpha(A1)
Le résultat sera : Stapleamangpommes
Tu vois donc le petit souci qu'heureusement n'a pas la fonction VBA de job75.
EDITION: Une autre version VBA (qui utilise les expressions régulières) (et qui cette fois, conserve les accents)
(toujours issue de mes archives)
NB: si tu veux conserver plus de caractères accentués ajoute-les sur cette ligneVB:Function alphac(S As String) As String Static RX As Object If RX Is Nothing Then Set RX = CreateObject("VBScript.RegExp") RX.Global = -1 End If RX.Pattern = "[^a-zA-Zàéèùäë]" alphac = RX.Replace(S, "") End Function
RX.Pattern = "[^a-zA-Zàéèùäë]"
Tu peux t'inspirer de la liste figurant dans le code de job75