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

  • Initiateur de la discussion Initiateur de la discussion gillesda
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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...
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:
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
 
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:
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:
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
1 K
Compte Supprimé 979
C
Retour