Minuscule / majuscule

niala

XLDnaute Junior
Bonjour à toutes et à tous
Je voudrai que la saisie dans une cellule (n'importe laquelle) soit automatiquement ( sans validation d'une macro par exemple) affichée en majuscule.
Et ce même après effacement par exemple et réécriture.
Merci pour votre aide
 

Efgé

XLDnaute Barbatruc
Re : Minuscule / majuscule

Bonjour niala,
Si il s'agit de modifier n'importe quelle cellule de la feuille active, tu peux utiliser une macro dans le code de la feuille.(Dans l'exemple, click droit sur l'onglet / Visualiser le code)
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
    If .Count = 1 Then
        If .Value <> "" Then .Value = UCase(.Value)
    End If
End With
End Sub

Cordialement
 

Pièces jointes

  • niala(1).xls
    26.5 KB · Affichages: 65

Staple1600

XLDnaute Barbatruc
Re : Minuscule / majuscule

Bonjour à tous


Une petite variante (histoire de croiser Efgé que je salue ;)) et parce que seules les lettres se "majusculisent" ;)
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
    If .Count = 1 Then
        If Not IsNumeric(.Value) Then .Value = UCase(.Value) 'parce les chiffres ne connaissent pas les majuscules
'ni les minuscules d'ailleurs ;-)
    End If
End With
End Sub

EDITION
: En y repensant, que la cellule soit vide , on s'en fiche, une cellule vide en majuscule reste une cellule vide
Donc on peut se contenter de simplement écrire:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
.Value = IIf(.Count = 1, UCase(.Text), .Value)
End With
End Sub
ou une variante avec StrConv

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
.Value = IIf(.Count = 1, StrConv(.Text, vbUpperCase), .Value)
End With
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Minuscule / majuscule

Re


Essaies avec cette modif
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
.Value = IIf((.Count = 1 And Not IsDate(.Value)), UCase(.Text), .Value)
End With
End Sub

EDITION: On risque davoir des soucis lores de copier/coller incluant une sélection de plusieurs cellules, ou si on fait des drag'n drop

Je vais chercher comment gérer la chose et reviens après avoir tester
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Minuscule / majuscule

Re

EDITION: Finalement mieux vaut 3 IF qu'un IIF, donc avec la syntaxe Egféienne, cest mieux (et plus de soucis pour les copier/coller et glisser/déposer)

Je te conseille donc d'oublier mes codes avec IIF :eek: mais plutot d'utiliser celui-là, ci-dessous
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Areas.Count > 1 Then Exit Sub
With Target
    If .Count = 1 Then
        If Not IsDate(.Value) Then
        If Not .HasFormula Then
        .Value = UCase(.Value)
        End If
        End If
    End If
End With
End Sub



On avait oublier le cas ou tu veux saisir une formule
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Areas.Count > 1 Then Exit Sub
With Target
.Value = IIf(.Count = 1 And Not IsDate(.Value) And Not .HasFormula, UCase(.Text), .Value)
End With
End Sub


PS: Reste le problème évoqué dans mon précédent message.
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Minuscule / majuscule

Re niala, Bonjour Staple :)
Il faut quand même vérifiier si la cellule est vide (pas de ucase de "" :D)
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
    If .Count = 1 Then
        If .Value <> "" And Not IsDate(.Value) Then .Value = UCase(.Value)
    End If
End With
End Sub
@ Staple
Pour le "formula", sans il n'y a pas de problème.
Le vrai souci, que je ne vois pas comment éviter est :
On commence une formule de type = SOMME(
On sélectiionne les cellules à sommer
==> Plantage

Je regarde de mon coté aussi, mais si tu as une idée..
Cordialement
 

niala

XLDnaute Junior
Re : Minuscule / majuscule

Merci à tous les deux,

La macro:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Areas.Count > 1 Then Exit Sub
With Target
.Value = IIf(.Count = 1 And Not IsDate(.Value) And Not .HasFormula, UCase(.Text), .Value)
End With
End Sub

fonctionne très bien.
Les cellules dates gardent le format demandées et les autre cellules sont automatiquement en majuscules.

Grand merci et bon dimanche
 

MichD

XLDnaute Impliqué
Re : Minuscule / majuscule

Bonjour,

Je trouve bizarre cette ligne de code des procédures proposées :

With Target
If .Count = 1 Then <<<<<==========

Quelqu'un veut bien cette obsession de limiter le truc à une cellule.

Qu'est-ce qui se passe, si on fait un copier-coller d'une liste?
Pourquoi la procédure ne s'appliquerait pas?


VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Range
Application.EnableEvents = False
For Each C In Target
    If C.HasFormula = False Then  'afin de ne pas affecter les formules
        C.Value = UCase(C.Value)
    End If
Next
Application.EnableEvents = True
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Minuscule / majuscule

Bonjour MichD

MichD
Sur mon PC, avec mon code utilisant IIF, si je fais un drag'n drop une dizaine de lignes d'une colonne dans une autre
le curseur de la souris reste en sablier pendant une dizaine de seconde.
(Sur une feuille sans procédure événementielle, le sablier ne s'affiche pas)
C'est pour cela que j'ai testé en réécrivant le code sans IIF (cf précédent message et avec ce code réécrit pas de sablier)


PS: En utilisant Application.EnableEvents, je n'ai plus le phénomène avec le sablier. Merci ;)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'code VBA avec IIF
Application.EnableEvents = True
End Sub
 
Dernière édition:

Statistiques des forums

Discussions
312 400
Messages
2 088 087
Membres
103 711
dernier inscrit
mindo