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

Le
Alex
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 s=
uite à tabulation pour changer de cellule, que la saisie effectué=
e soit en mis en MAJUSCULE et que les espaces éventuelles soit remplac=
er 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
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
MichD
Le #26552492
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
MichD
Le #26552494
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
Alex
Le #26552493
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
MichD
Le #26552500
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
Alex
Le #26552499
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
MichD
Le #26552498
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
Alex
Le #26552497
merci MichD
Avec la dernière solution proposé je n'ai plus de problème
Merci encore
Poster une réponse
Anonyme