Macro : Transformer certaines lettres en majuscules

Fermé
lenovo - 22 juin 2015 à 13:53
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 22 juin 2015 à 19:17
Bonjour,

Dans mon tableau Excel, j'ai une colonne qui contient dans chaque cellule la couleur d'un objet en français et en anglais comme ceci :

Gris Foncé / Dark Grey
Bleu Ciel / Sky Blue

J'ai utilisé ce code pour mettre des majuscules en début de mot :
Sheets("Feuil3").Range("T5").Select
ActiveCell.Value = StrConv(ActiveCell.Value, vbProperCase)

For I = 1 To 400
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = StrConv(ActiveCell.Value, vbProperCase)
Next I


Mais ça ne convient pas car je voudrais que mes cellules aient cette forme (des majuscules sur la première lettre de la cellule et sur la lettre après le /) :

Gris foncé / Dark Grey
Bleu ciel / Sky blue

Je ne sais vraiment comment m'y prendre... Si vous avez une idée n'hésitez pas!

Merci d'avance
A voir également:

4 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
22 juin 2015 à 14:43
Bonjour Lenovo, bonjour le forum,

Essaie comme ça :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim I As Integer 'déclare la variable I (Incrément)
Dim P As Byte 'déclare la variable P (Position)

Set O = Sheets("Feuil3") 'définit l'onglet O
TC = O.Range("T5:T" & O.Cells(Application.Rows.Count, 20).End(xlUp).Row) 'définit le tableau de cellules TC
For I = 1 To UBound(TC, 1) 'boucles sur toutes les lignes I du tableau de cellules TC
    TC(I, 1) = LCase(TC(I, 1)) 'met la valeur de TC(I,1) en minuscule
    Mid(TC(I, 1), 1, 1) = UCase(Mid(TC(I, 1), 1, 1)) 'Met la premiere lettre en majuscules
    P = InStr(1, TC(I, 1), Split(TC(I, 1), " / ")(1), vbTextCompare) 'calcule la position de la première lettre après Slash + Espace ( / )
    Mid(TC(I, 1), P, 1) = UCase(Mid(TC(I, 1), P, 1)) 'met cette lettre en majuscule
Next I 'prochaine ligne de la boucle
O.Range("T5").Resize(UBound(TC, 1), 1).Value = TC 'renvoie le tableau TC dans la cellule T5
End Sub

0
Merci de prendre le temps de me répondre.

Lorsque je compile votre code (en changeant juste I par A, ayant déjà une variable de ce nom), j'obtiens une erreur d'exécution "Argument ou appel de procédure incorrect" sur la ligne suivante :
 Mid(TC(A, 1), 1, 1) = UCase(Mid(TC(A, 1), 1, 1)) 'Met la premiere lettre en majuscules
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
22 juin 2015 à 15:54
Bonjour Lenovo, bonjour le forum,

Je ne comprends pas. Chez moi ça fonctionne :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim A As Integer 'déclare la variable A (incrément)
Dim P As Byte 'déclare la variable P (Position)

Set O = Sheets("Feuil3") 'définit l'onglet O
TC = O.Range("T5:T" & O.Cells(Application.Rows.Count, 20).End(xlUp).Row) 'définit le tableau de cellules TC
For A = 1 To UBound(TC, 1) 'boucles sur toutes les lignes I du tableau de cellules TC
    TC(A, 1) = LCase(TC(A, 1)) 'met la valeur de TC(I,1) en minuscule
    Mid(TC(A, 1), 1, 1) = UCase(Mid(TC(A, 1), 1, 1)) 'Met la premiere lettre en majuscules
    P = InStr(1, TC(A, 1), Split(TC(A, 1), " / ")(1), vbTextCompare) 'calcule la position de la première lettre après Slash + Espace ( / )
    Mid(TC(A, 1), P, 1) = UCase(Mid(TC(A, 1), P, 1)) 'met cette lettre en majuscule
Next A 'prochaine ligne de la boucle
O.Range("T5").Resize(UBound(TC, 1), 1).Value = TC 'renvoie le tableau TC dans la cellule T5
End Sub


Regarde la pièce jointe :
http://www.cjoint.com/c/EFwn1MDHngI

0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
22 juin 2015 à 19:17
Bonjour,

Une autre méthode avec split:

Dim chaine, chaine1, chaine2 As String
 Dim x As Integer
  Dim Tableau() As String
    Dim I As Integer
     For x = 1 To 10 ' a adapter a la plage de cellule
       chaine = Cells(x, 1).Value 'valeur cellule
       chaine = LCase(chaine) 'tout en minuscule
          'découpe la chaine en fonction des  " / "
    'le résultat de la fonction Split est stocké dans un tableau
    Tableau = Split(chaine, " / ")
     'boucle sur le tableau pour visualiser le résultat
    For I = 0 To UBound(Tableau)
        'Le résultat s'affiche dans la fenêtre d'execution de l'éditeur de macros
        'Debug.Print Tableau(I)
     chaine1 = Tableau(0)
    chaine1 = UCase(Left(chaine1, 1)) & Mid(chaine1, 2) '1ère lettre majuscule
    chaine2 = Tableau(1)
     chaine2 = UCase(Left(chaine2, 1)) & Mid(chaine2, 2) '1ère lettre majuscule
      Next I
   chaine = chaine1 & " / " & chaine2 'reforme la chaine
             Cells(x, 1).Value = chaine 'modifie la cellule
               Next x

0