Convertion majucules-minuscules et vis-versa (chaines de caractères) vba

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 709 fois - Téléchargée 27 fois

Contenu du snippet

Ce code permet la convertion majucules-minuscules et vis-versa de chaînes de caractères au sein d'un classeur Excel.

Il a pour avantages :
- de convertir successivement le contenu de chaque cellule d'une plage sélectionnée sans qu'il n'y ait aucun "format" à spécifier (menu de sélection de la plage au sein de la subroutine, avec récupération dynamique des coordonnées de la cellule).
- d'utiliser une MsgBox (standard Excel) et non une UserForm (utilisateur), ce qui le rend portatif par simple copie des subroutines dans un module d'un classeur dans l'éditeur VBA.

Source / Exemple :


Sub globale()
    Dim plage As Range, cel As Range
    On Error GoTo finerreur
    'SelectionPlage
    Set plage = Application.InputBox("Sélectionnez les cellules à convertir :", "Sélection de cellules", Type:=8)
    'Boucle sur chaque cellule de la plage sélectionnée
    For Each cel In plage 'Sélection de la cellule dans la plage définie
        cel.Select 'Convertion de la cellule sélectionnée
        Call Convertion
    Next cel
    MsgBox "Traitement terminé.", vbInformation, "Convertion" 'information de fin
    GoTo Fin
finerreur:
Fin:
End Sub
Sub Convertion()
    Select Case ActiveCell.Value 'Valeur de la cellule
    'CASSE UNIFROME (minimum 1 caractère)
    Case ""
        MsgBox ("BASCULEMENT IMPOSSIBLE :" & Chr(10) & "Cellule sélectionnée vide"), vbExclamation
    Case Is = LCase(ActiveCell.Value) 'Passage en minuscules
        ActiveCell.Value = UCase(ActiveCell.Value)
    Case Is = UCase(ActiveCell.Value) 'Passage en majuscules
        ActiveCell.Value = LCase(ActiveCell.Value)
    Case Else
        If IsNumeric(ActiveCell.Value) = True Then 'Test si la cellule est numérique
            MsgBox ("BASCULEMENT IMPOSSIBLE :" & Chr(10) & "La cellule sélectionnée ne contient que des chiffres."), vbInformation
        End If
        'CASSE NON UNIFROME (minimum 2 caractères)
        Select Case Mid(ActiveCell.Value, 2, 1) 'Test de la casse sur le 2ème caractère
        Case Is = LCase(Mid(ActiveCell.Value, 2, 1)) 'Passage en minuscules
            ActiveCell.Value = UCase(ActiveCell.Value)
        Case Is = UCase(Mid(ActiveCell.Value, 2, 1)) 'Passage en majuscules
            ActiveCell.Value = LCase(ActiveCell.Value)
        End Select
    End Select
End Sub

Conclusion :


Ce code utilise deux subroutines:

- la première (globale) affiche une MsgBox avec sélection de l'adresse des cellules de la plage sélectionnée, puis au sein de cette plage, sélectionne itérativement chaque cellule et appelle la subroutine de convertion du contenu.

- la seconde (convertion) effectue, comme son nom l'indique, la convertion du contenu de la cellule. Pour cefaire, j'utilise deux CAS : le premier convertit le contenu de la cellule lorsque sa casse est uniforme (LCase <-> Ucase), le second teste la casse sur le SECOND caractère (Mid("chaîne", pos. déb., long.)), de sorte à prendre en compte les chaînes en minuscules qui comportaraient un premier caractère en majuscule, puis effectue la convertion en fonction du résultat.

N.B.: Une MsgBox prévient des méprises qui consisteraient à tenter de convertir des chiffres!

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
lundi 7 juin 2010
Statut
Membre
Dernière intervention
11 juillet 2010

que reraion Sair d'exceller dans Visual Basic
Messages postés
473
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015

Salut,
Deux petites remarques :
- Tu devrais passer en paramètre une cellule à ta procédure "Conversion" plutôt que d'utiliser la cellule active. Ca te permettrait éventuellement d'executer ta fonction sur l'ensemble des cellules actives
- Quand tu fais un saut de ligne dans un msgbox, utilise la constante vbcrlf ou vbNewLine qui représentent les deux caractères chr$(10) & chr$(13). S'il venait à l'idée d'un développeur de Microsoft de ne plus supporter le passage à la ligne sur une seule des deux valeurs...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.