XL 2021 Utiliser StrConv 1 2 et 3 sur des colonnes différentes.

gillesda

XLDnaute Nouveau
Bonjour à tout le forum.

Je m'excuse par avance de poser cette question relative aux majuscules, minuscules et noms propres.
Il y a des exemples mais je m'y perd un peu. J'ai fouillé dans le forum et ailleurs, je l'avoue, sans trouver la solution.
En effet, dans une même feuille je souhaite mettre des formats différents dans des colonnes.
J'ai une ébauche de macro mais cela ne fonctionne pas et Jean De La Fontaine ne m'aide pas beaucoup!!!
Si quelqu'un à la "soluce" j'en suis preneur.

Bonne fin de journée à tous.
 

Pièces jointes

  • jean de la fontaine.xlsm
    15.6 KB · Affichages: 4
Solution
Bonjour,

Une proposition :
VB:
Private Sub worksheet_change(ByVal target As Range)
'
Dim Cellule As Range

    If Not Intersect(target, Range("A6:A30")) Is Nothing Then
        Application.EnableEvents = False
        For Each Cellule In Intersect(target, Range("A6:A30"))
            If Cellule.Value <> "" Then Cellule.Value = StrConv(Cellule.Value, 1)
        Next
        Application.EnableEvents = True
    End If

    If Not Intersect(target, Range("B1:B30")) Is Nothing Then
        Application.EnableEvents = False
        For Each Cellule In Intersect(target, Range("B1:B30"))
            If Cellule.Value <> "" Then Cellule.Value = StrConv(Cellule.Value, 2)
        Next
        Application.EnableEvents = True
    End If

    If Not...

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Une proposition :
VB:
Private Sub worksheet_change(ByVal target As Range)
'
Dim Cellule As Range

    If Not Intersect(target, Range("A6:A30")) Is Nothing Then
        Application.EnableEvents = False
        For Each Cellule In Intersect(target, Range("A6:A30"))
            If Cellule.Value <> "" Then Cellule.Value = StrConv(Cellule.Value, 1)
        Next
        Application.EnableEvents = True
    End If

    If Not Intersect(target, Range("B1:B30")) Is Nothing Then
        Application.EnableEvents = False
        For Each Cellule In Intersect(target, Range("B1:B30"))
            If Cellule.Value <> "" Then Cellule.Value = StrConv(Cellule.Value, 2)
        Next
        Application.EnableEvents = True
    End If

    If Not Intersect(target, Range("C1:C30")) Is Nothing Then
        Application.EnableEvents = False
        For Each Cellule In Intersect(target, Range("C1:C30"))
            If Cellule.Value <> "" Then Cellule.Value = StrConv(Cellule.Value, 3)
        Next
        Application.EnableEvents = True
    End If

End Sub
 
Dernière édition:

AtTheOne

XLDnaute Accro
Supporter XLD
Bonjour à toutes & à tous, bonjour @gillesda
Peut-être sans macro avec les fonctions de feuille de calcul :
= MINUSCULE(A1) convertit le texte contenu en A1 en minuscule
=MAJUSCULE (A1) convertit le texte contenu en A1 en minuscule
=NOMPROPRE(A1) met les initiales en majuscule , le reste en minuscule, bon pour notre fabuliste...
Je suis sur mon téléphone et je n'ai pas accès aux macro.
À bientôt
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous :),

Ma p'tite version :
VB:
Private Sub worksheet_change(ByVal target As Range)
   Dim x
   On Error GoTo FIN:
   Application.EnableEvents = False
   For Each x In Intersect(target, Range("a6:a30")): x.Value = UCase(x): Next
   For Each x In Intersect(target, Range("b1:b30")): x.Value = Lcase(x): Next
   For Each x In Intersect(target, Range("c1:c30")): x.Value = Application.Proper(x): Next
FIN:
   Application.EnableEvents = True
End Sub

ou avec StrConv :
VB:
Private Sub worksheet_change(ByVal target As Range)
   Dim x
   On Error GoTo FIN:
   Application.EnableEvents = False
   For Each x In Intersect(target, Range("a6:a30")): x.Value = StrConv(x.Value, 1): Next
   For Each x In Intersect(target, Range("b1:b30")): x.Value = StrConv(x.Value, 2): Next
   For Each x In Intersect(target, Range("c1:c30")): x.Value = StrConv(x.Value, 3): Next
FIN:
   Application.EnableEvents = True
End Sub

ou plus amusant :
VB:
Private Sub worksheet_change(ByVal target As Range)
   Dim x
   On Error GoTo FIN:: Application.EnableEvents = False
   For Each x In Intersect(target, Union(Range("a1:a30"), Range("b1:b30"), Range("c1:c30"))): x.Value = StrConv(x.Value, x.Column): Next
FIN:
   Application.EnableEvents = True
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonsoir à tous
c'est kado
VB:
'formater le texte des cellules in one!! shot!!
'version 2018
'auteur :ryuautodidacte et patricktoulon sur developpez.com
'version simplifiée

Sub test() 'Argument possible ("UPPER","LOWER","PROPER","TRIM")
ACTION Range("A6:A30"), "upper"
ACTION Range("B6:B30"), "LOWER"
ACTION Range("C6:C30"), "PROPER"
End Sub

Sub ACTION(rng As Range, forme As String)
     With rng
        .Value = Evaluate("IF(ISTEXT(" & .Address & ")," & forme & "(" & .Address & "),REPT(" & .Address & ",1))")
    End With
End Sub

une tite version a mettre dans un menu contextuel des cellules par exemple
VB:
'autre Version a mettre dans le menu contextuel des cellules par exemple
Sub ProperYoupLaBoum()
Selection = Evaluate("index(proper(" & Selection.Address & "),)")
End Sub
 
Dernière édition:

gillesda

XLDnaute Nouveau
Bonjour à tous.
Merci à tous ceux qui m'ont répondu, j'avais le choix.
Vous êtes plus que performants, autant dans la validité des réponses que la rapidité.
J'aime bien le "plus amusant" comme tous vos petits commentaires.
J'ai opté pour la proposition de TooFatboy ce qui n'enlève rien aux autres.
Bon week-end à tous.
Gilles.
 

Discussions similaires

Statistiques des forums

Discussions
315 088
Messages
2 116 087
Membres
112 656
dernier inscrit
VNVT