Macro : Transformer certaines lettres en majuscules
lenovo
-
cs_Le Pivert Messages postés 8437 Statut Contributeur -
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 :
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
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
-
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
-
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
-
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
-
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