XL 2013 VBA MAJUSCULES et minuscules

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

Il y a presque longtemps que je n'ai pas eu à vous solliciter.
En effet, car grâce à vos conseils et formation, j'arrive à solutionner mes petits soucis.
Il y a également tous les sujets anciens et nouveaux qui me permettent également de trouver mes solutions.

Je reviens vers vous car, je n'ai pas réussi à résoudre mon souci ci-dessous :

Dans un feuille, j'aimerais forcer la saisie de certaines cellules en MAJUSCULE et d'autres plages en minuscules.

Malgré mes essais et recherches, je n'ai pas trouvé.

Je pense que le fichier joint contient les codes qui permettent de réaliser mon souhait mais je n'ai pas su les adapter ou les mettre comme il faut.

Pourriez-vous m'aider ?
Avec mes remerciements,
Je vous souhaite à toutes et à tous un super WE,
Amicalement,
Lionel,
 

Pièces jointes

  • Min_Maj 1.xlsm
    16.2 KB · Affichages: 42

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
D'abord, un grand merci car si, si, c'est exactement la réponse à mon besoin.

Ensuite :
"Par conséquent, je réitère, tu avais largement de quoi solutionner ton problème avec tes petites mimines tout seul comme un grand ;)"

Oui, tous les éléments y étaient mais, même après des heures de recherche et de tentives, je n'ai pas été capable de réaliser le code que tu viens de me faire.

Merci donc de "surestimer ma petite personne"
Merci JM, comme toujours présent et efficace.
Maintenant je vais encore me creuser la caboche pour comprendre pkoi je n'avais pas réussi.
Bonne fin de journée,
Amicalement,
Lionel,
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Maintenant je vais encore me creuser la caboche pour comprendre pkoi je n'avais pas réussi.

De l’intérêt de déclarer les variables et de les déclarer correctement au lieu de laisser faire VBA !

1 - Exécuter le code tel quel -> Echec

2 - Modifier le code en réactivant la déclaration Dim xcell As Range -> ça doit fonctionner

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'Dim xcell As Range

   On Error GoTo FINI

   If Not Intersect(Target, Range("b1:b60")) Is Nothing Then
      For Each xcell In Intersect(Target, Range("b1:b60")).Cells   'si entrées multiples (copier-coller)
         If UCase(xcell) <> xcell Then xcell = UCase(xcell)
      Next
   End If

   If Not Intersect(Target, Range("c1:c60")) Is Nothing Then
      For Each xcell In Intersect(Target, Range("c1:c60"))   'si entrées multiples (copier-coller)
         If LCase(xcell) <> xcell Then xcell = LCase(xcell)
      Next
   End If
FINI:
   Application.EnableEvents = True
End Sub

nota : quand on utilise l'évènement Worksheet_Change, il y a un risque de boucler si dans la procédure évènementielle on, est amené à changer les valeurs de cellules sur la feuille. C'est pourquoi, on peut utiliser la propriété Application.EnableEvents=False pour inhiber la détection de l'évènement Change. Ne pas oublier de la réactiver en fin de procédure voire aussi en cas d'erreur au sein de la macro.
 

Pièces jointes

  • arthour973- de Min_Maj- v1.xlsm
    16 KB · Affichages: 40
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
@Staple1600 ;),

For Each r In r

[mon opinion]
Ça, c'est le genre d'écriture que je proscrirai à quiconque d'utiliser. D'un point de vue logique, les deux éléments ne désignent pas la même entité (même si ça fonctionne en VBA), et ça ne favorise pas la lecture intelligible du code.
[/mon opinion et je la partage :p]

Un exemple plus concret et parlant :
Pour chaque caisse de vin dans la caisse de vin, je vais boire la caisse de vin derechef ?!?!?!?
alors que :
Pour chaque bouteille dans la caisse de vin, je vais boire la bouteille derechef :):):):)

....................................“ Pour votre santé, attention à l’abus d’alcool ”
 
Dernière édition:

Si...

XLDnaute Barbatruc
Bon_soir
@Staple1600 ;),
Ça, c'est le genre d'écriture que je proscrirai à quiconque d'utiliser

Sans vouloir relancer le débat :cool:, tu me fais penser à ceux qui proscrivent l'utilisation de la variable Application.EnableEvents en la replaçant par Flag, un drapeau noir de type booléen.

Mais j'enfreindrai régulièrement cette consigne (en sachant ce que je fais).

De l'intérêt à ne pas utiliser trop de variables comme je le vois invariablement et à utiliser les fonctionnalités fournies par Excel.

Code:
Private Sub Worksheet_Change(ByVal R As Range)
  If Intersect(R, Range([B1:B60], [C1:C60])) Is Nothing Then Exit Sub
  For Each R In R
  Application.EnableEvents = 0
  R = UCase(R)
  If R.Column = 3 Then R = LCase(R)
  Application.EnableEvents = 1
  Next
End Sub

Donc, de l'intérêt à remplacer "Target" par R (initiale de range en Majuscule) comme je le fais invariablement dans les évènementielles l'utilisant.

Bien sûr ce n'est qu'une façon personnelle de procéder tout en remarquant que beaucoup ont peur de ce qu'ils ne connaissent pas bien. Oups, j'en fais partie o_O (mais je me soigne :p) !

L'essentiel est quand même que chacun y retrouve son compte !

arthour, tu as déjà oublié mon N° de compte bancaire ? C'est le 973 ;) !
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re, bonsoir Si...

Et c'est là qu'arthour973 n'ajoutera pas dans le titre de sa discussion : Résolu par Si...
(comme il le fit en avril 2017)

Mais Si... par deux fois, la voie lui dévoiler en lettres majuscules, je persiste à dire que le gars arthour avait les facultés de résolution de sa problématique.;)
Et quand bientot arrivé à 2000 posts sur le forum, mon gars arthour, tu pourras plus prétendre ne pas savoir utiliser VBA car Barbatruc devenu tu seras. ;)
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir Si... ;)

L'essentiel est quand même que chacun y retrouve son compte !
Et je suis d'accord avec toi. Tu dis que tu sais ce que tu fais. Certes, mais ce n'est pas le cas de tout le monde.

Je suis formaté par l'utilisation, dans ma jeunesse, de langages structurés et fortement typés et aussi par un mentor qui refusait toute astuce "sioux" au sein des codes pour en diminuer la taille (- je vous préserve de crises de nerf quand vous relirez votre code bien plus tard - disait-il). Les ruses de sioux, il les réservait aux algorithmes pas à l'écriture du code.

Un point que j'ai du mal à observer et qu'il préconisait, c'est l'insertion systématique de petits commentaires aux endroits stratégiques du codes. Ce n'est pas évident, soit on en en met pas assez (pour les vieux jours quand on revient sur le code) soit on en met trop. Mais je me soigne.

Bonne soirée :) Si....

rem : voir la discussion ICI juste pour le fun
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Bonsour®
De l'intérêt à ne pas utiliser trop de variables comme je le vois invariablement et à utiliser les fonctionnalités fournies par Excel.
Donc, de l'intérêt à remplacer "Target" par R (initiale de range en Majuscule) comme je le fais invariablement dans les évènementielles l'utilisant.
????????
For Each R In R

R n'est pas défini explicitement !!!
un Range, une plage, une cellule ????

"target" désigne explicitement dans toutes procs événementielles la sélection !!

cela peut être une seul cellule, une plage, plusieurs cellules distinctes, plusieurs plages ou même encore un objet
ex:
(ByVal Target As Range)
(ByVal Target As PivotTable)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Ce lien n'existe plusCe lien n'existe plus

Sans vouloir relancer le débat :cool:, tu me fais penser à ceux qui proscrivent l'utilisation de la variable Application.EnableEvents en la replaçant par Flag, un drapeau noir de type booléen.

Pas de ça chez moi :eek:! Application.EnableEvents existe donc je l'utilise :p.

Mais je retiens le "me fais penser à ceux qui" : locution qui, dans une discussion, peut être utile comme argument (certes indubitablement fallacieux) mais ça peut servir malgré tout...;)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

Rappel du cahier des charges:
Dans un feuille, j'aimerais forcer la saisie de certaines cellules en MAJUSCULE et d'autres plages en minuscules.

Une autre voie, à la sauce Staple1600 (en mode nocturne)
La version brute de décoffrage, sans garde-fou
(qui plantera dès l'attaque de la 5ième colonne ;) )
VB:
Private Sub Worksheet_Change(ByVal T As Range)
T = StrConv(T, Switch(T.Column = 2, 1, T.Column = 3, 2))
End Sub
La version "soyons un peu plus sérieux"
(avec un léger emprunt à Si... pour l'intersect)
VB:
Private Sub Worksheet_Change(ByVal T As Range)
If Intersect(T, Range([B1:B60], [C1:C60])) Is Nothing Then Exit Sub
Application.EnableEvents = False
T = StrConv(T, Switch(T.Column = 2, 1, T.Column = 3, 2))
Application.EnableEvents = True
End Sub
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous et à tous,

Tout comptes faits, même si je n'ai pas consulté intégralement les 1818 fils LOL (et pourtant B....l - j'en ai fait des recherches), je suis très content de voir vos posts et de constater, une fois de plus, l'étendue de la passion qui vous anime.
Vous êtes vraiment formid ;)
Je vais prendre du temps ce WE pour essayer tous vos codes.
Merci. Merci. Merci pour nous tous, profanes, trop souvent peu respectueux de votre gentillesse.
Bon WE à toutes et à tous,
Amicalement,
Lionel,
 

Si...

XLDnaute Barbatruc
Re

Staple ;), tu persistes, je vais donc aller jusqu'à contresigner et tu me devras une caisse à savon.

Il fait, peut-être, partie des personnes qui ont peur ?

Modeste ;), de "l'implicite" à "l'explicite" : c'est un sujet qui n'en finirait pas d'en finir, non ?

mapomme ;), je ne suis qu' un simple besogneux qui privilégie plus la "pratique" que 'la théorie".
 

Discussions similaires

Réponses
10
Affichages
514

Statistiques des forums

Discussions
312 151
Messages
2 085 783
Membres
102 973
dernier inscrit
docpod