Verification et transformation de la saisie apres validation d'un cellule

7 réponses
Avatar
Alex
Bonjour =C3=A0 tous,=20

Je ne sais pas si ce que je veux faire est r=C3=A9alisable ou non, mais je =
souhaiterai apr=C3=A8s qu'une cellule soit valid=C3=A9 par entr=C3=A9e ou s=
uite =C3=A0 tabulation pour changer de cellule, que la saisie effectu=C3=A9=
e soit en mis en MAJUSCULE et que les espaces =C3=A9ventuelles soit remplac=
er par des "_".
J'ai tent=C3=A9 par donn=C3=A9es/validation de donn=C3=A9es mais sans r=C3=
=A9sultat.
Quelqu'un aurait il une solution =C3=A0 me proposer.
Merci par avance de votre aide.
Bonne journ=C3=A9e
=20

7 réponses

Avatar
MichD
Le 03/08/20 à 08:14, Alex a écrit :
Bonjour à tous,
Je ne sais pas si ce que je veux faire est réalisable ou non, mais je souhaiterai après qu'une cellule soit validé par entrée ou suite à tabulation pour changer de cellule, que la saisie effectuée soit en mis en MAJUSCULE et que les espaces éventuelles soit remplacer par des "_".
J'ai tenté par données/validation de données mais sans résultat.
Quelqu'un aurait il une solution à me proposer.
Merci par avance de votre aide.
Bonne journée

Bonjour,
Je te donne 2 exemples de code en VBA que tu peux utiliser.
Attention, tu dois choisir obligatoirement UNE des 2 approches.
Tu fais un clic droit sur l'onglet de la feuille en question, et tu
copies le code dans la page blanche...
A )
Si tu désires que ta demande s'applique à une plage de cellules
limitées, utilise ceci. Dans mon exemple, cela va s'appliquer à toutes
les cellules des colonnes A et B.
Dans cette ligne de code,
Set Rg = Intersect(Range("A:B"), Target)
Tu peux remplacer Range("A:B") par la plage de cellules de ton choix
Exemple : Range("C5:H25")
'--------------------------------------
Private Sub Worksheet_Changedddd(ByVal Target As Range)
Dim Rg As Range, C As Range
Set Rg = Intersect(Range("A:B"), Target)
If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each C In Rg
C.Value = UCase(C)
C.Replace What:=" ", replacement:="_", lookAt:=xlPart
Next
Application.EnableEvents = False
End If
End Sub
'--------------------------------------
B )
Cette procédure s'applique à toutes les cellules de la feuille de calcul.
'--------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Range
Application.EnableEvents = False
For Each C In Target.Cells
C.Value = UCase(C.Value)
C.Replace What:=" ", replacement:="-", LookAt:=xlPart
Next
Application.EnableEvents = True
End Sub
'--------------------------------------
MichD
Avatar
MichD
Correction dans l'exemple A, remplace ceci :
Private Sub Worksheet_Changedddd(ByVal Target As Range)
Par
Private Sub Worksheet_Change(ByVal Target As Range)
Lors de la publication, j'ai omis d'enlever les lettres "d"
MichD
Avatar
Alex
Merci MichD
Alors entre temps moi j'avais écris cette macro que j'ai testé et qui fonctionne bien, malgré qu'elle soit plus longue que ton code :
Sub remplaceEspaceParTiretEtMaj()
Dim textok As String
Range("C8").Select
ActiveCell.Replace What:=" ", Replacement:="_", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:lse, SearchFormat:lse, _
ReplaceFormat:lse
Range("BB1").Value = Range("c8").Value
Range("bc1").Select
ActiveCell.FormulaR1C1 = "=UPPER(RC[-1])"
Range("BC1").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, Ski pBlanks _
:lse, Transpose:lse
ActiveSheet.Paste
Application.CutCopyMode = False
textok = Range("BC1").Value
Range("C8").Value = textok
End Sub
Comment je peux affecter cette macro a ma cellule C8 sans ajout de bouton ?
Dois je faire un sub activecell (ByVal Target As Range) ?
Si cela n'est pas possible je prendrai alors ta solution que j'adapterai un iquement à la cellule C8.
En tout cas merci encore pour ton aide précieuse.
Bonne journée
Avatar
MichD
Utilise ceci, c'est plus simple :
Cela s'appliquera seulement à la cellule C8 de la feuille
'---------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("C8").Address Then
Application.EnableEvents = False
Target.Value = UCase(Target)
Target.Replace What:=" ", replacement:="_", lookAt:=xlPart
Application.EnableEvents = True
End If
End Sub
'---------------------------
MichD
Avatar
Alex
Merci encore pour ta réponse.
Malgré la suppression des ddddd et la modification du range que je ne fais que sur la cellule C8, cela ne fonctionne pas ? J'ai placé la mac ro sur la feuille elle meme. tout reste figer, je n'arrive plus a selection ner d'autres cellules ?
Qu'est que j'ai mal fait ?
Merci encore
Avatar
MichD
Le 03/08/20 à 09:49, Alex a écrit :
Merci encore pour ta réponse.
Malgré la suppression des ddddd et la modification du range que je ne fais que sur la cellule C8, cela ne fonctionne pas ? J'ai placé la macro sur la feuille elle meme. tout reste figer, je n'arrive plus a selectionner d'autres cellules ?
Qu'est que j'ai mal fait ?
Merci encore

OUI tu as raison, la seconde occurrence de cette ligne de code
Application.EnableEvents = False
doit être mise à True dans la procédure
Application.EnableEvents = True
Ajoute temporairement cette macro que tu exécutes une fois et tout va
revenir à la normale.
sub Test()
Application.EnableEvents = True
End Sub
MichD
Avatar
Alex
merci MichD
Avec la dernière solution proposé je n'ai plus de problème
Merci encore