Suppression partiel d'une cellule par contenu de la cellule voisine

Bonjour à tous !

J'aime beaucoup excel mais je me fait encore un peu la main sur le VBA, mon problème est le suivant :

J'ai une liste de noms mais qui des fois contiennent le nom de la cellule d'a coté mais des fois non et je voudrais que si la cellule voisine est détecté sur la cellule concerné alors cette partie du texte serait supprimé pour illustrer voici un exemple :

Je ne sais pas si c'est difficile ou non mais j'espère que quelqu'un pourra m'aider pour ce mystère....

Merci d'avance !

Bonjour,

Je vous propose ci joint une solution Power query totalement intégré à excel depuis 2016

Sinon plus simple :

utiliser la fonction convertir en cochant "Espace" pour le séparateur:

image image

Bonjour,

Et voici une solution par formules :

En E5 :

=SIERREUR(GAUCHE(B5;CHERCHE(" ";B5)-1);B5)

en F5 :

=SI(ESTNUM(CHERCHE(C5;B5));DROITE(B5;NBCAR(B5)-CHERCHE(" ";B5));C5)

Bien sûr, tout ceci ne vaut que si les exemples sont représentatifs ...

Hmm je vois, mais cependant j'ai des mots qui comprennent aussi des espaces et c'est vraiment le système de détection qui m'irait, par exemple l'utilisation de convertir fonctionnerait mais pour un mot comme : pain au chocolat il va vouloir espacer alors que des fois il ne faut rien changer d'où la recherche d'une méthode VBA.

Peut être que cet exemple est plus précis sur ma problématique :

Dons si je comprends bien, la provenance est toujours égale à la donnée que tu as. Pas besoin de formule ici, c'est ça ?

Pour le reste, c'est jouable avec une formule, mais le fait que des fois tu aies des majuscules dans la destination à gauche, des fois non, des fois à droite, des fois non ... ceci complique.

=SI(ESTNUM(TROUVE(MINUSCULE(B2);MINUSCULE(A2)));SUBSTITUE(MINUSCULE(A2);MINUSCULE(B2);"");A2)

Le rendu ici est tout en minuscules.

Salut Voryas,
Salut l'équipe,
Salut Joyeux Noël,

par VBA via un double-clic sur la feuille...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim tSplit, sTxt$
'
Cancel = True
For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
    sTxt = ""
    If InStr(UCase(Range("A" & x).Value), UCase(Range("B" & x).Value)) > 0 Then
        tSplit = Split(Range("A" & x).Value, " ")
        For y = 0 To UBound(tSplit)
            sTxt = sTxt & IIf(UCase(tSplit(y)) = UCase(Range("B" & x).Value), "", " " & tSplit(y))
        Next
    End If
    Range("D" & x).Value = IIf(sTxt = "", Range("A" & x).Value, Trim(sTxt))
Next
'
End Sub
13voryas.xlsm (16.27 Ko)


A+

Hello Curulis !

Arf, j'en étais là au bout d'un bon moment ... Suis vraiment nul, ahah

Sub remplace()
Dim DerLigne As Double

DerLigne = Range("A" & Rows.Count).End(xlUp).Row

For i = 2 To DerLigne
Nom = InStr(1, UCase(Cells(i, 1)), UCase(Cells(i, 2)))
If Nom = 0 Then
Cells(i, 4) = Cells(i, 1)
Else
Cells(i, 4) = Replace(Cells(i, 1), Cells(i, 2), "")
End If
Next
End Sub

Parfait merci beaucoup !

Je suis clairement impressionné ahahah

Salut Voryas,
Salut l'équipe,

@ Joyeux Noël, pas loin mais cette histoire de Majuscule-minuscules irréguliers, ça fout tout en l'air !

For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
    Range("D" & x).Value = IIf(InStr(UCase(Range("A" & x).Value), UCase(Range("B" & x).Value)) = 0, _
        Range("A" & x).Value, _
        Replace(Replace(UCase(Range("A" & x).Value), UCase(Range("B" & x).Value), ""), "  ", " "))
Next

Il fallait aussi ramener le double espace laissé par le mot retiré à un espace.
Eh, on fera quelque chose de toi en VBA !


A+

Re,

Mouais, pas dit. Je plafonne, je me désespère. Pas moyen de trouver le second souffle et rendre tout ça naturel et fluide.

Pas sûr,

sans cette histoire de majuscule-minuscule, ton approche, à laquelle je n'avais absolument pas pensé, était la plus efficace! Sans rire!


A+

Rechercher des sujets similaires à "suppression partiel contenu voisine"