Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Format d'une chaine de caractère

4 réponses
Avatar
Dom.
Bonjour à toutes et tous

Environnement : excel 2003 / windows 2000

Je voudrais formater le texte saisie dans une cellule sous une forme
1er cas : "A 123 456 789"
ou bien
2e cas : "A BCD 123 456 789"

quelque soit le format de saisie (avec ou sans espace) c'est à dire
que si la saisie est par exemple "a 123456 789" elle devient
automatiquement "A 123 456 789" et "abc d1234 56789" devient
"A BCD 123 456 789"

J'ai donc écrit le code suivant pour le 1er cas:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Chaine As String

Application.ScreenUpdating = False
Target.Replace What:=" ", Replacement:="" 'suppression des espaces
Chaine = UCase(Target.Value) 'majuscule

'rajout des espaces au bon endroit
If Len(Target.Value) = 10 Then 'pour A 123 456 789
Target.Value = Mid(Chaine, 1, 1)
Target.Value = Target.Value & " " & Mid(Chaine, 2, 3) &
" " & Mid(Chaine, 5, 3) & " " & Mid(Chaine, 8, 3)
End If

End Sub

Peut-on ecrire plus simplement la partie du test If / Endif ?

Merci d'avance

Dom.

4 réponses

Avatar
MichDenis
Bonjour Dom,


Je me permet de publier un exemple à partir du code postal Corse... ta problématique y ressemble beaucoup. tu peux alors
t'inspirer de ceci pour arriver à tes fins :


Code Sécurité Sociale Corse 1 70 12 2A 123 456 | 12

La procédure qui suit doit être inséré dans le module feuille où l'action se déroule. Un clic droit sur l'onglet de la
feuille et dans le menu contextuel, tu sélectionnes la commande "Visualiser le code" ...

Ce code est valide seulement si toutes tes données ont la forme édictée dans ton message : 1 70 12 2A 123 456 | 12

La Variable "Pattern" de la procédure contient une suite de [1-9] ou [A-Z] . Chaque section représente un chiffre ou
une lettre de ton code de sécurité sociale. La première section = le premier caractère de ton code ...etc. et le contenu
de cette section (exemple 0-9) indique que le caractère à la position donnée peut prendre la valeur de 0,1,2...9, il en
est de même pour les lettres [A-Z].

Cependant, si tu le désires, tu peux y aller de plus de précision en spécifiant le ou les caractères permis à une
position donnée.
Exemple : Si ton premier caractère de la chaîne de ton code de sécurité sociale peut prendre seulement les valeurs 1-3-5
, insère alors dans la section correspondante ceci : [1,3,5] et cela est vrai pour chacune des positions.

Lors de la saisie de tes codes dans les cellules, tu n'as pas besoin d'insérer les espaces... le code s'en chargera. De
même, tu peux insérer le caractère "lettre" de ton code sans égard à la casse ... elle finira en majuscule .

Pour les besoins de l'exemple, j'ai choisi la colonne A:A où tu devrais insérer tes codes de sécurité sociale... tu n'as
qu'à modifier la plage de cellule selon tes besoins dans cette ligne de code : Set Rg = Intersect(Target, Range("A:A"))


'---------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim Rg As Range, Pattern As String, R As String

Pattern = "[0-9][0-9][0-9][0-9][0-9]" & _
"[0-9][a-z,A-Z][0-9][0-9][0-9]" & _
"[0-9][0-9][0-9][|][0-9][0-9]"

Set Rg = Intersect(Target, Range("A:A"))

Application.EnableEvents = False
If Not Rg Is Nothing Then
For Each c In Rg
If c <> "" Then
R = Replace(c.Value, " ", "")
If R Like Pattern Then
c.Value = UCase(Left(R, 1) & " " & Mid(R, 2, 2) _
& " " & Mid(R, 4, 2) & " " & Mid(R, 6, 2) _
& " " & Mid(R, 8, 3) & " " & _
Mid(R, 11, 3) & " | " & Mid(R, 15, 2))
c.Interior.ColorIndex = xlNone
c.Font.ColorIndex = xlAutomatic
Else
c.Interior.Color = vbRed
c.Font.Color = vbWhite
MsgBox "la saisie du numéro de sécurité " & _
"sociale est inexacte", vbInformation + vbOKOnly _
, Application.UserName
End If
Else
c.Interior.ColorIndex = xlNone
c.Font.ColorIndex = xlAutomatic
End If
Next
End If
Application.EnableEvents = True

End Sub
'---------------------------------------------


Salutations!




"Dom." a écrit dans le message de news: 4239b2bb$0$11715$
Bonjour à toutes et tous

Environnement : excel 2003 / windows 2000

Je voudrais formater le texte saisie dans une cellule sous une forme
1er cas : "A 123 456 789"
ou bien
2e cas : "A BCD 123 456 789"

quelque soit le format de saisie (avec ou sans espace) c'est à dire
que si la saisie est par exemple "a 123456 789" elle devient
automatiquement "A 123 456 789" et "abc d1234 56789" devient
"A BCD 123 456 789"

J'ai donc écrit le code suivant pour le 1er cas:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Chaine As String

Application.ScreenUpdating = False
Target.Replace What:=" ", Replacement:="" 'suppression des espaces
Chaine = UCase(Target.Value) 'majuscule

'rajout des espaces au bon endroit
If Len(Target.Value) = 10 Then 'pour A 123 456 789
Target.Value = Mid(Chaine, 1, 1)
Target.Value = Target.Value & " " & Mid(Chaine, 2, 3) &
" " & Mid(Chaine, 5, 3) & " " & Mid(Chaine, 8, 3)
End If

End Sub

Peut-on ecrire plus simplement la partie du test If / Endif ?

Merci d'avance

Dom.
Avatar
jps
tu vas avoir des ennuis, denis : c'est celui de charles pieri....
jps

"MichDenis" a écrit dans le message de
news:
Code Sécurité Sociale Corse 1 70 12 2A 123 456 | 12


Avatar
MichDenis
Bonjour JPS,

Tu n'aurais pas son adresse courriel à ce Charles pieri... tu sembles bien le connaître !!!


Salutations!



"jps" a écrit dans le message de news:
tu vas avoir des ennuis, denis : c'est celui de charles pieri....
jps

"MichDenis" a écrit dans le message de
news:
Code Sécurité Sociale Corse 1 70 12 2A 123 456 | 12


Avatar
Dom.
Bonjour à toutes et tous

Merci Michel, je vais regarder ce petit bout de code de plus près
et voir ce que je peux en faire. A première vue cela me semble
coller parfaitement avec ce que je recherche et ne devrait pas être
difficile à adapter.

Encore merci.

Dom.

Bonjour Dom,


Je me permet de publier un exemple à partir du code postal Corse...
ta problématique y ressemble beaucoup. tu peux alors
t'inspirer de ceci pour arriver à tes fins :
...