Forcer Maj ou Min avec 1ere lettre en Maj

Bcar

XLDnaute Junior
Bonjour le Forum,

Je souhaiterai "formater" 2 colonnes à partir d'un N° de ligne connu afin que quelque soit la saisie le texte soit en majuscule pour l'une et pour l'autre en minuscule avec la premiere lettre du mot en majuscule.
Merci par avance pour votre aide.
 

jp14

XLDnaute Barbatruc
Re : Forcer Maj ou Min avec 1ere lettre en Maj

Bonjour

Ci dessous une macro évènementielle
Code:
Dim flag As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)


Dim data1 As String
Dim cellule As Range
If flag = True Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("a10:a1000")) Is Nothing Then
    flag = True
    Target.Value = Evaluate("PROPER(""" + Target.Value + """)")
End If
If Not Intersect(Target, Range("b10:b1000")) Is Nothing Then
    flag = True
    Target.Value = UCase(Target.Value)
End If


flag = False

End Sub

A tester


JP
 
Dernière édition:

Bcar

XLDnaute Junior
Re : Forcer Maj ou Min avec 1ere lettre en Maj

Re-bonjour JP14,

Je viens de m'apercevoir en incluant le code dans le fichier final que la fonction est lente (>10s entre 2 saisies), as-tu une idée?
J'ai reduit la plage pour chaque colonne mais l'impact est faible.
Cordialement,
 

Bcar

XLDnaute Junior
Re : Forcer Maj ou Min avec 1ere lettre en Maj

Bonjour,
La poursuite des tests met en evidence un pb. En effet, si je selectionne une plage dans la feuille concernée et que j'efface le contenu des cellules la fonction ne marche plus pour les saisies suivantes. En redemarrant Excel cela fonctionne à nouveau.
Quel est le palliatif?
 

Pierrot93

XLDnaute Barbatruc
Re : Forcer Maj ou Min avec 1ere lettre en Maj

Bonjour à tous

la ligne suivante doit être placée après la dernière ligne utilisant l'instruction "exit sub" :

Code:
Application.EnableEvents = False

cette ligne désactive les macros événementielles, elles ne sont réacctivées que lors du redémarrage d'Excel ou lorsque tu la remet à "true"

Code:
Application.EnableEvents = [B]True[/B]

en espérant avoir été clair...

bonne journée
@+
 

Bcar

XLDnaute Junior
Re : Forcer Maj ou Min avec 1ere lettre en Maj

Bonjour Pierrot,
Si ta preconisation est conforme au code ci dessous cela ne marche pas (plantage si delete contenu cell). Est-ce bien cela?

Dim data1 As String
Dim cellule As Range
Application.EnableEvents = False
If flag = True Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("a10:a1000")) Is Nothing Then
flag = True
Target.Value = Evaluate("PROPER(""" + Target.Value + """)")
End If
If Not Intersect(Target, Range("b10:b1000")) Is Nothing Then
flag = True
Target.Value = UCase(Target.Value)
End If


flag = False
Application.EnableEvents = True
End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Forcer Maj ou Min avec 1ere lettre en Maj

Re,

non, je parlais de déplacer la ligne ci dessous en gras, afin de ne pas laisser les macros événementielles désactivées, en cas de sortie (Exit Sub) si action sur plus d'une cellule (If Target.Count > 1) :

Code:
Dim data1 As String
Dim cellule As Range

If flag = True Then Exit Sub
If Target.Count > 1 Then Exit Sub
[B]Application.EnableEvents = False[/B]

@+
 

jp14

XLDnaute Barbatruc
Re : Forcer Maj ou Min avec 1ere lettre en Maj

Bonjour le fil

En reprenant l'ensemble des remarques ci dessus, voici la macro modifiée.
J'ai rajouté un point se sortie si la cellule est vide
Code:
Option Explicit


Private Sub Worksheet_Change(ByVal Target As Range)


If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

If Not Intersect(Target, Range("a10:a1000")) Is Nothing Then
       Application.EnableEvents = False
        flag = True
        Target.Value = Evaluate("PROPER(""" + Target.Value + """)")
End If
    
If Not Intersect(Target, Range("b10:b1000")) Is Nothing Then
    Application.EnableEvents = False
        flag = True
        Target.Value = UCase(Target.Value)
End If


Application.EnableEvents = True

End Sub

JP
 

Discussions similaires

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 813
dernier inscrit
kaiyi