Macro : Transformer certaines lettres en majuscules

lenovo -  
cs_Le Pivert Messages postés 8437 Statut Contributeur -
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

4 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  2. lenovo
     
    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
  3. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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