Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Une macro événementielle qui boucle

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

J'ai rédigé une fonction fort simple de contrôle de saisie qui semble bien marcher quand je la met dans la feuille :

VB:
Function ControlSaisie(num As Variant) As Variant
    
If IsNumeric(num) And num > o Then
    ControlSaisie = num
ElseIf num <= 0 Or Not IsNumeric(num) Then
    ControlSaisie = "?"
End If
 
End Function

Je veux l'utiliser dans une macro événementielle (module de feuille) afin que le contrôle de saisie se fasse en temps réel :

VB:
Private Sub Worksheet_Change(ByVal target As Range)

If Not Intersect(target, [ListeChiffres]) Is Nothing Then '"ListeChiffres" : nom de la plage de cellules dans laquelle les valeurs sont entrées
    target = ControlSaisie(target)
End If

target.Select

End Sub

Et là c'est la panique quand je rentre une valeur dans la plage "ListeChiffres".

Merci d'avance pour m'expliquer ce qui ne va pas dans ma routine.
 
Re : Une macro événementielle qui boucle

Bonjour Magic_Doctor, Gilbert,

Code:
Function ControlSaisie(num As Variant) As Variant
If Val(num) > 0 Or num = "" Then
  ControlSaisie = num
Else
  ControlSaisie = "?"
End If
End Function

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, [ListeChiffres])
If Not r Is Nothing Then
  For Each r In r 'si entrées multiples (copier-coller)
    If r <> ControlSaisie(r) Then
      r = ControlSaisie(r)
      r.Select
    End If
  Next
End If
End Sub
A+
 
Re : Une macro événementielle qui boucle

Bonjour Gilbert_R GI,

Effectivement il y avait une erreur de frappe.
En revanche, pourquoi faire ce contrôle de saisie dans "Private Sub Worksheet_SelectionChange(ByVal Target As Range)" ?
Ce contrôle ne devant se réaliser qu'après avoir validé la valeur entrée dans la cellule.
Je l'ai laissé dans "Private Sub Worksheet_Change(ByVal Target As Range)", mais ça ne marche toujours pas. Ça boucle, ça calcule je ne sais quoi, pour fermer la classeur il faut passer par Ctrl + Alt + Supr... Bref grande panique pour un truc qui paraissait si simple au départ.

Ci-joint le classeur.
 

Pièces jointes

Re : Une macro événementielle qui boucle

Buenos días job,

N'ayant pas rafraîchi, je n'avais pas vu ton post.
Maintenant ça marche à un détail près : les valeurs appartenant à l'intervalle ]0 , 1[ ne sont pas acceptées. Comment y remédier dans la fonction ?
Petite question subsidiaire : comment récupère-t-on le symbole "appartient" (réminiscences des maths modernes...) ? À défaut j'ai mis le symbole de l'euro...

Merci encore pour ton efficacité.
 

Pièces jointes

Re : Une macro événementielle qui boucle

Re,

En effet c'était incomplet... Donc utilise :

Code:
Function ControlSaisie(num As Variant) As Variant
'Contrôle si la saisie est bien une valeur numérique positive
'job75
If Val(Replace(num, ",", ".")) > 0 Or num = "" Then
    ControlSaisie = num
Else
    ControlSaisie = "?"
End If
End Function
A+
 
Re : Une macro événementielle qui boucle

Re,

Une autre solution avec IIf :

Code:
Function ControlSaisie(num As Variant) As Variant
ControlSaisie = IIf(IsNumeric(num) And num > 0 Or num = "", num, "?")
End Function
A+
 
Re : Une macro événementielle qui boucle

Merci job, maintenant c'est parfait !
Mais, c'est très curieux, ta 2ème solution que j'ai adoptée (j'aime bien les "trucs" brefs) coule en fait de source et rejoint ma routine de départ, et là pas besoin de préciser que "," en langage de Molière <=> "." en langage de Shakespeare.
Ce n'est manifestement pas demain la veille que nous nous mettrons d'accord sur des choses aussi élémentaires que les syntaxes, dates, heures d'été-hiver et autres systèmes métriques. En attendant, les "caïds" qui dirigent pondent de nouvelles constitutions de plus de 1000 pages...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
32
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…