[vba excel] executer une macro sur un click

executer une macro sur un click [vba excel] - VB/VBA/VBS - Programmation

Marsh Posté le 06-09-2006 à 17:20:56    

Bonjour,  
 
Super débutante en VB. J'ai développé une macro qui permet de griser les lignes de mon tableau excel si la valeur d'une cellule est égale à "NON".  
Mais je suis obligée de lancer manuellement l'éxecution de la macro pour que ça le fasse, alors que je voudrais que la macro se déclenche dès que la cellule reçoit (en création ou en modification) la valeur "NON".  
Je ne sais pas comment lier l'éxecution de la macro à un évènement, que ce soit ouverture du fichier ou modif de la cellule ou click...  
Merci d'avance pour votre aide.
 

Reply

Marsh Posté le 06-09-2006 à 17:20:56   

Reply

Marsh Posté le 06-09-2006 à 18:03:56    

Bonsoir,
tu peux mettre par exemple :
 
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$5" and target = "NON" Then  
Beep
End if
End Sub
 
Au niveau de feuill1  
$A$5 est supposé être la cellule  ou tu frappes NON
le beep correspond à l'endroit où tu peux faire quelque chose
Cordialement


Message édité par seniorpapou le 06-09-2006 à 18:07:47
Reply

Marsh Posté le 06-09-2006 à 18:08:31    

Bonjour,
Dans, l'éditeur vbe, dans l'arborescence Microsoft Excel Objets, sélectionner la feuille ou doit être active la macro par un double clic.
Dans la zone réservée au code, sélectionner dans la liste déroulant de gauche Worksheet, puis dans la liste déroulante de droite Change, cela créera la première et dernière ligne du code s'exécutant lors d'un changement dans la feuille, il faut alors y insérer le code adapté.
 
ici affichage d'une boite de message vide:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Value = "NON" Then
    MsgBox toto
End If
End Sub
 
Cordialement
Pifa

Reply

Marsh Posté le 07-09-2006 à 11:37:00    

Bonjour,  
Merci pour vos réponses.
 
J'ai fait ce que vous m'avez suggéré, en copiant le code de ma macro entre le if et le end if. Mais lorsque je veux tester, je change une valeur dans mon fichier et là, il me rebalance sur l'éditeur VB, en surlignant ma première ligne de code.  
Quand j'essaie de débugger, il m'ouvre une fenêtre de liste des macros ?!!
Je ne comprends pas...
 
A tout hasard, je vous mets le code que j'obtiens, peut-être que ça vient d'une erreur dans le code et que le debugger n'est pas explicite :
 
Private Sub Worksheet_Change(ByVal Target As Range)
If Range(Target.Address) = 4 And Target = "NON" Then
           Rows(Selection.Row).Select
            With Selection.Interior
                .ColorIndex = 15
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
            End With
Else
           Rows(Selection.Row).Select
            With Selection.Interior
                .ColorIndex = 15
                .Pattern = xlSolid
                .PatternColorIndex = xlNone
            End With
End If
End Sub
 
 
Merci d'avance

Reply

Marsh Posté le 07-09-2006 à 12:22:55    

Bonjour,  
qu'est-ce qui est "visé" par :If Range(Target.Address) = 4 ?
 
si c'est la colonne 4, mettre if target.column = 4
 
pas d'erreur de compile, le "surlignant" c'est en jaune?
si oui y a-t-il un rond marron à gauche ?
si non, y a-t-il un message d'erreur qui s'affiche avant de revenir sur VB? lequel
Cordialement


Message édité par seniorpapou le 07-09-2006 à 12:28:00
Reply

Marsh Posté le 07-09-2006 à 12:29:09    

Si j'ai bien compris ce que tu veux faire, il faut remplacer "Selection" par "Target"
 
If Range(Target.Address) = 4 And Target = "NON" Then
           Rows(Target.Row).Select
            With Selection.Interior
                .ColorIndex = 15
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
            End With
Else
           Rows(Target.Row).Select
            With Selection.Interior
                .ColorIndex = 15
                .Pattern = xlSolid
                .PatternColorIndex = xlNone
            End With
End If
 
Ensuite, effectivement, normalement Range(Target.Address) == Target lorsque tu modifies une cell. J'imagine qu'en fait, ce que tu voulais, c'étais tester si la cell contient "NON", et vérifier qu'elle se situe sur la 4eme colonne ?
 
Dans ce cas, ce serait If Target.Column = 4 And Target = "NON" Then
 
Sinon, pour le "surlignage", c'est que tu dois avoir un stop code sur la ligne (un petit disque marron à gauche de la ligne de code) dans ton éditeur VBA. Clique sur le petit disque pour supprimer le marqueur.


Message édité par agkklr le 07-09-2006 à 12:30:36

---------------
"Mon modèle, c'est moi-même."
Reply

Marsh Posté le 07-09-2006 à 12:53:47    

nb : Tel que, ton code va supprimer le grisage de la ligne à chaque fois que tu modifieras une valeur du tableau...
 
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 4) = "NON" Then
        Rows(Target.Row).Select
        With Selection.Interior
            .ColorIndex = 15
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
        End With
Else
        Rows(Target.Row).Select
        With Selection.Interior
            .ColorIndex = 15
            .Pattern = xlSolid
            .PatternColorIndex = xlNone
        End With
End If
End Sub
 
C'est bourrin, mais c'est efficace :-)


---------------
"Mon modèle, c'est moi-même."
Reply

Marsh Posté le 07-09-2006 à 14:21:19    

Merci !
Ca marche très bien. C'est parfait !
 
Merci à tous ceux qui m'ont répondu : j'ai appris plein de chose en VB aujourd'hui (je crois que j'ai quand même un peu de marge avant l'expertise ;) !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed