Verification et transformation de la saisie apres validation d'un cellule
7 réponses
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
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
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
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
'--------------------------------------
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
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
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"
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
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
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 :
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
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
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
'---------------------------
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
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
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
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 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
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
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
merci MichD Avec la dernière solution proposé je n'ai plus de problème Merci encore
merci MichD
Avec la dernière solution proposé je n'ai plus de problème
Merci encore