Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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 !
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.
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
Bonjour JP14,
Je viens de tester ton code et ça marche à 100%. Merci pour ton aide, c'est cool de pouvoir compter sur des gens comme toi.
Cordialement,
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,
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?
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
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]
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
- 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