Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1552 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Spliter une chaine de car avec majuscules

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Spliter une chaine de car avec majuscules

n°2332475
tompouss
Petit chat
Posté le 26-04-2019 à 13:03:59  profilanswer
 

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
mood
Publicité
Posté le 26-04-2019 à 13:03:59  profilanswer
 

n°2332572
Marc L
Posté le 27-04-2019 à 15:34:56  profilanswer
 

 
            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

n°2332574
Marc L
Posté le 27-04-2019 à 18:33:18  profilanswer
 

 
            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

n°2332620
tompouss
Petit chat
Posté le 29-04-2019 à 10:35:52  profilanswer
 

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
n°2332624
Marc L
Posté le 29-04-2019 à 11:21:35  profilanswer
 

 
            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 …
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Spliter une chaine de car avec majuscules

 

Sujets relatifs
Inversement chaine de caractères dans un tableauCapture de sous-chaîne matching expression reguliere
[Python] Récupérer l'avant dernière chaine de caractère d'un tableauPython remplacer un caractère dans une chaine
Tester si la chaine de caractère mène a un dossier ou un fichiersupprimer des mots dans une chaine c++ builder
ecrire chaine utf8 json à partir d'un dictionnaireprobleme en programmation c "chaine de caracteres dans une fonction
Inserer une chaine de caractere dans une chainesupprimer des voyelles dans une chaine de caracteres
Plus de sujets relatifs à : Spliter une chaine de car avec majuscules


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR