[Résolu] Compter nombre de caractères sans espace et trait d'union

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 !

Lone-wolf

XLDnaute Barbatruc
Bonjour le Forum et bon dimanche,

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("d6:d26")) Is Nothing Then Exit Sub
For i = 6 To ActiveSheet.Range("c65536").End(xlUp).Row
Cells(i, 4).Value = Len(Replace(Cells(i, 3).Value, " ", ""))       ' ex.: arc en ciel
Next i
End Sub

J'aimerais ajouter la condition : Len(Replace(Cells(i, 3).Value, "-", "")) pour les mots composés comme:
porte-avion, porte-clés etc.

Merci d'avance.


A+ : cool:
 
Dernière édition:
Re : Compter nombre de caractères sans espace et trait d'union

Bonjour à tous


Lone-wolf:
Une petit précision demandée afin d'^tre sur d'avoir compris la question... ou pas 😉
Avec le code ci-dessous, je trouve 8 mots. Est-ce le résultat escompté ? *
Code:
Sub test()
Dim s$, nb%, st$
st = "   arc en ciel porte-avion porte-clés  pot de fleur "
s = Application.WorksheetFunction.Trim(st)
nb = UBound(Split(s)) + 1
MsgBox nb
End Sub
*: En imaginant qu'une cellule contiendrait la chaîne de caractère st
 
Re : [Résolu] Compter nombre de caractères sans espace et trait d'union

Re

OK je vois où j'ai chu 😉
Donc voici comment je ferai dans le cas présent
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i&
If Target.Count > 1 Then Exit Sub
If Intersect(Target, [D6:D26]) Is Nothing Then Exit Sub
With Application
    For i = 6 To 26
    Cells(i, 4) = _
    Len(Replace(.Substitute(Cells(i, 3).Text, " ", ""), "-", ""))   ' ex.: arc en ciel
    Next i
End With
End Sub

C'est mieux là?

NB: C'est en tout cas quasi-identique à FreD0o que je salue au passage 😉
 
Re : [Résolu] Compter nombre de caractères sans espace et trait d'union

Bonjour le fil, le forum,

Pour bien commencer la journée 🙂

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Range("D6:D" & [C65536].End(xlUp).Row)
  If Intersect(Target, .EntireColumn) Is Nothing Then Exit Sub
  .Resize(65531).ClearContents 'RAZ
  .FormulaR1C1 = "=LEN(SUBSTITUTE(SUBSTITUTE(RC[-1],""-"",),"" "",))"
  .Value = .Value
End With
End Sub
Edit : pour le 3ème argument de la fonction SUBSTITUE, "" peut être omis.

A+
 
Dernière édition:
Re : [Résolu] Compter nombre de caractères sans espace et trait d'union

Re,

Si l'on préfère une macro Worksheet_Change :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
With Range("D6:D" & [C65536].End(xlUp).Row)
  If Intersect(Target, .Offset(, -1).EntireColumn) Is Nothing Then Exit Sub
  .Resize(65531).ClearContents 'RAZ
  .FormulaR1C1 = "=LEN(SUBSTITUTE(SUBSTITUTE(RC[-1],""-"",),"" "",))"
  .Value = .Value
End With
End Sub
A+
 
Re : [Résolu] Compter nombre de caractères sans espace et trait d'union

Re, pour terminer,

S'il peut ne pas y avoir de données en dessous de C5 il faut le tester :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim derlig As Long
derlig = [C65536].End(xlUp).Row
With Range("D6:D" & derlig)
  If Intersect(Target, .Offset(, -1).EntireColumn) Is Nothing Then Exit Sub
  .Resize(65531).ClearContents 'RAZ
  If derlig < 6 Then Exit Sub
  .FormulaR1C1 = "=LEN(SUBSTITUTE(SUBSTITUTE(RC[-1],""-"",),"" "",))"
  .Value = .Value
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
4
Affichages
652
Réponses
16
Affichages
2 K
Réponses
7
Affichages
987
Réponses
9
Affichages
1 K
Retour