Excel macro événementielle

Résolu/Fermé
alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024 - 30 juin 2008 à 09:48
 johmayss - 22 oct. 2009 à 15:30
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
A voir également:

4 réponses

Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
30 juin 2008 à 09:58
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
1
alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024 110
30 juin 2008 à 10:22
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
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
30 juin 2008 à 10:52
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
0
alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024 110
30 juin 2008 à 11:04
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
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
30 juin 2008 à 11:09
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).
0
alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024 110
30 juin 2008 à 11:19
La fonction "liaison" de la liste "d'édition" n'est pas disponible. Je me sens dépérir à vue d'oeil. Je crois que ça y est. Excel m'a eu. Adieu à tous.

Je rigole car l'homme à des ressources. Avec votre aide je l'aurai.

Alain
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
30 juin 2008 à 11:44
Désolé. Je te suggère de poster une nouvelle demande.
I.
0
alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024 110
30 juin 2008 à 11:48
Merci quand même Ivan-hoe
... et probablement à bientôt
Alain
0
johmayss > alainjjb Messages postés 771 Date d'inscription jeudi 17 mai 2007 Statut Membre Dernière intervention 5 février 2024
22 oct. 2009 à 15:30
Bonjour,


j'ai pas comuoi sert le 64 ' dans la macro ci-dessu.

Je dois rendre un des chiffres négatifs lorsque dans une colonne on retrouve le texte 'Risk" et rien faire si on rencontre' Opportunity".

Pouvez vous m'aider?

Merci d'avance
0