Changer la valeur d'une touche

Résolu
Signaler
Messages postés
131
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
17 mars 2010
-
Messages postés
131
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
17 mars 2010
-
Bonjour à tous,
Sur un classeur Excel je voudrais savoir s'il est possible de changer la valeur d'une touche.
En fait je ne veux pas avoir le caractère "*" et je voudrai que lorsqu'on appui sur cette touche ça mette automatiquement "x".
C'est possible ?

Nanardino64
Développons-nous, développeurs.

8 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bonjour,

Si tu entends par là : au moment de la saisie dans une cellule : non car il n'existe pas d'évènement déclenché à ce moment-là
Tu peux par contre modifier les "*" en "x" lorsque, abandonnant ta cellule, tu passes à une cellule suivante.

Genre :
Private toto As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Not toto Is Nothing Then
   toto.Value = Replace(toto.Value, "*", "x")
 End If
 Set toto = Target
End Sub

A toi de comprendre et de t'inspirer de cet exemple.
Tu peux par exemple l'assortir de conditions (si target ....) pour limiter aux cellules d'une plage de ton choix (en te rappelant que Target est dotée des propriétés Row et Colonne
Je pense que mes explications devraient te suffire



____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Ouaip ....

LOe problème (dans le code que je t'ai montré) vient de ce que dans le code que je t'ai montré, Ce rigolo d'Excel déclenche l'évènement Change de la feuille si l'on Change toto !
Ilo va donc falloir procéder autrement (ne pas déclarer toto comme plage, mais comme string).

Regarde ce que fait ceci (ce n'est qu'u n début pas totalement parfait, mais on m'attebnd ailleurs) :

Private toto As String, couic As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
 If toto = "" Then MsgBox "coucou"
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If toto <> "" Then
   If Not couic Then
      Range(toto).Value Replace(Range(toto).Value, "*", "x"):  toto "": couic = True ': Exit Sub
   End If
   DoEvents
 Else
   If Not InStr(Target.Value, "*") Then couic False: toto Target.Address: Exit Sub
 End If
End Sub


commence à réfléchir avec ... et à plus pour le perfectionnement nécessaire...

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
131
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
17 mars 2010

Ok,
9a ne peut pas marcher vu que j'ai déjà une macro sur le Worksheet_change du coup le replace réactive cette macro donc boucle...
Je vais trouver une solution et je te remercie pour ton aide!


Nanardino64
Développons-nous, développeurs.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Utilise alors une booléenne additionnelle !
Montre-nous ton code sur l'évènement dont il s'agit et tu vas voir comme la chose est facile ...

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
131
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
17 mars 2010

Ouais je sais je suis en train de faire une booléenne Debouclage que je vais changer avant de modifier ma chaine de texte.
Ce qui m'arrangerai c'est de trouver une macro pour trouver le caractère "*" dans la chaine (dans un premier temps) sans avoir à parcourir tous les caractères...
Mais je pense pas que ça existe...


Nanardino64
Développons-nous, développeurs.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
L'utilisation de la fonction Instr te le permet .
L'utilisation de l'opérateur Like également !
Mais la Fonction Replace ne te va pas ? Pourquoi ? ===>> explications détaillées nécessaires si tu veux une réponse adaptée !


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
131
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
17 mars 2010

Sisi mais je suis obligé d'utiliser replace après une condition (qui est si la cellule contient "*") comme ça si cette condition est vérifier je passe mon booléen Déboucleur =true et j'utilise replace (pour remplacer par "x"). Donc ma macro worksheet_change se relance (donc elle est active deux fois) la denière relance se termine instantanément avec un If Déboucleur=true then exit sub et je fini ma macro en mettant à la fin un Deboucleur=false et ça marche.

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Dim KeyCells As Range
Dim Formule_Prix As String
Dim Deboucleur As Boolean

If Deboucleur = True Then Exit Sub

Set KeyCells = Range("A29:A70")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
Lig = Target.Row
Col = Target.Column


If InStr(1, Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Cells(Lig, Col).Text, "*") <> 0 Then
Deboucleur = True
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Cells(Lig, Col).Value = Replace(Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Cells(Lig, Col).Text, "*", "x")
End If

If Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Cells(Lig, Col).Text "" Or Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Cells(Lig, Col + 3).Text "" Then
Range("D85:F85").Select
Selection.Copy
Range("d" & Target.Row & ":f" & Target.Row).PasteSpecial Paste:=xlPasteFormulas
Range("d" & Target.Row & ":f" & Target.Row).Interior.ColorIndex = 2
End If
If Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("m" & Target.Row & ":o" & Target.Row).Text = "Total affaire" Then GoTo Sortie:
For A = 3 To 3000
If Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range(Target.Address).Text = Workbooks(Classeur_Commande).Sheets(Profil).Cells(A, 1).Text Then
If Workbooks(Classeur_Commande).Sheets(Profil).Cells(A, 8) <> "" Then
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("b" & Target.Row & ":d" & Target.Row).NumberFormat = "General"" €/T"""
If Workbooks(Classeur_Commande).Sheets(Profil).Cells(A, 8).Text = "/" Then
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("b" & Target.Row & ":d" & Target.Row).Value = ""
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("b" & Target.Row & ":d" & Target.Row).Font.Bold = True
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("b" & Target.Row & ":d" & Target.Row).Interior.ColorIndex = 3
End If
Exit Sub
End If
If Workbooks(Classeur_Commande).Sheets(Profil).Cells(A, 9) <> "" Then
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("b" & Target.Row & ":d" & Target.Row).NumberFormat = "General"" €/m"""
If Workbooks(Classeur_Commande).Sheets(Profil).Cells(A, 9).Text = "/" Then
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("b" & Target.Row & ":d" & Target.Row).Value = ""
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("b" & Target.Row & ":d" & Target.Row).Font.Bold = True
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("b" & Target.Row & ":d" & Target.Row).Interior.ColorIndex = 3
End If
Exit Sub
End If
If Workbooks(Classeur_Commande).Sheets(Profil).Cells(A, 10) <> "" Then
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("b" & Target.Row & ":d" & Target.Row).NumberFormat = "General"" €/Unité"""
If Workbooks(Classeur_Commande).Sheets(Profil).Cells(A, 10).Text = "/" Then
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("b" & Target.Row & ":d" & Target.Row).Value = ""
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("b" & Target.Row & ":d" & Target.Row).Font.Bold = True
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("b" & Target.Row & ":d" & Target.Row).Interior.ColorIndex = 3
End If
Exit Sub
End If
End If
Next A
End If
Sortie:
Dim Cellule_Verouille As Range
Set Cellule_Verouille = Range("A9:Z10")
If Not Application.Intersect(Cellule_Verouille, Range(Target.Address)) Is Nothing Then
For G = 29 To 70
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("D" & G).Value = ""
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("S" & G).Value = ""
Workbooks(Classeur_Commande).Sheets(Nouvelle_Commande).Range("W" & G).Value = ""
Next G
End If
Application.ScreenUpdating = True
Deboucleur = False
End Sub

Nanardino64
Développons-nous, développeurs.
Messages postés
131
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
17 mars 2010

Ben c'est ce que j'ai fait oui et ça marche bien


Nanardino64
Développons-nous, développeurs.