Supprimer le dernier mot d'une cellule SI
Bonjour à tous,
Voila j'aurais besoin d'une formule qui supprime le dernier mot ou expression ou caractère d'une cellule SI ce mot est un des mots d'une liste prédéfini.
J'ai mis un fichier en PJ
Par exemple en feuil1 en colonne A je met la liste des mots, expressions, caractères, espace à supprimer.
Et en feuil2 je met les textes dont il faut supprimer le dernier mot, ou dernier expression, ou dernier caractères, espace etc... si il correspond à un des mots ou caractère... de la liste.
Il ne faut pas forcément respecter la casse, que le mot soit en majuscule ou minuscule, il faut le supprimer.
Et il faut aussi prendre en compte que les données ont des entêtes.
Voila, qu'en pensez vous? C'est jouable?
Merci d'avance à tous
Bonsoir,
Il faudrait affiner ton analyse, car tu crées des ambiguïtés !
Exemple : si une expression se termine par : "pour N85 "
soit avec espace en fin, si on supprime d'abord l'espace (tel que tu le stipules dans ta liste, on ne supprimeras plus la fin restante : "pour N85" (dépourvue alors d'espace final).
Cordialement.
Salut,
Oui mais ce n'est qu'un exemple, après à moi de mettre les mots à supprimer dans le bonne ordre, du mot le plus long (le plus de caractères) au moins long.
Ou encore mieux si la macro peut faire le tri elle mêmes, et s'occuper en 1er des mots ou expressions les plus long de la liste.
Comme ça mêmes pas besoin de trier.
Sinon j'aurais juste à créer une 2eme colonne et mettre la formule NBCAR= pour avoir le nombre de caractères et faire un tri avant de lancer la macro.. Je pense que ça réglerai le problème, qu'en pense tu MFerrand ?
Merci
Rebonsoir,
Je ne suivrai pas Tulipe dans sa recherche d'une formule, par ailleurs non dénuée du tout d'intérêt (
J'opterai donc dans ce cas pour une fonction personnalisée :
Function SUPPRIFINSI(tx As String, ExpresSup As Range) As String
Dim TExprS(), i%, j%
With ExpresSup
ReDim TExprS(.Rows.Count)
For i = 1 To .Rows.Count
TExprS(i) = .Cells(i, 1)
Next i
End With
For i = 1 To UBound(TExprS) - 1
For j = i + 1 To UBound(TExprS)
If Len(TExprS(j)) > Len(TExprS(i)) Then
TExprS(0) = TExprS(j): TExprS(j) = TExprS(i): TExprS(i) = TExprS(0)
End If
Next j
Next i
For i = 1 To UBound(TExprS)
j = Len(TExprS(i))
If StrComp(Right(tx, j), TExprS(i), vbTextCompare) = 0 Then
SUPPRIFINSI = Left(tx, Len(tx) - j)
Exit Function
End If
Next i
SUPPRIFINSI = tx
End Function
Elle suit les prescriptions de ton dernier post : recueille dans un tableau la liste des caractères ou expressions à supprimer si correspondance avec la fin du texte, trie ces expressions en fonction de leur longueur, compare chaque expression avec la fin du texte (de même longueur en comparaison de texte [ne distinguant pas majuscules et minuscules]), et si elle trouve une correspondance supprime l'expression ou caractère du texte, si elle n'en trouve pas, le texte est renvoyé en entier.
NB- Si on lui soumet un nombre au lieu de texte, cela ne déclenche pas d'erreur, le nombre sera renvoyé sous forme texte. Même chose si dans la liste figure un nombre ou un chiffre (en valeur numérique), s'il termine le texte sa suppression interviendra.
S'il s'agit d'une date, le résultat pourra être curieux : la fonction l'applique sur le littéral date tel qu'il apparaît dans la barre de formule ; par exemple on a placé la date du 28 décembre dans une cellule, formatée pour s'afficher 28-déc., si on supprime 17 en valeur finale, la fonction renverra 28/12/20, si on supprime un point final (.) elle renverra 28/12/2017...
Par contre une valeur d'erreur entraînera une erreur (#VALEUR!).
Utilisation de la fonction comme les autres fonctions d'Excel :
=SUPPRIFINSI(A2;Feuil1!$A$2:$A$6)
Le code se trouve en Module1.
Cordialement.
Salut,
J'ai testé ta macro MFerrand elle est parfaite, exactement ce dont j'avais besoin +++++
A quand les concours VBA au JO?
MFerrand sur le podium >>> médaille d'or
tulipe_4 >>>> médaille d'argent car effectivement ta formule supprime le " pour" de la 2e expression alors qu'elle ne devrait pas car le " pour" n'est pas dans la liste
Merci beaucoup à vous 2
Bonne continuation.