OVH Cloud OVH Cloud

transformer une formule en VBA

15 réponses
Avatar
Freedo
Bonjour =E0 Toutes et =E0 Tous,
Lorsque je'entre dans la colonne D une s=E9rie de chiffres=20
et lettres, j'aimerais que le format se fasse=20
automatiquement.
exemple : je saisi dans la cellule D66 ceci 4B0001123412345
et le format devrait donner 4-B-0001-1234-12345
bien que la formule cidessous fonctionne=20
Comment transformer cette formule en VBA afin=20
d'automatiser le format d'affichage de la saisie
=3DGAUCHE(D66;1)&"-"&STXT(D66;2;1)&"-"&STXT(D66;3;4)&"-"&STXT
(D66;7;4)&"-"&STXT(D66;11;5)
Merci de suivre,
Freedo=20

5 réponses

1 2
Avatar
Freedo
Re...Jacky,
Oui je me doutais bien que c'était comme cela mais je ne
pouvais pas laisser le classeur comme cela à mes
collaborateurs.
ceci dit, en fait c'est toujours le nouvel enregistrement
en fin de tableau qui doit être formaté lors de la saisie;
donc ne pourrais-t-on pas imaginer formater uniquement la
cellule (D..) au momment ou j'ajoute l'enregistrement.
Je pourrais dans un premier temps utiliser la première
macro pour formater tout le tableau existant et puis la
désactiver pour utiliser finalement la nouvelle macro (à
créer)sur la dernière cellule.
A voir !
merci pour le suivi et de continuer,
Freedo
-----Message d'origine-----
Re..

Mon code nécessite une demande de confirmation, celle que
tu as enlevé!

Si une cellule contient un valeur, quelle soit déjà
formaté ou non, sera

modifiée, puisque le contrôle se fait par:
si colonne "D" et "Cellule non vide"
Une cellule dans la colonne "D" non vide peut être déjà
formaté, d'ou

l'intérêt du contrôle.
rep = MsgBox("Voulez-vous modifier la cellule " & Add & "
en: " & c,

vbYesNo, "Confirmation")
If rep = 6 Then ActiveCell.Value = c
End If
Sinon je ne vois pas comment faire un contrôle

automatique sur format encore

non formaté.
Mais un "grand" prendra peut-être le relais.
JJ

"Freedo" a écrit
dans le message news:

be1101c3ecb5$52779430$
Bonjour Jacky,
merci pour la réponse, et jai du modifier comme ceci pour
voir le format désiré :
'Private Sub Worksheet_SelectionChange(ByVal Target As
Excel.Range)
Private Sub Worksheet_Change(ByVal Target As Range)
Add = ActiveCell.Address
ad = Mid(Add, 2, 1)
c = ActiveCell.Value
If ad = "D" And c <> "" Then _
c = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid(c, 3, 4)
& "-" & Mid(c, 7, 4) _
& "-" & Mid(c, 11, 5)
ActiveCell.Value = c
End Sub
'
Seulement Voilà, si je reviens sur une cellule qui avait
déjà été formaté, cela reformate de nouveau et là! ce
n'est plus bon.
Une autre idée ?
Merci de suivre,
Freedo
-----Message d'origine-----
ou un autre exemple

Private Sub Worksheet_SelectionChange(ByVal Target As
Excel.Range)

Add = ActiveCell.Address
ad = Mid(Add, 2, 1)
c = ActiveCell.Value
If ad = "D" And c <> "" Then
c = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid(c, 3, 4)
& "-" & Mid(c, 7,

4) & "-" & Mid(c, 11, 5)
rep = MsgBox("Voulez-vous modifier la cellule " & Add & "
en: " & c,

vbYesNo, "Confirmation")
If rep = 6 Then ActiveCell.Value = c
End If
End Sub

Salutations
JJ

"freedo" a écrit
dans le message news:

b65201c3ec7c$3e787f50$
Bonjour Jacky,
bien que ta solution fonctionne, cela implique que je
doive actionne la macro moi-meme et de plus il va
reformater toute la plage à chaque fois.
Ce qui à déjà été formaté ne doit plus l'être.
donc c'est uniquement la cellule active dans la colonne D
qui devrait se formater dès que l'on saisi les chiffres
dans la cellule.
Peux-tu voir un peu plus ? merci
Freedo
-----Message d'origine-----
Salut freedo

Nomme tes cellules "plage" (menu insertion/nom/definir)
et lance ce code
Sub teste()
For Each c In [plage]
c.Value = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid(c,
3, 4) & "-" &

Mid(c, 7, 4) & "-" & Mid(c, 11, 5)
Next
End Sub

Salutations
JJ

"Freedo" a écrit
dans le message news:

ad2d01c3ec07$552f3830$
Bonjour Pierre CFI,
Merci pour ta solution, mais comment présenter cela dans
une macro automatique?
merci de suivre,
Freedo
-----Message d'origine-----
bonjour
Gauche c'est Left, STXT c'est Mid
au lieu des ; tu mets des ,
LEFT(D66,1)&"-"&MID(D66,2,1)&"-"&MID(D66,3,4)&"-"&MID
(D66,7,4)&"-"&MID(D66,11,5)




--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Freedo" a écrit
dans le message de news: a89501c3ebfd$96ddd700

$
Bonjour à Toutes et à Tous,
Lorsque je'entre dans la colonne D une série de
chiffres




et lettres, j'aimerais que le format se fasse
automatiquement.
exemple : je saisi dans la cellule D66 ceci
4B0001123412345

et le format devrait donner 4-B-0001-1234-12345
bien que la formule cidessous fonctionne
Comment transformer cette formule en VBA afin
d'automatiser le format d'affichage de la saisie
=GAUCHE(D66;1)&"-"&STXT(D66;2;1)&"-"&STXT(D66;3;4)&"-
"&STXT

(D66;7;4)&"-"&STXT(D66;11;5)
Merci de suivre,
Freedo


.




.




.




.






Avatar
Jacky
Re..
Oui, là tu pourras faire un contrôle de format sur la cellule précédente et
ne plus formater si elles sont identiques
Mais , demain ou la semaine prochaine

JJ

"Freedo" a écrit dans le message news:
bec601c3ecc0$67a0e720$
Re...Jacky,
Oui je me doutais bien que c'était comme cela mais je ne
pouvais pas laisser le classeur comme cela à mes
collaborateurs.
ceci dit, en fait c'est toujours le nouvel enregistrement
en fin de tableau qui doit être formaté lors de la saisie;
donc ne pourrais-t-on pas imaginer formater uniquement la
cellule (D..) au momment ou j'ajoute l'enregistrement.
Je pourrais dans un premier temps utiliser la première
macro pour formater tout le tableau existant et puis la
désactiver pour utiliser finalement la nouvelle macro (à
créer)sur la dernière cellule.
A voir !
merci pour le suivi et de continuer,
Freedo
-----Message d'origine-----
Re..

Mon code nécessite une demande de confirmation, celle que
tu as enlevé!

Si une cellule contient un valeur, quelle soit déjà
formaté ou non, sera

modifiée, puisque le contrôle se fait par:
si colonne "D" et "Cellule non vide"
Une cellule dans la colonne "D" non vide peut être déjà
formaté, d'ou

l'intérêt du contrôle.
rep = MsgBox("Voulez-vous modifier la cellule " & Add & "
en: " & c,

vbYesNo, "Confirmation")
If rep = 6 Then ActiveCell.Value = c
End If
Sinon je ne vois pas comment faire un contrôle

automatique sur format encore

non formaté.
Mais un "grand" prendra peut-être le relais.
JJ

"Freedo" a écrit
dans le message news:

be1101c3ecb5$52779430$
Bonjour Jacky,
merci pour la réponse, et jai du modifier comme ceci pour
voir le format désiré :
'Private Sub Worksheet_SelectionChange(ByVal Target As
Excel.Range)
Private Sub Worksheet_Change(ByVal Target As Range)
Add = ActiveCell.Address
ad = Mid(Add, 2, 1)
c = ActiveCell.Value
If ad = "D" And c <> "" Then _
c = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid(c, 3, 4)
& "-" & Mid(c, 7, 4) _
& "-" & Mid(c, 11, 5)
ActiveCell.Value = c
End Sub
'
Seulement Voilà, si je reviens sur une cellule qui avait
déjà été formaté, cela reformate de nouveau et là! ce
n'est plus bon.
Une autre idée ?
Merci de suivre,
Freedo
-----Message d'origine-----
ou un autre exemple

Private Sub Worksheet_SelectionChange(ByVal Target As
Excel.Range)

Add = ActiveCell.Address
ad = Mid(Add, 2, 1)
c = ActiveCell.Value
If ad = "D" And c <> "" Then
c = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid(c, 3, 4)
& "-" & Mid(c, 7,

4) & "-" & Mid(c, 11, 5)
rep = MsgBox("Voulez-vous modifier la cellule " & Add & "
en: " & c,

vbYesNo, "Confirmation")
If rep = 6 Then ActiveCell.Value = c
End If
End Sub

Salutations
JJ

"freedo" a écrit
dans le message news:

b65201c3ec7c$3e787f50$
Bonjour Jacky,
bien que ta solution fonctionne, cela implique que je
doive actionne la macro moi-meme et de plus il va
reformater toute la plage à chaque fois.
Ce qui à déjà été formaté ne doit plus l'être.
donc c'est uniquement la cellule active dans la colonne D
qui devrait se formater dès que l'on saisi les chiffres
dans la cellule.
Peux-tu voir un peu plus ? merci
Freedo
-----Message d'origine-----
Salut freedo

Nomme tes cellules "plage" (menu insertion/nom/definir)
et lance ce code
Sub teste()
For Each c In [plage]
c.Value = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid(c,
3, 4) & "-" &

Mid(c, 7, 4) & "-" & Mid(c, 11, 5)
Next
End Sub

Salutations
JJ

"Freedo" a écrit
dans le message news:

ad2d01c3ec07$552f3830$
Bonjour Pierre CFI,
Merci pour ta solution, mais comment présenter cela dans
une macro automatique?
merci de suivre,
Freedo
-----Message d'origine-----
bonjour
Gauche c'est Left, STXT c'est Mid
au lieu des ; tu mets des ,
LEFT(D66,1)&"-"&MID(D66,2,1)&"-"&MID(D66,3,4)&"-"&MID
(D66,7,4)&"-"&MID(D66,11,5)




--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Freedo" a écrit
dans le message de news: a89501c3ebfd$96ddd700

$
Bonjour à Toutes et à Tous,
Lorsque je'entre dans la colonne D une série de
chiffres




et lettres, j'aimerais que le format se fasse
automatiquement.
exemple : je saisi dans la cellule D66 ceci
4B0001123412345

et le format devrait donner 4-B-0001-1234-12345
bien que la formule cidessous fonctionne
Comment transformer cette formule en VBA afin
d'automatiser le format d'affichage de la saisie
=GAUCHE(D66;1)&"-"&STXT(D66;2;1)&"-"&STXT(D66;3;4)&"-
"&STXT

(D66;7;4)&"-"&STXT(D66;11;5)
Merci de suivre,
Freedo


.




.




.




.






Avatar
Jacky
Salut Freedo

Teste ce code et regarde s'il te convient
Dans le module de la feuille(clique droit sur l'onglet de la
feuille/visualisé le code et copier ceci)

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

'*****Si la ligne ne demarre pas en "d1", change les 2 "d1" ci dessous*****
For Each c In Range("d1", Range("d1").End(xlDown))
If Target.Column = 4 And c <> "" And Len(c) <> 19 Then
c.Value = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid(c, 3, 4) & "-" &
Mid(c, 7, 4) & "-" & Mid(c, 11, 5)
End If
Next

End Sub

Salutations
JJ
"Jacky" a écrit dans le message news:
#
Re..
Oui, là tu pourras faire un contrôle de format sur la cellule précédente
et

ne plus formater si elles sont identiques
Mais , demain ou la semaine prochaine

JJ

"Freedo" a écrit dans le message
news:

bec601c3ecc0$67a0e720$
Re...Jacky,
Oui je me doutais bien que c'était comme cela mais je ne
pouvais pas laisser le classeur comme cela à mes
collaborateurs.
ceci dit, en fait c'est toujours le nouvel enregistrement
en fin de tableau qui doit être formaté lors de la saisie;
donc ne pourrais-t-on pas imaginer formater uniquement la
cellule (D..) au momment ou j'ajoute l'enregistrement.
Je pourrais dans un premier temps utiliser la première
macro pour formater tout le tableau existant et puis la
désactiver pour utiliser finalement la nouvelle macro (à
créer)sur la dernière cellule.
A voir !
merci pour le suivi et de continuer,
Freedo
-----Message d'origine-----
Re..

Mon code nécessite une demande de confirmation, celle que
tu as enlevé!

Si une cellule contient un valeur, quelle soit déjà
formaté ou non, sera

modifiée, puisque le contrôle se fait par:
si colonne "D" et "Cellule non vide"
Une cellule dans la colonne "D" non vide peut être déjà
formaté, d'ou

l'intérêt du contrôle.
rep = MsgBox("Voulez-vous modifier la cellule " & Add & "
en: " & c,

vbYesNo, "Confirmation")
If rep = 6 Then ActiveCell.Value = c
End If
Sinon je ne vois pas comment faire un contrôle

automatique sur format encore

non formaté.
Mais un "grand" prendra peut-être le relais.
JJ

"Freedo" a écrit
dans le message news:

be1101c3ecb5$52779430$
Bonjour Jacky,
merci pour la réponse, et jai du modifier comme ceci pour
voir le format désiré :
'Private Sub Worksheet_SelectionChange(ByVal Target As
Excel.Range)
Private Sub Worksheet_Change(ByVal Target As Range)
Add = ActiveCell.Address
ad = Mid(Add, 2, 1)
c = ActiveCell.Value
If ad = "D" And c <> "" Then _
c = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid(c, 3, 4)
& "-" & Mid(c, 7, 4) _
& "-" & Mid(c, 11, 5)
ActiveCell.Value = c
End Sub
'
Seulement Voilà, si je reviens sur une cellule qui avait
déjà été formaté, cela reformate de nouveau et là! ce
n'est plus bon.
Une autre idée ?
Merci de suivre,
Freedo
-----Message d'origine-----
ou un autre exemple

Private Sub Worksheet_SelectionChange(ByVal Target As
Excel.Range)

Add = ActiveCell.Address
ad = Mid(Add, 2, 1)
c = ActiveCell.Value
If ad = "D" And c <> "" Then
c = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid(c, 3, 4)
& "-" & Mid(c, 7,

4) & "-" & Mid(c, 11, 5)
rep = MsgBox("Voulez-vous modifier la cellule " & Add & "
en: " & c,

vbYesNo, "Confirmation")
If rep = 6 Then ActiveCell.Value = c
End If
End Sub

Salutations
JJ

"freedo" a écrit
dans le message news:

b65201c3ec7c$3e787f50$
Bonjour Jacky,
bien que ta solution fonctionne, cela implique que je
doive actionne la macro moi-meme et de plus il va
reformater toute la plage à chaque fois.
Ce qui à déjà été formaté ne doit plus l'être.
donc c'est uniquement la cellule active dans la colonne D
qui devrait se formater dès que l'on saisi les chiffres
dans la cellule.
Peux-tu voir un peu plus ? merci
Freedo
-----Message d'origine-----
Salut freedo

Nomme tes cellules "plage" (menu insertion/nom/definir)
et lance ce code
Sub teste()
For Each c In [plage]
c.Value = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid(c,
3, 4) & "-" &

Mid(c, 7, 4) & "-" & Mid(c, 11, 5)
Next
End Sub

Salutations
JJ

"Freedo" a écrit
dans le message news:

ad2d01c3ec07$552f3830$
Bonjour Pierre CFI,
Merci pour ta solution, mais comment présenter cela dans
une macro automatique?
merci de suivre,
Freedo
-----Message d'origine-----
bonjour
Gauche c'est Left, STXT c'est Mid
au lieu des ; tu mets des ,
LEFT(D66,1)&"-"&MID(D66,2,1)&"-"&MID(D66,3,4)&"-"&MID
(D66,7,4)&"-"&MID(D66,11,5)




--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Freedo" a écrit
dans le message de news: a89501c3ebfd$96ddd700

$
Bonjour à Toutes et à Tous,
Lorsque je'entre dans la colonne D une série de
chiffres




et lettres, j'aimerais que le format se fasse
automatiquement.
exemple : je saisi dans la cellule D66 ceci
4B0001123412345

et le format devrait donner 4-B-0001-1234-12345
bien que la formule cidessous fonctionne
Comment transformer cette formule en VBA afin
d'automatiser le format d'affichage de la saisie
=GAUCHE(D66;1)&"-"&STXT(D66;2;1)&"-"&STXT(D66;3;4)&"-
"&STXT

(D66;7;4)&"-"&STXT(D66;11;5)
Merci de suivre,
Freedo


.




.




.




.










Avatar
Freedo
Bonjour Thierry,
Tout d'abord, Un grand Merci pour tout cette recherche et
le temps que tu consacres à mon problème.
Pour que la macro fonctionne je dois enlever le end if, et
cela fonctionne.
Mais si il y a une cellule vide juste avant(au cas ou je
n'aurais pas mis mon code à taper au moment de
l'enregistrement de la ligne et que j'enregistre les
données suivantes)la cellule active ne se formate pas,
alors je dois taper un code bidon dans la cellule avant et
revenir dans ma cellule active et cela formate bien puis
je supprime mon code bidon.
N'y aurait-il pas un test à faire dans la macro pour
palier à ce problème où cela me laisserait quand-même la
possibilité de passer à l'enregidtyrement suivant,?
merci de suivre,
Freedo

-----Message d'origine-----
Salut Freedo

Teste ce code et regarde s'il te convient
Dans le module de la feuille(clique droit sur l'onglet de
la

feuille/visualisé le code et copier ceci)

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

'*****Si la ligne ne demarre pas en "d1", change les
2 "d1" ci dessous*****

For Each c In Range("d1", Range("d1").End(xlDown))
If Target.Column = 4 And c <> "" And Len(c) <> 19 Then
c.Value = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid
(c, 3, 4) & "-" &

Mid(c, 7, 4) & "-" & Mid(c, 11, 5)
End If
Next

End Sub

Salutations
JJ
"Jacky" a écrit dans le
message news:

#
Re..
Oui, là tu pourras faire un contrôle de format sur la
cellule précédente


et
ne plus formater si elles sont identiques
Mais , demain ou la semaine prochaine

JJ

"Freedo" a écrit
dans le message


news:
bec601c3ecc0$67a0e720$
Re...Jacky,
Oui je me doutais bien que c'était comme cela mais je ne
pouvais pas laisser le classeur comme cela à mes
collaborateurs.
ceci dit, en fait c'est toujours le nouvel
enregistrement


en fin de tableau qui doit être formaté lors de la
saisie;


donc ne pourrais-t-on pas imaginer formater uniquement
la


cellule (D..) au momment ou j'ajoute l'enregistrement.
Je pourrais dans un premier temps utiliser la première
macro pour formater tout le tableau existant et puis la
désactiver pour utiliser finalement la nouvelle macro (à
créer)sur la dernière cellule.
A voir !
merci pour le suivi et de continuer,
Freedo
-----Message d'origine-----
Re..

Mon code nécessite une demande de confirmation, celle
que



tu as enlevé!
Si une cellule contient un valeur, quelle soit déjà
formaté ou non, sera

modifiée, puisque le contrôle se fait par:
si colonne "D" et "Cellule non vide"
Une cellule dans la colonne "D" non vide peut être déjà
formaté, d'ou

l'intérêt du contrôle.
rep = MsgBox("Voulez-vous modifier la cellule " & Add
& "




en: " & c,
vbYesNo, "Confirmation")
If rep = 6 Then ActiveCell.Value = c
End If
Sinon je ne vois pas comment faire un contrôle

automatique sur format encore

non formaté.
Mais un "grand" prendra peut-être le relais.
JJ

"Freedo" a écrit
dans le message news:

be1101c3ecb5$52779430$
Bonjour Jacky,
merci pour la réponse, et jai du modifier comme ceci
pour



voir le format désiré :
'Private Sub Worksheet_SelectionChange(ByVal Target As
Excel.Range)
Private Sub Worksheet_Change(ByVal Target As Range)
Add = ActiveCell.Address
ad = Mid(Add, 2, 1)
c = ActiveCell.Value
If ad = "D" And c <> "" Then _
c = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid(c, 3,
4)



& "-" & Mid(c, 7, 4) _
& "-" & Mid(c, 11, 5)
ActiveCell.Value = c
End Sub
'
Seulement Voilà, si je reviens sur une cellule qui
avait



déjà été formaté, cela reformate de nouveau et là! ce
n'est plus bon.
Une autre idée ?
Merci de suivre,
Freedo
-----Message d'origine-----
ou un autre exemple

Private Sub Worksheet_SelectionChange(ByVal Target As
Excel.Range)

Add = ActiveCell.Address
ad = Mid(Add, 2, 1)
c = ActiveCell.Value
If ad = "D" And c <> "" Then
c = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid(c, 3,
4)




& "-" & Mid(c, 7,
4) & "-" & Mid(c, 11, 5)
rep = MsgBox("Voulez-vous modifier la cellule " & Add
& "




en: " & c,
vbYesNo, "Confirmation")
If rep = 6 Then ActiveCell.Value = c
End If
End Sub

Salutations
JJ

"freedo" a écrit
dans le message news:

b65201c3ec7c$3e787f50$
Bonjour Jacky,
bien que ta solution fonctionne, cela implique que je
doive actionne la macro moi-meme et de plus il va
reformater toute la plage à chaque fois.
Ce qui à déjà été formaté ne doit plus l'être.
donc c'est uniquement la cellule active dans la
colonne D




qui devrait se formater dès que l'on saisi les
chiffres




dans la cellule.
Peux-tu voir un peu plus ? merci
Freedo
-----Message d'origine-----
Salut freedo

Nomme tes cellules "plage" (menu
insertion/nom/definir)





et lance ce code
Sub teste()
For Each c In [plage]
c.Value = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid
(c,





3, 4) & "-" &
Mid(c, 7, 4) & "-" & Mid(c, 11, 5)
Next
End Sub

Salutations
JJ

"Freedo" a
écrit





dans le message news:
ad2d01c3ec07$552f3830$
Bonjour Pierre CFI,
Merci pour ta solution, mais comment présenter cela
dans





une macro automatique?
merci de suivre,
Freedo
-----Message d'origine-----
bonjour
Gauche c'est Left, STXT c'est Mid
au lieu des ; tu mets des ,
LEFT(D66,1)&"-"&MID(D66,2,1)&"-"&MID(D66,3,4)&"-
"&MID






(D66,7,4)&"-"&MID(D66,11,5)



--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Freedo" a
écrit






dans le message de news: a89501c3ebfd$96ddd700
$
Bonjour à Toutes et à Tous,
Lorsque je'entre dans la colonne D une série de
chiffres




et lettres, j'aimerais que le format se fasse
automatiquement.
exemple : je saisi dans la cellule D66 ceci
4B0001123412345

et le format devrait donner 4-B-0001-1234-12345
bien que la formule cidessous fonctionne
Comment transformer cette formule en VBA afin
d'automatiser le format d'affichage de la saisie
=GAUCHE(D66;1)&"-"&STXT(D66;2;1)&"-"&STXT(D66;3;4)
&"-






"&STXT
(D66;7;4)&"-"&STXT(D66;11;5)
Merci de suivre,
Freedo


.




.




.




.







.








Avatar
Jacky
Bonjour Thierry, ?????????????????????????????,

Pour que la macro fonctionne je dois enlever le end if, et
cela fonctionne.

-------------------------
Oui, si la saisie du code est sur une ligne
La mienne etait sur 3 lignes
For Each........
If Target........then * 1
ici code * 2
endif * 3
Next
Là, c'est une question d'écriture les 2 fonctionnent dans ce cas.
--------------------------
N'y aurait-il pas un test à faire dans la macro pour
palier à ce problème où cela me laisserait quand-même la

possibilité de passer à l'enregidtyrement suivant,?
merci de suivre,

Ne peux-tu pas par le menu /Donnée /validation controler la saisie lors de
l'entrée des données ??
Sinon
Quelle est le nombre maxi d'enregistrements ?

JJ

"Freedo" a écrit dans le message de
news:cbd501c3ef1f$c4f2b190$
Bonjour Thierry,
Tout d'abord, Un grand Merci pour tout cette recherche et
le temps que tu consacres à mon problème.
Pour que la macro fonctionne je dois enlever le end if, et
cela fonctionne.
Mais si il y a une cellule vide juste avant(au cas ou je
n'aurais pas mis mon code à taper au moment de
l'enregistrement de la ligne et que j'enregistre les
données suivantes)la cellule active ne se formate pas,
alors je dois taper un code bidon dans la cellule avant et
revenir dans ma cellule active et cela formate bien puis
je supprime mon code bidon.
N'y aurait-il pas un test à faire dans la macro pour
palier à ce problème où cela me laisserait quand-même la
possibilité de passer à l'enregidtyrement suivant,?
merci de suivre,
Freedo

-----Message d'origine-----
Salut Freedo

Teste ce code et regarde s'il te convient
Dans le module de la feuille(clique droit sur l'onglet de
la

feuille/visualisé le code et copier ceci)

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

'*****Si la ligne ne demarre pas en "d1", change les
2 "d1" ci dessous*****

For Each c In Range("d1", Range("d1").End(xlDown))
If Target.Column = 4 And c <> "" And Len(c) <> 19 Then
c.Value = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid
(c, 3, 4) & "-" &

Mid(c, 7, 4) & "-" & Mid(c, 11, 5)
End If
Next

End Sub

Salutations
JJ
"Jacky" a écrit dans le
message news:

#
Re..
Oui, là tu pourras faire un contrôle de format sur la
cellule précédente


et
ne plus formater si elles sont identiques
Mais , demain ou la semaine prochaine

JJ

"Freedo" a écrit
dans le message


news:
bec601c3ecc0$67a0e720$
Re...Jacky,
Oui je me doutais bien que c'était comme cela mais je ne
pouvais pas laisser le classeur comme cela à mes
collaborateurs.
ceci dit, en fait c'est toujours le nouvel
enregistrement


en fin de tableau qui doit être formaté lors de la
saisie;


donc ne pourrais-t-on pas imaginer formater uniquement
la


cellule (D..) au momment ou j'ajoute l'enregistrement.
Je pourrais dans un premier temps utiliser la première
macro pour formater tout le tableau existant et puis la
désactiver pour utiliser finalement la nouvelle macro (à
créer)sur la dernière cellule.
A voir !
merci pour le suivi et de continuer,
Freedo
-----Message d'origine-----
Re..

Mon code nécessite une demande de confirmation, celle
que



tu as enlevé!
Si une cellule contient un valeur, quelle soit déjà
formaté ou non, sera

modifiée, puisque le contrôle se fait par:
si colonne "D" et "Cellule non vide"
Une cellule dans la colonne "D" non vide peut être déjà
formaté, d'ou

l'intérêt du contrôle.
rep = MsgBox("Voulez-vous modifier la cellule " & Add
& "




en: " & c,
vbYesNo, "Confirmation")
If rep = 6 Then ActiveCell.Value = c
End If
Sinon je ne vois pas comment faire un contrôle

automatique sur format encore

non formaté.
Mais un "grand" prendra peut-être le relais.
JJ

"Freedo" a écrit
dans le message news:

be1101c3ecb5$52779430$
Bonjour Jacky,
merci pour la réponse, et jai du modifier comme ceci
pour



voir le format désiré :
'Private Sub Worksheet_SelectionChange(ByVal Target As
Excel.Range)
Private Sub Worksheet_Change(ByVal Target As Range)
Add = ActiveCell.Address
ad = Mid(Add, 2, 1)
c = ActiveCell.Value
If ad = "D" And c <> "" Then _
c = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid(c, 3,
4)



& "-" & Mid(c, 7, 4) _
& "-" & Mid(c, 11, 5)
ActiveCell.Value = c
End Sub
'
Seulement Voilà, si je reviens sur une cellule qui
avait



déjà été formaté, cela reformate de nouveau et là! ce
n'est plus bon.
Une autre idée ?
Merci de suivre,
Freedo
-----Message d'origine-----
ou un autre exemple

Private Sub Worksheet_SelectionChange(ByVal Target As
Excel.Range)

Add = ActiveCell.Address
ad = Mid(Add, 2, 1)
c = ActiveCell.Value
If ad = "D" And c <> "" Then
c = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid(c, 3,
4)




& "-" & Mid(c, 7,
4) & "-" & Mid(c, 11, 5)
rep = MsgBox("Voulez-vous modifier la cellule " & Add
& "




en: " & c,
vbYesNo, "Confirmation")
If rep = 6 Then ActiveCell.Value = c
End If
End Sub

Salutations
JJ

"freedo" a écrit
dans le message news:

b65201c3ec7c$3e787f50$
Bonjour Jacky,
bien que ta solution fonctionne, cela implique que je
doive actionne la macro moi-meme et de plus il va
reformater toute la plage à chaque fois.
Ce qui à déjà été formaté ne doit plus l'être.
donc c'est uniquement la cellule active dans la
colonne D




qui devrait se formater dès que l'on saisi les
chiffres




dans la cellule.
Peux-tu voir un peu plus ? merci
Freedo
-----Message d'origine-----
Salut freedo

Nomme tes cellules "plage" (menu
insertion/nom/definir)





et lance ce code
Sub teste()
For Each c In [plage]
c.Value = Left(c, 1) & "-" & Mid(c, 2, 1) & "-" & Mid
(c,





3, 4) & "-" &
Mid(c, 7, 4) & "-" & Mid(c, 11, 5)
Next
End Sub

Salutations
JJ

"Freedo" a
écrit





dans le message news:
ad2d01c3ec07$552f3830$
Bonjour Pierre CFI,
Merci pour ta solution, mais comment présenter cela
dans





une macro automatique?
merci de suivre,
Freedo
-----Message d'origine-----
bonjour
Gauche c'est Left, STXT c'est Mid
au lieu des ; tu mets des ,
LEFT(D66,1)&"-"&MID(D66,2,1)&"-"&MID(D66,3,4)&"-
"&MID






(D66,7,4)&"-"&MID(D66,11,5)



--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Freedo" a
écrit






dans le message de news: a89501c3ebfd$96ddd700
$
Bonjour à Toutes et à Tous,
Lorsque je'entre dans la colonne D une série de
chiffres




et lettres, j'aimerais que le format se fasse
automatiquement.
exemple : je saisi dans la cellule D66 ceci
4B0001123412345

et le format devrait donner 4-B-0001-1234-12345
bien que la formule cidessous fonctionne
Comment transformer cette formule en VBA afin
d'automatiser le format d'affichage de la saisie
=GAUCHE(D66;1)&"-"&STXT(D66;2;1)&"-"&STXT(D66;3;4)
&"-






"&STXT
(D66;7;4)&"-"&STXT(D66;11;5)
Merci de suivre,
Freedo


.




.




.




.







.








1 2