Microsoft 365 Suppression des deux ou trois derniers mots dans cellules

  • Initiateur de la discussion Initiateur de la discussion Moreno076
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Moreno076

XLDnaute Impliqué
Bonjour à tous,

Je souhaiterais en macro que si dans une colonne commençant par la cellune C2 :

- si le dernier mot de la cellule est "test" ou "essai" alors supprimer les deux derniers mots ;
- si le dernier mot de la cellule est "simul" ou "result" alors supprimer les trois derniers mots.

sinon laisser la cellule comme tel.

Merci pour votre aide
 
Solution
Pour tester la méthode de JM post #11 j'ai lancé cette macro :
VB:
Sub mSuppression()
Dim temps, t As Variant, p&, c As Range
temps = Timer
Application.ScreenUpdating = False
For Each c In Range("C2:C48001")
  t = Split("  " & c) '2 espaces pour avoir au moins 3 mots
    Select Case t(UBound(t))
    Case Is = "test", "essai"
    ReDim Preserve t(0 To (UBound(t) - 2))
    c = Trim(Join(t, " "))
    Case Is = "simul", "result"
    ReDim Preserve t(0 To (UBound(t) - 3))
    c = Trim(Join(t, " "))
    End Select
  Erase t
Next c
MsgBox Timer - temps
End Sub
Elle s'exécute chez moi en 0,35 seconde.

Salut jmfmarques.
Bien sur, je n'ai pas remplacé la valeur
corrige comme ceci
Sub decoupe()
With Sheets("synthèse")
drlg = .Cells(.Cells(.UsedRange.Columns(3).Rows.Count + 1, 3).End(xlUp).Row, 3).Row
Set Z = .Range(.Cells(16, 3), .Cells(drlg, 3))
'Z.Select
For Each Cel In Z
Set result = Cel
n = InStrRev(Cel, " ")
dmot = Right(Cel, Len(Cel) - n)
r = sitest(dmot)
For nbmot = 1 To r
n = InStrRev(Cel, " ")
Cel = Left(Cel, n - 1)
Next
result.Value = Cel
Next
End With
End Sub
 
re
Pour éviter les problèmes de casse, j'ai mis lcase(v) (qui met tout en minuscule)dans la procédure, tu dois donc écrire 'dose' en minuscule.
si tu souhaites tenir compte de la casse alors supprime le lcase(v)
exemple: if v="DOSE".... ect
 
Bonsoir le fil

Juste pour le fun (et pour varier les plaisirs)
A n'utiliser qu'en guise de lecture avant d'aller se coucher
(Car en vrai, il y aura surement des effets de bord)
1) Lancer la macro Pour_Test (sur une feuille vierge)
2) Puis lancer la macro mSuppression
VB:
Sub Pour_Test()
With Application
[C2:C5] = .Transpose([{"abc def toto tutu test","jojo titi tutu jaja essai","abc toto tutu simul","tata tutu toto result"}])
End With
End Sub
Sub mSuppression()
Dim t As Variant, p&, c As Range
For Each c In Range("C2:C5")
  t = Split(c)
    Select Case t(UBound(t))
    Case Is = "test", "essai"
    For p = 0 To UBound(t) - 1
    t(p) = t(p)
    Next
    ReDim Preserve t(0 To (UBound(t) - 2))
    c = Join(t, " ")
    Case Is = "simul", "result"
    For p = 0 To UBound(t) - 1
    t(p) = t(p)
    Next
    ReDim Preserve t(0 To (UBound(t) - 3))
    c = Join(t, " ")
    End Select
  Erase t
Next c
End Sub
Normalement, on obtient ce qui est décrit en message#1
😉
 
Bonjour Moreno076, sousou, JM,

Une solution assez simple, toujours avec Split :
VB:
Sub Epurer()
Dim tablo, i&, x$, s, ub%, y$
With Sheets("Synthèse").UsedRange.Columns(3)
    tablo = .Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
    For i = 2 To UBound(tablo)
        x = tablo(i, 1)
        s = Split(x)
        ub = UBound(s)
        If ub > -1 Then
            y = LCase(s(ub))
            If (y = "test" Or y = "essai") And ub > 0 Then tablo(i, 1) = Trim(Left(x, Len(x) - Len(s(ub - 1) & y) - 1))
            If (y = "simul" Or y = "result") And ub > 1 Then tablo(i, 1) = Trim(Left(x, Len(x) - Len(s(ub - 2) & s(ub - 1) & y) - 2))
        End If
    Next
    '---restitution---
    If .Parent.FilterMode Then .Parent.ShowAllData 'si la feuille est filtrée
    .Value = tablo
End With
End Sub
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
19
Affichages
1 K
Retour