Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[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:

Fred0o

XLDnaute Barbatruc
Re : Compter nombre de caractères sans espace et trait d'union

Bonjour Lone-wolf,

Voici comment combiner les conditions :
VB:
Cells(i, 4).Value = Len(Replace(Replace(Cells(i, 3).Value, " ", ""), "-", ""))

A+
 

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
 

Lone-wolf

XLDnaute Barbatruc
Re : Compter nombre de caractères sans espace et trait d'union

Bonjour Staple,

désolé mais, porte-avion par exemple est composé de 10 lettres. La solution de Fred0o est la bonne.


A+
 
Dernière édition:

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
 

Lone-wolf

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

Bonsoir Staple,

Désolé pour le retard. Je viens de tester la macro, c'est très bien vu.
Mais pourquoi avoir mis Replace et Substitue ?

Merci beaucoup.


A+
 

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
364
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…