Forcer Majuscule

Bonjour,

Je possède un fichier dont une feuille comporte deux codes :

  • un envoi par mail
  • un adressage vers des cellules définies : D2, D5, D8, D11 .............pour terminer par N41. Ceci me permet de gagner du temps car je n'utilise pas le curseur ..........
Je souhaiterais si cela est possible forcer la majuscule pour les cellules D2, D5 et D8

Par avance je vous remercie pour votre aide, ci joint fichier

cordialement

mibri

18majuscule.xlsm (39.53 Ko)

Bonjour,

fonction Ucase

bonjour,

excusez moi mais ne comprends pas que "ucase" signifie

merci

Bonsoir,

Je ne me suis pas plongé dans le code, mais si tu veux forcer les majuscules dans la cellule A1 :

Range("A1")=UCase(Range("A1"))

ou juste :

UCase(Range("A1"))

dans le code pour convertir en majuscules à un moment donné.

merci pour ta réponse mais il ya vraisemblablement une incompatibilité avec ce qui précède dans ma feuille de codes .

Voici le message qui apparait

capture2

Bon alors,

Là, tu mets ça en dehors d'une procédure, ça ne peut pas aller.

Pour que les majuscules soient forcées dans les cellules à chaque changement dans la feuille, tu peux mettre :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i&, deb, pass As Boolean, C
    mem = Target.Address(0, 0)
   Range("D2")=UCase(Range("D2"))
   Range("D5")=UCase(Range("D5"))
   Range("D8")=UCase(Range("D8"))
    On Error Resume Next
    For Each C In Array("D2", "D5", "D8", "D11", "I15", "I17", "I19", "I27", "I29", "G33", "H33", "I33", "J33", "N33", "G35", "H35", "I35", "J35", "N35", "G37", "H37", "I37", "J37", "N37", "G39", "H39", "I39", "J39", "N39", "G41", "H41", "I41", "J41", "N41")
        If pass Then Range(C).Select: pass = 0: Exit Sub
        i = i + 1
        If mem = C Then: pass = 1: GoTo 1
1   Next C
End Sub

Excuse moi mais j'ai une nouvelle erreur...??

merci

capture 3

Bonjour,

une petite erreur, lire :

Range("D2")=UCase(Range("D2"))

Ca serait bien que tu lises les cours VBA (menu en haut de cette page) pour apprendre le B.A.BA

eric

Oups, une erreur de ma part, effectivement, en tapant le code dans le navigateur, désolé. Merci eriiic pour la correction, j'ai modifié dans le message concerné.

merci Oyobrans pour ta réponse mais cela ne fonctionne toujours pas je joins le fichier rectifié. Tu constateras que le système crée

un espace avant et après le signe = alors qu'il n'est pas prévu

25majuscule.xlsm (39.79 Ko)

Bonsoir,

le code de votre dernier fichier joint (ci-dessous) présente un problème important, à rectifier avant de continuer :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i&, deb, pass As Boolean, C
    mem = Target.Address(0, 0)
    Range("D2") = UCase(Range("D2"))
    Range("D5") = UCase(Range("D5"))
    Range("D8") = UCase(Range("D8"))
    On Error Resume Next
    For Each C In Array("D2", "D5", "D8", "D11", "I15", "I17", "I19", "I27", "I29", "G33", "H33", "I33", "J33", "N33", "G35", "H35", "I35", "J35", "N35", "G37", "H37", "I37", "J37", "N37", "G39", "H39", "I39", "J39", "N39", "G41", "H41", "I41", "J41", "N41")
        If pass Then Range(C).Select: pass = 0: Exit Sub
        i = i + 1
        If mem = C Then: pass = 1: GoTo 1
1   Next C
End Sub

Dès l’exécution de : Range("D2") = UCase(Range("D2")), un évènement supplémentaire est créé, puis un autre, etc... jusqu'à l'infini.

L’exécution de cette routine ne progresse pas plus loin.

Lorsque vous modifiez une cellule dans un évènement [Worksheet_Change], pensez à arrêter les évènements auparavant, puis les relancer une fois votre traitement terminé, exemple :

Application.EnableEvents = False
' code de votre traitement
Application.EnableEvents = true

Bonjour

Effectivement, lorsque j'essaie si le code fonctionne bien je constate cette routine et je la stoppe par echap. Je lis le cours VBA depuis quelques jours mais je suis très loin de comprendre son langage. Alors je comprends que vous avez détecté cette routine mais comment y remédier. Si ce n'est pas possible j'abandonnerai ce projet

cordialement, merci

mibri

Re-OUPS !!! Et en majuscules cette fois-ci, je ne voulais pas m'embarrasser d'explications et juste débloquer une aide ponctuelle sur UCase, et je m'embourbe. À vrai dire, je ne trouvais pas très judicieux de placer le changement de casse à cet endroit, mais à défaut...

Donc pour l'explication, effectuer le changement de valeur d'une cellule dans l’événement généré par ce changement lance une boucle infinie (super, merci pour l'aide ).

Si bien, il y a possibilité de placer ceci dans ThisWorkbook :

Private Sub Workbook_Open()
    With Worksheets("Préjudice")
        .Range("D2") = UCase(Range("D2"))
        .Range("D5") = UCase(Range("D5"))
        .Range("D8") = UCase(Range("D8"))
    End With
End Sub

Ça se chargera à l'ouverture du classeur, et puis c'est tout. Il vaudrait mieux appeler UCase au moment du changement de la valeur dans le code, ou au moment où on en a besoin, mais j'ai encore une impression de sables mouvants.

Merci à Thihii pour avoir relevé le problème, et je rejoins eriiic pour ce qui est du BA-BA. Désolé pour la déconvenue.

bonjour Oyobrans

J'ai mis ton code dans thisworkbook mais le problème est que cette fonctionnalité permet de mettre en majuscule dès l'ouverture du fichier et non instantanément au moment de la saisie.

J'utilise ce fichier une vingtaine de fois dans la journée et les clients ne sont jamais les mêmes.

Existe t il autre chose que "ucase" pour saisir en majuscule ??

par avance merci

cordialement

Oyobrans, je crois que j'ai trouvé une astuce en programmant la mise en forme sur les trois cellules d'une police majuscule type "Perpetua Titling MT", et ça marche

je te remercie infiniment pour le soutien que tu m'as apporté car je pense qu'avec les codes existants la compatibilité n'était pas évidente, bonne après midi

cordialement

mibri

Bonsoir,

voici une solution en vba :

Code: Tout sélectionner

 Private Sub Worksheet_Change(ByVal Target As Range)
        Dim i&, deb, pass As Boolean, C

        Application.EnableEvents = False  'désactive les évènements

        mem = Target.Address(0, 0)
        Range("D2") = UCase(Range("D2"))
        Range("D5") = UCase(Range("D5"))
        Range("D8") = UCase(Range("D8"))
        On Error Resume Next
        For Each C In Array("D2", "D5", "D8", "D11", "I15", "I17", "I19", "I27", "I29", "G33", "H33", "I33", "J33", "N33", "G35", "H35", "I35", "J35", "N35", "G37", "H37", "I37", "J37", "N37", "G39", "H39", "I39", "J39", "N39", "G41", "H41", "I41", "J41", "N41")
            If pass Then Range(C).Select: pass = 0: Exit Sub
            i = i + 1
            If mem = C Then pass = 1
       Next C

      Application.EnableEvents = true  'ré-active les évènements

    End Sub

Bonjour,

Thihii, merci d'avoir enlevé ce GoTo 1 qui me faisait mal aux yeux depuis un moment

eric

Bonjour Eriiic,

eriiic a écrit :

Bonjour,

Thihii, merci d'avoir enlevé ce GoTo 1 qui me faisait mal aux yeux depuis un moment

eric

De même pour moi, depuis hier...

Je viens aussi d'enlever les deux points derrière le 'Then'

Bonjour

J'ai un petit souci

J'ai une liste de Noms et Prénoms dans la meme cellule, il n'y a pas d'espace entre les noms et prénoms mais commencent tous par une lettre majuscule. Comment puis-je inserer une espace entre chaque nom et prenom?

Merci déjà!

Bonsoir,

ce n'est peut-être pas sur le bon sujet, mais post un fichier avec juste un onglet et quelques exemples.

Rechercher des sujets similaires à "forcer majuscule"