Macro Minuscule/Majuscule

  • Initiateur de la discussion Initiateur de la discussion bambi
  • Date de début Date de début

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 !

bambi

XLDnaute Occasionnel
Bonjour à tous

J'ai un code dans une feuille qui transforme les minuscules en majuscules après saisie dans certaines cellules définies.
Tout fonctionnait très bien jusqu'à ce que je rajoute des cellules à prendre en compte.

Les cellules que j'ai rajoutées sont toutes celles en colonnes H et Q
Les autres (colonnes D et M) continuent de fonctionner normalement

Et j'ai beau chercher depuis des heures, je ne vois pas le bug
Donc je fais appel à vous
Merci d'avance 😉

Le code en question (modifié) se trouve en bas de page
Code:
If Not Intersect(Target, Range("D4,D5,D17,D18,D30,D31,D43,D44,D56,D57,H2,H15,H28,H41,H54,M4,M5,M17,M18,M30,M31,M43,M44,M56,M57,Q2,Q15,Q28,Q41,Q54")) Is Nothing Then
If Intersect(Target, [D4,D5,D17,D18,D30,D31,D43,D44,D56,D57,M4,M5,M17,M18,M30,M31,M43,M44,M56,M57,H2,Q2,H15,Q15,H28,Q28,H41,Q41,H54,Q54]) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target = UCase(Target)
Application.EnableEvents = True
End If
End If

Et voici le code avant que je ne le modifie en rajoutant des cellules colonnes H et Q
Code:
    If Not Intersect(Target, Range("D4,D5,D17,D18,D30,D31,D43,D44,D56,D57,M4,M5,M17,M18,M30,M31,M43,M44,M56,M57")) Is Nothing Then
       
       If Intersect(Target, [D4,D5,D17,D18,D30,D31,D43,D44,D56,D57,M4,M5,M17,M18,M30,M31,M43,M44,M56,M57]) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target = UCase(Target)
Application.EnableEvents = True
End If
End If
 

Pièces jointes

Dernière édition:
Re : Macro Minuscule/Majuscule

Hello,

Essaie en mettant un espace après chaque virgule comme ceci...
Code:
If Not Intersect(Target, [D4, D5, D17, D18, D30, D31, D43, D44, D56, D57, H2, H15, H28, H41, H54, M4, M5, M17, M18, M30, M31, M43, M44, M56, M57, Q2, Q15, Q28, Q41, Q54]) Is Nothing Then
If Intersect(Target, [D4, D5, D17, D18, D30, D31, D43, D44, D56, D57, M4, M5, M17, M18, M30, M31, M43, M44, M56, M57, H2, Q2, H15, Q15, H28, Q28, H41, Q41, H54, Q54]) Is Nothing Then Exit Sub
Je pense que c'est parce que ce n'est qu'un bout du code, mais dans ton exemple il y a un Enf If de trop !
 
Re : Macro Minuscule/Majuscule

Merci hulk mais ça ne change rien 🙁
Oui c'est un bout de code mais il est complet dans le fichier joint

Je crois que je vais résoudre le probleme en formatant avec une police CAPS.
Ce sera plus simple 😉
Parce que là, j'ai fait et refait le code, cellule par cellule, je n'y arrive pas.
 
Dernière édition:
Re : Macro Minuscule/Majuscule

Re,

Effectivement les espaces ne sont apparemment pas la cause, mais bon sans vraiment savoir ce que tu veux, essaie comme ceci en remplacant les 8 premières lignes de ton code par :
Code:
If Target.Count > 1 Or Application.CountA(Target) = 0 Then Exit Sub
If Not Intersect(Target, Range("D3, F3, [B]H2,[/B] D16, F16, D29, F29, D42, F42, D55, F55, M3, O3, M16, O16, M29, O29, M42, O42, M55, O55, D4, D5, D17, D18, D30, D31, D43, D44, D56, D57, M4, M5, M17, M18, M30, M31, M43, M44, M56, M57")) Is Nothing Then
    If Not Intersect(Target, Range("D3, F3, [B]H2,[/B] D16, F16, D29, F29, D42, F42, D55, F55, M3, O3, M16, O16, M29, O29, M42, O42, M55, O55")) Is Nothing Then
        
        Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, Range("D3, F3, [B]H2,[/B] D16, F16, D29, F29, D42, F42, D55, F55, M3, O3, M16, O16, M29, O29, M42, O42, M55, O55")) Is Nothing Then
    Exit Sub
End If
Il faut double-cliquer une fois dans H2 ou re-saisir quelque chose pour que ça fonctionne !
 
Re : Macro Minuscule/Majuscule

Bonsoir le fil 🙂,
Question bête en passant, à quoi sert de faire 2 fois le test 😕 ?
Personnellement, je ne garderais que
Code:
If Intersect(Target, Range("D4,D5,D17,D18,D30,D31,D43,D44,D56,D57,H2,H15,H28,H41,H54,M4,M5,M17,M18,M30,M31,M43,M44,M56,M57,Q2,Q15,Q28,Q41,Q54")) Is Nothing Then Exit Sub
car je me méfie des [] qui m'ont déjà joué des tours.
Bonne soirée 😎
 
Re : Macro Minuscule/Majuscule

Re Hulk, bonsoir jnp

Jnp, pour ta question, je l'ignore
J'ai adaptée une macro trouvée ici même

Hulk, merci de ton aide.
Mais je ne parviens toujours pas à faire marcher le tout 🙁
Je mets mon fichier avec la mise en page finale
Les cellules vertes sont celles qui fonctionnent
Les rouges celles que je voudrais faire fonctionner

Le Private Sub Worksheet_Change contient également une macro sur la saisie des heures dans certaines cellules.
C'est pour cela qu'il y a plusieurs Enf If (enfin je crois)

Celle concernant les Majuscules/minuscules est en fin de macro dans la feuille

Il y a également d'autres macro dans ma feuille mais ce n'est pas l'objet de ma question 😉
 

Pièces jointes

Re : Macro Minuscule/Majuscule

Salut JNP, Hulk, Bambi et le forum.
Question bête en passant, à quoi sert de faire 2 fois le test 😕 ?
Je dirais même plus. J'ai regardé le fichier joint : Le programmeur était-il payé à la ligne 😀 ? C'est le genre de code que j'appelle "poudre aux yeux" : un exemple :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Or Application.CountA(Target) = 0 Then Exit Sub
........
If Target.Cells.Count > 1 Then
    Exit Sub
End If
If Target.Value = "" Then
    Exit Sub
End If
.......
J'ai enlevé le code intermédiaire, mais il est du même tonneau. On peut donc lire :
Si le nombre de cellule de Target est supérieur à 1 ou si le contenu de Target est égal à 0 alors on sort
En Clair : il faut que target ne concerne qu'une cellule non vide, sinon on sort.
Si le nombre de cellules de target est supérieur à 1, alors on sort
Si la valeur de target est égal à vide, alors on sort
On fait en entrée un test des deux conditions : dans ce cas on sort, et on ne pourra donc jamais tester les deux conditions séparément (ce qui est étrange n'est-ce pas ?).

Le code est de la même veine. Il serait plus profitable de recoder une macro sans s'occuper du code initial. Tu risques d'être de nouveau confronté à d'autres modifications et dans ce cas, il vaut mieux maîtriser un code clair, plutôt que de continuer sur cette usine à gaz.

Ton code concernant la mise en majuscules est du genre :
si intersect(target, range("A, B, C")) n'est pas vide alors
si intersect(target, range("A, C)) est vide sortir
mettre target en majuscules
un simple Si intersect(target, range("B")) alors mettre target en majuscules serait plus simple et plus lisible : mais le code donné est
Code:
    If Not Intersect(Target, Range("D4,D5,D17,D18,D30,D31,D43,D44,D56,D57,H2,H15,H28,H41,H54,M4,M5,M17,M18,M30,M31,M43,M44,M56,M57,Q2,Q15,Q28,Q41,Q54")) Is Nothing Then
    If Intersect(Target, [D4,D5,D17,D18,D30,D31,D43,D44,D56,D57,M4,M5,M17,M18,M30,M31,M43,M44,M56,M57,H2,Q2,H15,Q15,H28,Q28,H41,Q41,H54,Q54]) Is Nothing Then Exit Sub
et là, je nage : les adresses sont identiques (à l'ordre près). Et ça fonctionne, d'après le sujet.
Une idée du but de la macro serait mieux.
A+
 
Re : Macro Minuscule/Majuscule

Bonsoir Gorfael,

Mon message juste au-dessus répond peut-être à tes questions 😉

J'ai de nombreuses macro dans cette feuille mais qui ne font pas l'objet de ma demande
Le code auquel tu fais référence doit être celui qui transforme une série de chiffres tapés au clavier en format heure pour certaines cellules.

Mais j'ai en même temps le fameux code objet de ma demande concernant les minuscules et les majuscules dans certaines cases.

Il m'est impossible de mettre la totalité de mon fichier à chaque demande (trop de feuilles, trop de données, trop de tout 😀

Donc j'ai extrait une feuille en la "nettoyant" mais du coup y'a plusieurs macro dans la même feuille.

Je ne sais pas si je suis très claire mais ma demande concerne uniquement les minuscules et les majuscules comme spécifiés dans le 1er post 😉

J'ai un code dans une feuille qui transforme les minuscules en majuscules après saisie dans certaines cellules définies.
Tout fonctionnait très bien jusqu'à ce que je rajoute des cellules à prendre en compte.
 
Dernière édition:
Re : Macro Minuscule/Majuscule

Re,

Remplaces ton code par celui ci-dessous et vois si ça joue.

Me répète, il faut saisir quelque chose dans les cellules concernées ou faire un double-clique dedans pour que l'événement se déclenche !
Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
        
    Dim TimeStr As String
    
    If Target.Count > 1 Or Application.CountA(Target) = 0 Then Exit Sub
    If Not Intersect(Target, Range("D3, F3, D16, F16, D29, F29, D42, F42, D55, F55, M3, O3, M16, O16, M29, O29, M42, O42, M55, O55")) Is Nothing Then
        If Not Intersect(Target, Range("D3, F3, D16, F16, D29, F29, D42, F42, D55, F55, M3, O3, M16, O16, M29, O29, M42, O42, M55, O55")) Is Nothing Then On Error GoTo EndMacro
        
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'Cette ligne, suis pas sûr qu'elle soit utile, vérifies si ça joue sans, si oui effaces-la.
        If Application.Intersect(Target, Range("D3, F3, D16, F16, D29, F29, D42, F42, D55, F55, M3, O3, M16, O16, M29, O29, M42, O42, M55, O55")) Is Nothing Then Exit Sub
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        
        If Target.Cells.Count > 1 Then Exit Sub
        If Target.Value = "" Then Exit Sub
        
        Application.EnableEvents = False
        
        With Target
            If .HasFormula = False Then
                Select Case Len(.Value)
                    Case 1 ' e.g., 1 = 00:01 AM
                        TimeStr = "00:0" & .Value
                    Case 2 ' e.g., 12 = 00:12 AM
                        TimeStr = "00:" & .Value
                    Case 3 ' e.g., 735 = 7:35 AM
                        TimeStr = Left(.Value, 1) & ":" & _
                        Right(.Value, 2)
                    Case 4 ' e.g., 1234 = 12:34
                        TimeStr = Left(.Value, 2) & ":" & _
                        Right(.Value, 2)
                    Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
                        TimeStr = Left(.Value, 1) & ":" & _
                        Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
                    Case 6 ' e.g., 123456 = 12:34:56
                        TimeStr = Left(.Value, 2) & ":" & _
                        Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
                    Case Else
                        Err.Raise 0
                End Select
        .Value = TimeValue(TimeStr)
        End If
    End With

    Application.EnableEvents = True
    Exit Sub

EndMacro:
    MsgBox "You did not enter a valid time"
    Application.EnableEvents = True
    
    End If
    
    If Not Intersect(Target, Range("D4,D5,D17,D18,D30,D31,D43,D44,D56,D57,H2,H15,H28,H41,H54,M4,M5,M17,M18,M30,M31,M43,M44,M56,M57,Q2,Q15,Q28,Q41,Q54")) Is Nothing Then
        Application.EnableEvents = False
            Target = UCase(Target)
        Application.EnableEvents = True
    End If

End Sub
Au fait, j'ai ajouté les cellules concernées sur les If du bas (If pour les majuscules) et j'ai ôté les mêmes cellules concernées des If du haut (If pour le format)

J'ai aussi un peu arrangé le code en supprimant des End If superflus.


EDIT : Slt Kjin, ben voilà t'as tout compris et bien propre en plus le code... me disait bien qu'il y avait des trucs en trop ! 😀
 
Dernière édition:
Re : Macro Minuscule/Majuscule

Bonsoir,
Sans savoir s'il faut tout conserver (mettre des chiffres en majuscule va demander un effort certain !)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TimeStr As String
If Target.Count > 1 Or Target.HasFormula = True Then Exit Sub
Application.EnableEvents = False
If Not Intersect(Target, Range("D4,D5,D17,D18,D30,D31,D43,D44,D56,D57,H2,H15,H28,H41,H54,M4,M5,M17,M18,M30,M31,M43,M44,M56,M57,Q2,Q15,Q28,Q41,Q54")) Is Nothing Then
    Target = UCase(Target)
    Application.EnableEvents = True
ElseIf Len(Target) <= 6 And IsNumeric(Target) Then
    Select Case Len(Target)
        Case 1 ' e.g., 1 = 00:01 AM
            TimeStr = "00:0" & Target
        Case 2 ' e.g., 12 = 00:12 AM
            TimeStr = "00:" & Target
        Case 3 ' e.g., 735 = 7:35 AM
            TimeStr = Left(Target, 1) & ":" & _
            Right(Target, 2)
        Case 4 ' e.g., 1234 = 12:34
            TimeStr = Left(Target, 2) & ":" & _
            Right(Target, 2)
        Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
            TimeStr = Left(Target, 1) & ":" & _
            Mid(Target, 2, 2) & ":" & Right(Target, 2)
        Case 6 ' e.g., 123456 = 12:34:56
            TimeStr = Left(Target, 2) & ":" & _
            Mid(Target, 3, 2) & ":" & Right(Target, 2)
    End Select
    Target = TimeValue(TimeStr)
End If
Application.EnableEvents = True

End Sub

Edit : salut le bonhomme vert 🙂

A+
kjin
 
Re : Macro Minuscule/Majuscule

Re,
Hulk, un grand merci, TOUT fonctionne parfaitement
J'ai effectivement supprimé la ligne que tu jugeais inutile et ça ne pose aucun problème
Merci pour le nettoyage
Je n'y connais pas grand chose alors je fais soit avec l'enregistreur, soit en adaptant des codes trouvés par ci par là
Du coup, le résultat n'est pas toujours très net
Merci encore 😉
 
Re : Macro Minuscule/Majuscule

Bonjour,
je suis blonde mais tout de même
J'ai pas dis ça 😱
Slt Kjin, ben voilà t'as tout compris...
Bin non 😱
Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Or Target.HasFormula = True Then Exit Sub
If Not Intersect(Target, Range("D4,D5,D17,D18,D30,D31,D43,D44,D56,D57,H2,H15,H28,H41,H54,M4,M5,M17,M18,M30,M31,M43,M44,M56,M57,Q2,Q15,Q28,Q41,Q54")) Is Nothing Then
    Application.EnableEvents = False
    Target = UCase(Target)
    Application.EnableEvents = True
ElseIf Not Intersect(Target, Range("D3, F3, D16, F16, D29, F29, D42, F42, D55, F55, M3, O3, M16, O16, M29, O29, M42, O42, M55, O55")) Is Nothing Then
    If Target = "" Then Exit Sub
    Application.EnableEvents = False
    On Error GoTo Fin
    Target = TimeValue(Format(Target, "00:00:00"))
    Application.EnableEvents = True
    Exit Sub
Fin:
    MsgBox "You did not enter a valid time"
    Target.ClearContents
    Application.EnableEvents = True
End If

End Sub
A+
kjin
 
- 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

Discussions similaires

Réponses
0
Affichages
2 K
Réponses
4
Affichages
2 K
Réponses
9
Affichages
993
Retour