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

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:

Staple1600

XLDnaute Barbatruc
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
 

Staple1600

XLDnaute Barbatruc
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 ;)
 

job75

XLDnaute Barbatruc
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:

job75

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
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+
 

Discussions similaires

Réponses
7
Affichages
319

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 811
dernier inscrit
caroline29260