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

bonjour

un essai

78yptsba.xlsx (10.39 Ko)

cordialement

Rebonsoir,

Je ne suivrai pas Tulipe dans sa recherche d'une formule, par ailleurs non dénuée du tout d'intérêt ( ), parce qu'il modifie les données du problème en escamotant le caractère espace de la liste et en jonglant avec dans la formule, ce qui aboutit à la suppression du " pour" de la 2e expression, qui ne devrait pas l'être car différent de " pour " à supprimer. Et d'autre part cela conduit à la suppression de caractères dont la suppression n'était pas recherchée...

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.

Rechercher des sujets similaires à "supprimer dernier mot"