Excel macro événementielle
Résolu
alainjjb
Messages postés
788
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
A voir également:
- Excel macro événementielle
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
4 réponses
Bonjour Alain,
tu peux utiliser le test IsNumeric
Exemple :
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
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.
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
ç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).
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