Excel macro événementielle
Résolu
alainjjb
Messages postés
747
Date d'inscription
Statut
Membre
Dernière intervention
-
johmayss -
johmayss -
Bonjour,
je viens de mettre dans mon classeur une macro événementielle permettant de passer le montant saisi en colonne "M" en négatif si la valeur de la colonne "F" est "Dépense". Tout fonctionne très bien lorsque la donnée saisie dans "M" est numérique. Dans le cas contraire la macro se plante. Pourriez-vous m'aider à insérer dans cette macro un test de numéricité de l'info saisie en "M" avec envoi d'un message si non numérique ?
Merci d'avance
Alain
La macro :
Private Sub Worksheet_Change(ByVal sel As Range)
Dim colm As Integer ' colonne montant
Dim colt As Integer ' colonne type
colm = Asc("M") - 64 ' colonne montant
colt = Asc("F") - 64 ' colonne type
If sel.Column = colm And Cells(sel.Row, colt) = "Dépense" Then
Application.EnableEvents = False
sel.Value = sel.Value * -1
Application.EnableEvents = True
End If
End Sub
je viens de mettre dans mon classeur une macro événementielle permettant de passer le montant saisi en colonne "M" en négatif si la valeur de la colonne "F" est "Dépense". Tout fonctionne très bien lorsque la donnée saisie dans "M" est numérique. Dans le cas contraire la macro se plante. Pourriez-vous m'aider à insérer dans cette macro un test de numéricité de l'info saisie en "M" avec envoi d'un message si non numérique ?
Merci d'avance
Alain
La macro :
Private Sub Worksheet_Change(ByVal sel As Range)
Dim colm As Integer ' colonne montant
Dim colt As Integer ' colonne type
colm = Asc("M") - 64 ' colonne montant
colt = Asc("F") - 64 ' colonne type
If sel.Column = colm And Cells(sel.Row, colt) = "Dépense" Then
Application.EnableEvents = False
sel.Value = sel.Value * -1
Application.EnableEvents = True
End If
End Sub
Configuration: Windows XP Firefox 2.0.0.14
4 réponses
-
Bonjour Alain,
tu peux utiliser le test IsNumeric
Exemple :If Not IsNumeric(sel.Value) Then MsgBox "Message": sel.Select Else sel.Value = sel.Value * -1 End If-
Bonjour Ivan-hoe,
je viens de suivre ton conseil et ça a l'air de bien fonctionner. Je te transmets ce que j'ai fait pour être sur car les IF imbriqués sont encore, pour moi assez périlleux.
Je me demande si ce n'est pas toi qui m'avait envoyé cette macro.
MERCI beaucoup
Alain
Private Sub Worksheet_Change(ByVal sel As Range)
Dim colm As Integer ' colonne montant
Dim colt As Integer ' colonne type
colm = Asc("M") - 64 ' colonne montant
colt = Asc("F") - 64 ' colonne type
If sel.Column = colm And Cells(sel.Row, colt) = "Dépense" Then
Application.EnableEvents = False
If Not IsNumeric(sel.Value) Then
MsgBox "Montant non numérique": sel.Select
Else
sel.Value = sel.Value * -1
End If
Application.EnableEvents = True
End If
End Sub
-
-
Pour rendre moins périlleuses les imbrications de If, de boucles, etc., utilise les retraits pour bien aligner les instructions de même niveau. Tu vois dans ton exemple ci-dessous que tout est correct.
I.Private Sub Worksheet_Change(ByVal sel As Range) Dim colm As Integer ' colonne montant Dim colt As Integer ' colonne type colm = Asc("M") - 64 ' colonne montant colt = Asc("F") - 64 ' colonne type If sel.Column = colm And Cells(sel.Row, colt) = "Dépense" Then Application.EnableEvents = False If Not IsNumeric(sel.Value) Then MsgBox "Montant non numérique": sel.Select Else sel.Value = sel.Value * -1 End If Application.EnableEvents = True End If End Sub-
Merci Ivan-hoe,
ça marche super mais Excel va me faire craquer. J'ai créer une barre d'outils personnalisée avec 3 boutons associés à 3 macros. Ca marche.
MAIS lorsque je crée un second classeur à partir du 1er les boutons sont toujours liés aux macros du 1er. Je n'en peux plus. Que faut-il faire pour que second classeur fonctionne indépendemment du 1er ?
Merci encore
PS. Je peux joindre le classeur si nécessaire
Alain
-
-
dans ton second classeur, essaie Edition/Liaisons/ modifier les liaisons (puis sélectionner le classeur en cours, afin que la liaison se fasse sur le classeur-même).
-
Désolé. Je te suggère de poster une nouvelle demande.
I.