XL 2016 Supprimer dernier caractère de cellule.

  • Initiateur de la discussion Initiateur de la discussion Etoto
  • 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 !

Etoto

XLDnaute Barbatruc
Supporter XLD
Bonjour,

Est ce que quelqu'un pourrais créer une fonction grâce au VBA qui supprime automatiquement le dernier caractère d'une cellule ?

Merci d'avance
 
Solution
Re,
Expliqué comme ça c'est plus simple.
Pourquoi ne pas modifier la macro de Staple pour supprimer le dernier caractère :
VB:
Function PREMLETTRE(S$, Optional casse As VbStrConv) As String
Dim mc As Object, m As Object
With CreateObject("vbscript.regexp")
    .Global = True
    .Pattern = "\b\w"
    If .test(S) = True Then
        Set mc = .Execute(S)
        For Each m In mc
            PREMLETTRE = StrConv(PREMLETTRE & m, casse) & "."
            Next m
        End If
        PREMLETTRE = Left(PREMLETTRE, Len(PREMLETTRE) - 1)
End With
End Function
Bonjour Etoto, Soan,
Sans plus d'info, un essai.
Dans cette PJ, si on entre une chaine dans la colonne A alors le dernier caractère est supprimé.
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
        Application.EnableEvents = False
        Target = Left(Target.Value, Len(Target.Value) - 1)
        Application.EnableEvents = True
    End If
End Sub
 

Pièces jointes

Je vais faire le mêle-tout qui intervient même dans les sujets où il ne contribue pas sauf pour mettre du sel sur les égratignures. 😜 Mais quand même...
Effectivement je coirs que c'est plus simple d'utiliser une DROITE ou GAUCHE avec un SI aussi. J'y avais pas pensé merci.
@Etoto, on ne sait pas ce que tu veux faire précisément.
- Est-ce que c'est pour valoriser UNE AUTRE cellule à partir d'une cellule source à tronquer
(Auquel cas c'est @soan qui remporte la coupe avec 2 buts)
- Est-ce que c'est pour valoriser LA MÊME cellule à tronquer de la saisie qui y a été faite
(Auquel cas c'est @sylvanu qui a le dernier mot Jean-Pierre)
La rédaction de ta question laisse plutôt penser à la 2ème option.
Et la solution confirme que c'est la 1ère 😉
 
Je vais te dire pourquoi, sur le forum dans la section VBA, il y'a la possibilité d'utiliser la fonction PREMLETTRE mais elle laisse un "." à la fin et je voulais m'en débarrasser, c'est chose faite avec la fonction SDC de @soan. Et comme tu l'as surement remarqué, moi et les macros, je suis pourris, les seuls choses que je sais faire en macro c'est créer des fonctions qui calculent la TVA ou la fonction CARRE. 😀
 
Re,
Expliqué comme ça c'est plus simple.
Pourquoi ne pas modifier la macro de Staple pour supprimer le dernier caractère :
VB:
Function PREMLETTRE(S$, Optional casse As VbStrConv) As String
Dim mc As Object, m As Object
With CreateObject("vbscript.regexp")
    .Global = True
    .Pattern = "\b\w"
    If .test(S) = True Then
        Set mc = .Execute(S)
        For Each m In mc
            PREMLETTRE = StrConv(PREMLETTRE & m, casse) & "."
            Next m
        End If
        PREMLETTRE = Left(PREMLETTRE, Len(PREMLETTRE) - 1)
End With
End Function
 
Ok, je bosse un peu quand même, entre 2 siestes et 3 critiques 🥸
C'est moins élégant qu'un "RegExp" mais je ne sais pas comment coder les lettres accentuées en expression régulière ("ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝŸàáâãäåçèéêëìíîïñòóôõöùúûüýÿ")

Donc à défaut j'ai fait cette fonction qui corrige les remarques de @Magic_Doctor dans PREMLETTRE.
VB:
'---------------------------------------
'Fonction qui rend l'acronyme d'un texte
'---------------------------------------
Function Acronyme(Cellule As Range) As String
    Dim C As String, S As String
    Dim i As Integer
    Dim Bool As Boolean
    
    S = CStr(Cellule.Value)
    
    For i = 1 To Len(S)
        C = Mid(S, i, 1)
        'Ce test identifie toutes les lettres, accentuées ou pas !
        If StrComp(Ucase(C), LCase(C), 0) <> 0 Then
            If Not Bool Then Acronyme = Acronyme & Ucase(C) & "."
            Bool = True
        Else
            Bool = False
        End If
    Next i
End Function

1619626357691.png


1619626435882.png
 
Dernière édition:
- 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

  • Question Question
Microsoft 365 Combobox
Réponses
6
Affichages
163
  • Question Question
Microsoft 365 bouton supprimer
Réponses
4
Affichages
109
Réponses
5
Affichages
474
Retour