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)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 :
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)
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)
'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.
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 :
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)
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." <c.pas.net@wanadoo.fr> a écrit dans le message de news: 4239b2bb$0$11715$8fcfb975@news.wanadoo.fr...
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)
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 :
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)
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)
Tu n'aurais pas son adresse courriel à ce Charles pieri... tu sembles bien le connaître !!!
Salutations!
"jps" <pensez@liege.be> a écrit dans le message de news: e174ejzKFHA.4056@TK2MSFTNGP14.phx.gbl...
tu vas avoir des ennuis, denis : c'est celui de charles pieri....
jps
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de
news:Ow1NAazKFHA.3380@TK2MSFTNGP10.phx.gbl...
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 : ...
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 :
...
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 : ...