supprimer chaine si autre chaine présente

7 réponses
Avatar
jip
Bonjour
Dans un fichier excel 2003 de 36000 lignes, j'ai ce genre de
variations de donn=E9es :
\ ACON_2E7326_1941/ |navimages:series| \
\ ACON_2E7326_1942/ |navimages:series| \
\ 8MI0007/ |navimages:series| \
\ ACON_2E7323_1903_1912_TD/ |navimages:series| \
\ ACON_2E7324_1913_1922_TD/ |navimages:series| \
\ ACON_2E7325_1923_1932_TD/ |navimages:series| \

Je souhaite, si et seulement si "TD" est pr=E9sent, supprimer les ann=E9es
devant TD mais pas TD...
Pour obtenir par exemple \ ACON_2E7323_TD/ |navimages:series| \
Une formule ?
Merci

7 réponses

Avatar
isabelle
bonjour,

=SI(ESTERREUR(TROUVE("TD";A1));A1;GAUCHE(A1;TROUVE("TD";A1)-12)&DROITE(A1;TROUVE("TD";A1)))


--
isabelle
Avatar
jip
On 19 oct, 16:26, isabelle wrote:
bonjour,

=SI(ESTERREUR(TROUVE("TD";A1));A1;GAUCHE(A1;TROUVE("TD";A1)-12)&DROITE(A1;TROUVE("TD";A1)))

--
isabelle



Merci
Mais cela ne fonctionne que sur "ACON", mais pour des noms plus longs
comme
SAINTE_COLOMBE_LA_COMMANDERIE_2E8574_1903_1912_TD/ |
navimages:series|
cela ne va pas...
Avatar
MichD
Bonjour,

En supposant que la chaîne de caractère soit en A1, en B2 tu écris la formule suivante : =SpOte(A1)


Dans un module standard de ton classeur, copie la fonction personnalisée suivante :

'---------------------------
Function SpOte(Rg As Range) As String
Dim W As String, X As Integer
W = "_TD/"

X = InStr(1, Rg, "_TD/", vbTextCompare)
If X > 0 Then
SpOte = Left(Rg, X - 11) & W
End If
End Function
'---------------------------


MichD
------------------------------------------
"jip" a écrit dans le message de groupe de discussion :

Bonjour
Dans un fichier excel 2003 de 36000 lignes, j'ai ce genre de
variations de données :
ACON_2E7326_1941/ |navimages:series|
ACON_2E7326_1942/ |navimages:series|
8MI0007/ |navimages:series|
ACON_2E7323_1903_1912_TD/ |navimages:series|
ACON_2E7324_1913_1922_TD/ |navimages:series|
ACON_2E7325_1923_1932_TD/ |navimages:series|

Je souhaite, si et seulement si "TD" est présent, supprimer les années
devant TD mais pas TD...
Pour obtenir par exemple ACON_2E7323_TD/ |navimages:series|
Une formule ?
Merci
Avatar
Jacky
Bonsoir,

=SI(ESTERREUR(TROUVE("_TD/";A1));"";GAUCHE(A1;TROUVE("_TD/";A1)-11)&STXT(A1;TROUVE("_TD/";A1);NBCAR(A1)))
Ou si l'on veut garder la valeur de la cellule si TD n'est pas présent
=SI(ESTERREUR(TROUVE("_TD/";A1));A1;GAUCHE(A1;TROUVE("_TD/";A1)-11)&STXT(A1;TROUVE("_TD/";A1);NBCAR(A1)))
--
Salutations
JJ


"jip" a écrit dans le message de news:

Bonjour
Dans un fichier excel 2003 de 36000 lignes, j'ai ce genre de
variations de données :
ACON_2E7326_1941/ |navimages:series|
ACON_2E7326_1942/ |navimages:series|
8MI0007/ |navimages:series|
ACON_2E7323_1903_1912_TD/ |navimages:series|
ACON_2E7324_1913_1922_TD/ |navimages:series|
ACON_2E7325_1923_1932_TD/ |navimages:series|

Je souhaite, si et seulement si "TD" est présent, supprimer les années
devant TD mais pas TD...
Pour obtenir par exemple ACON_2E7323_TD/ |navimages:series|
Une formule ?
Merci
Avatar
isabelle
oups désolé j'avais oublié de soustraire le nombre de caractères total,

=SI(ESTERREUR(TROUVE("TD";A7));A7;GAUCHE(A7;TROUVE("TD";A7)-12)&DROITE(A7;NBCAR(A7)-TROUVE("TD";A7)+2))

--
isabelle


Le 2011-10-19 10:46, jip a écrit :

Mais cela ne fonctionne que sur "ACON", mais pour des noms plus longs
Avatar
MichD
Une formule dans une cellule :

Si A1 contient la chaîne de caractères :

=SI(ESTNUM(CHERCHE("_TD/";A1));GAUCHE(A1;CHERCHE("_TD/";A1)-11)&DROITE(A1;NBCAR(A1)-CHERCHE("_TD/";A1)+1);"")


La fonction personnalisée devrait plutôt être ceci pour tenir compte des différents exemples que tu as donnés

'--------------------------------
Function SpOte(Rg As Range) As String
Dim W As String, X As Integer
W = "_TD/"
X = InStr(1, Rg, "_TD/", vbTextCompare)
If X > 0 Then
SpOte = Left(Rg, X - 11) & Right(Rg, Len(Rg) - X + 1)
End If
End Function
'--------------------------------

MichD
------------------------------------------
Avatar
jip
On 19 oct, 18:39, "Jacky" wrote:
Bonsoir,

=SI(ESTERREUR(TROUVE("_TD/";A1));"";GAUCHE(A1;TROUVE("_TD/";A1)-11)&STX T(A1;TROUVE("_TD/";A1);NBCAR(A1)))
Ou si l'on veut garder la valeur de la cellule si TD n'est pas présent
=SI(ESTERREUR(TROUVE("_TD/";A1));A1;GAUCHE(A1;TROUVE("_TD/";A1)-11)&STX T(A1;TROUVE("_TD/";A1);NBCAR(A1)))
--
Salutations
JJ



Merci beaucoup, la formule 2 fonctionne très bien.