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
A voir également:
- Dans le texte, un seul mot a réellement été écrit en lettres capitales (majuscules). quel est ce mot ?
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Macro maker - Télécharger - Divers Utilitaires
- Actiona macro - Télécharger - Divers Utilitaires
4 réponses
Bonjour Lenovo, bonjour le forum,
Essaie comme ça :
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 :
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 :
Regarde la pièce jointe :
http://www.cjoint.com/c/EFwn1MDHngI
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:
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