Spliter une chaine de car avec majuscules

Spliter une chaine de car avec majuscules - VB/VBA/VBS - Programmation

Marsh Posté le 26-04-2019 à 13:03:59    

Bonjour,
 
je cherche à spliter des noms et prénoms collés dans une collone de fichier excel (ex: JohnSmith doit devenir John Smith )
 
j'ai trouvé des fonctions pour le faire sur le net mais rien ne focntionne (ou alors je l'utise mal car je ne suis pas un expert VBA)
 
 
Voici mon code
 

Code :
  1. Function Splitmaj$(t$) '$ => As String
  2. Dim s, i%, j% '% => As Integer
  3. s = Split(t)
  4. For i = 0 To UBound(s)
  5.   t = s(i)
  6.   For j = 2 To Len(t)
  7.     If Mid(t, j, 1) = UCase(Mid(t, j, 1)) Then
  8.       t = Left(t, j - 1) & " " & Mid(t, j)
  9.       j = j + 1
  10.     End If
  11.   Next j
  12.   s(i) = t
  13. Next i
  14. Splitmaj$ = Join(s)
  15. End Function
  16. Sub For_X_to_Next_Colonne()
  17.     Dim FL1 As Worksheet, Cell As Range, NoCol As Integer
  18.     Dim NoLig As Long, DerLig As Long, Var As Variant
  19.     'Instance de la feuille qui permet d'utiliser FL1 partout dans
  20.     'le code à la place du nom de la feuille
  21.     Set FL1 = Worksheets("Feuil1" )
  22.     'Détermine la dernière ligne renseignée de la feuille de calculs
  23.     '(Voir explication sur l'utilisation de Split en bas de cette discussion)
  24.     DerLig = Split(FL1.UsedRange.Address, "$" )(4)
  25.     'Fixe le N° de la colonne à lire
  26.     NoCol = 2
  27.     'Utilisation du N° de ligne dans une boucle For ... Next
  28.     For NoLig = 63417 To DerLig
  29.         Var = FL1.Cells(NoLig, NoCol)
  30.      
  31.         Range("I" & NoLig).Value = SplitmajVar
  32.            
  33.            
  34.     Next
  35.     Set FL1 = Nothing
  36. End Sub


 


---------------
collectionneur de pâtes thermiques
Reply

Marsh Posté le 26-04-2019 à 13:03:59   

Reply

Marsh Posté le 27-04-2019 à 15:34:56    

 
            Bonjour,
 
            avant de coder quoique ce soit, il faudrait écrire une logique digne de ce nom …
 
            P'tite démonstration :

Code :
  1. Sub Demo()
  2.        S$ = "JohnSmith"
  3.    For L& = 2 To Len(S)
  4.            C$ = Mid$(S, L, 1)
  5.        If UCase$(C) = C Then
  6.            Debug.Print Left$(S, L - 1) & vbLf & Mid$(S, L)
  7.            Exit For
  8.        End If
  9.    Next
  10. End Sub

Reply

Marsh Posté le 27-04-2019 à 18:33:18    

 
            Une autre méthode (Windows only) :

Code :
  1. Sub Demo2()
  2.     With CreateObject("VBScript.RegExp" )
  3.              .Global = True
  4.              .Pattern = "[A-Z][a-z]*"
  5.         With .Execute("JohnSmith" )
  6.           If .Count > 1 Then Debug.Print .Item(0).Value & " " & .Item(1).Value
  7.         End With
  8.     End With
  9. End Sub

Reply

Marsh Posté le 29-04-2019 à 10:35:52    

Grand Merci pour ton aide,
j'avoue que j'ai posté mon messag un peu à l'arrache sans chercher à débugger.
 
Ceci-dit, j'étais parti aussi du côté des regex plutot que jouer avec les index, mais sans plus de succès.
 
Je vais essayer avec ta regex pour voir si ca fonctionne
 
 
 
PS: accessoirement, moi qui vient du JAVA/PHP la syntaxe vba me file des boutons.
Par ex : la syntaxe de l'appel de fonction avec param me semble absolutment non intuitive:

Code :
  1. "Range("I" & NoLig).Value = SplitmajVar"


 
Intuitivement j'avais essayé ca:

Code :
  1. "Range("I" & NoLig).Value = Splitmaj Var"


 
Qui me semblait bien plus logique


Message édité par tompouss le 29-04-2019 à 10:38:49

---------------
collectionneur de pâtes thermiques
Reply

Marsh Posté le 29-04-2019 à 11:21:35    

 
            ll aurait bien un souci de logique avec les lignes de code n°9 et surtout la 14 : quel est donc leur but à chacune ?‼
 
            A comparer avec une logique papier tenant la route …
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed