[vba excel] executer une macro sur un click [Fermé]

Signaler
-
ori05
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
-
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.

11 réponses


Bonjour,

En supposant que la colonne A constitue un index dans la feuille

et que la colonne B contitue la colonne avec la valeur variable à initiliser à "NON" ou a rien !

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Region As Range, Position As Long
    
    Application.ScreenUpdating = False
    
    Position = Range("A1:A65535").End(xlDown).Row
    Set Region = Application.Intersect(Range("B1:B" & Position), Target)
    
    If Region Is Nothing Then
        'MsgBox "La cible n'est pas dans la plage visé."
    Else
        If (Target.Value = "NON") Then
            Target.EntireRow.Select
            Selection.Interior.ColorIndex = 6
            'MsgBox "La cible est dans la plage visé."
            Target.Offset(1, 0).Select
        End If
    End If
    
    Application.ScreenUpdating = True
    
End Sub
'


Il vous faudra adapter !

Lupin
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 83314 internautes nous ont dit merci ce mois-ci

Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016
7 > Utilisateur anonyme
Bonjour Lupin,

J'ai un soucis sur le code que tu m'as proposé concernant ce problème:
lorsque la personne saisie quelque chose dans la colonne, un userform s'affiche pour lui demander de saisir des informations. Il saisit notamment une cellule numérique. Lorsqu'il clique sur le bouton de validation du userform, les données saisies dans le userform se copient sur le fichier excel, mais la cellule numérqiue se copie en format caractère dès qu'il y a des virgules.
En gros: je saisie un nombre numérique dans la colonne qui réceptionne l'info, le format est bien numérique.
Je saisie par le userform un nombre à virgule, il est copié en format texte dans la colonne qui réceptionne l'info.

Voici mon code lors de la saisie dans une cellule:
Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
Application.ScreenUpdating = False

Dim Region As Range, Position As Long

Dim rngCible As Range

Set rngCible = Range("F9:F200,J9:J200,N9:N200,R9:R200,V9:V200,Z9:Z200,AD9:AD200")

' Capture de l'adresse du changement
strAdresse = Target.Address

Set Region = Application.Intersect(rngCible, Target)

If Not (Region Is Nothing) Then
If Range(strAdresse).Value <> "" Then
' Effacement des variables
USF_HEURES.HEURES= 0

' Appel du formulaire
USF_HEURES.Show
Else
Range(strAdresse).Offset(0, 1).Value = ""
MsgBox ("La justification a été effacée!")
End If
End If

Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

A noter que quand on saisit un numérique avec des décimales, il faut le saisir avec une virgule, le point ne passe pas (dû à mon contrôle sur le type de données).

Derrière mon bouton de validation du userform, il y a cela:
If IsNumeric(HEURES.Value) Then
With ActiveSheet
.Range(strAdresse).Offset(0, 1).Value =HEURES.Value
End With

USF_HEURES_A_JUSTIFIER.Hide

Else
If Not IsNumeric(HEURES.Value) Then
MsgBox ("Les heures doivent être un nombre, non un caractère!")
End If
End If

End Sub


En espérant que tu pourras m'aider,
Ludivine
Utilisateur anonyme > Ludivine50
Messages postés
114
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
1 février 2016

Bonjour Ludivine,

Je suis de retour de vacances et je n'ai pas touché un clavier pour coder depuis plus
de 3 semaines. Ceci dit, je ne participe plus au forum pour des raisons personnels,
par contre je ferai une exception pour toi car tu m'as toujours démontrer que tu
appréciais mes interventions même si elles ne sont pas parfaite.

Alors quelques questions :

Je déduis que la variable [ HEURES ] est un champ sur le formulaire !

Mais quel type de champs !

S'il s'agit d'un textbox ou d'un combobox, la propriété d'affectation/lecture est [ .Text ] et non [ .Value ].

Deplus, puisque tu entrepose une valeur de type [ Heure ] dans un contrôle de type [ Text ], il faut
gérer la mise en forme lors de l'écriture et de la lecture !


ex. de lecture d'un textbox et de l'écriture sur une feuille:

Private Sub cmd_Valide_Click()

Dim Lheure As String
Dim Boite As Variant

If IsNumeric(HEURES.Text) Then
With ActiveSheet
.Range("C4").Offset(0, 1).NumberFormat = "hh:mm;@"
Boite = Split(HEURES.Text, ",")
Lheure = Boite(0) & ":" & Boite(1) & ":00"
Lheure = Format(Lheure, "h:m;@")
.Range("C4").Offset(0, 1).Value = 0
.Range("C4").Offset(0, 1).Value = Lheure
End With


Else
' Le second IF placé ici est implicite. Il n'est pas nécessaire de l'écrire.
MsgBox ("Les heures doivent être un nombre, non un caractère!")
End If

End Sub

Michel
ori05
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
3 > Utilisateur anonyme
Bonjour, je me permets d'intervenir dans cette discussion, car j'ai un petit soucis concernant à peu près le même sujet : j'ai le code suivant

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If (ActiveCell.Value = "NOK") Then
MsgBox "Add a comment"
End If
End Sub

Mon problème est que la valeur NOK est disponible dans un menu déroulant(donées->validation->liste) OK/NOK.
Du coup quand la personne choisit NOK dans la liste le message ne s'affiche pas. Il ne s'affiche que si on clique n'importe où dans le classeur et qu'ensuite on reclique sur cette cellule.

Je cherche une solution qui me permettrait d'avoir directement le message...

Merci beaucoup !
gbinforme
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
3 809 > ori05
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009

bonjour

Pourquoi tu n'utilises pas plutôt, car c'est au moment où la cellule est modifiée que c'est utile, non ?
Private Sub Worksheet_Change(ByVal Target As Range)
If (Target.Value = "NOK") Then
ori05
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
3 > gbinforme
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018

Effectivement c'était bien Worksheet_change et non Worksheet_selectionchange qu'il fallait que j'utilise !
merci beaucoup je cherchais mille et une facon et évidemment je n'ai pas pensé à ça !!
encore merci !!!
Messages postés
30
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
14 février 2008
9
Tu peux aussi y aller avec la fonction de format conditionnel dans l'onglet format de Excel.
tu met la condition = "<>" et tu choisis une couleur pour cette condition.
Messages postés
392
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
5 septembre 2009
49
Salut psycho,

je suis tjrs sur ton fichier...
psychoman
Messages postés
30
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
14 février 2008
9
GOOD,
je t'enverrai ce que j'ai fait, ca marche mais je remplis des petites subtilités : si on change le nom du fichier, le path .... pour que ca marche plus tard encore...

thanks.
Vince.
ShaBoo
Messages postés
392
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
5 septembre 2009
49 > psychoman
Messages postés
30
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
14 février 2008

wow ... lol

je vais etre dépasser par ce que tu veux ;p
ShaBoo
Messages postés
392
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
5 septembre 2009
49 > psychoman
Messages postés
30
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
14 février 2008

donne moi une adresse mail, pour que je t'envoie ce que je fais
psychoman
Messages postés
30
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
14 février 2008
9 > ShaBoo
Messages postés
392
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
5 septembre 2009

voila :

psychoman4us@hotmail.com

a+
Messages postés
15079
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
23 juin 2018
3 809
bonjour

Dans Worksheet tu crées :
Private Sub Worksheet_SelectionChange(ByVal sel As Range)

End Sub


et tu intégres ta fonction.

l'adresse de sel donne le range de la cellule modifiée (sel.address)


si tu as besoin de compléments complète la question.
Bonjour !

Merci pour ta réponse.
Mais j'ai oublié de préciser que la cellule à tester n'est pas fixe : c'est une cellule par ligne dont la valeur conditionne le changement de couleur de cette même ligne.

Comment, au lieu de faire un test sur l'adresse de la cellule (sel.adress), faire un test sur sa colonne ?

Merci
j'ai trouvé (enfin, on m'a aidé... !)

Merci pour ton aide

A+
Wilmath
Salut Wilmath
Pourrais s'il te plait me donner la solution je cherche à faire la même chose.
Merci d'avance
Biloue
bonjour,
ta question correspond exactement à mon problème. J'ai fais la création de la macro.
mais je n'en sais pas plus .
je voudrais qu'elle s'éxécute (pour griser et mettre en forme des cellules) suivant l'information contenue dans une colonne, sur une ligne à priori inconnue (elle peut varier)

merci pour ton aide: je suis coincé par ça.
Bonjour, a tous je ne comprend pas pour quoi mon code ci-dessous ne fonctionne pas ou ci que l'envois du mail pas le déclenchement à heure fixe. J'ai tout essayé en ouvrant excel et en le fermer mais c'est mieux ci il est fermé.
merci pour votre aide....

Sub SendPlng()
' lance la macro SendParMail à 09:00:00 heures
Application.OnTime TimeValue("15:51:00"), ("SendParMail"), True
End Sub

Sub SendParMail()
'cette macro envois par mail la feuille excel active
ThisWorkbook.Sheets("Fev").Copy
ActiveWorkbook.SendMail ("dardeviIIe.msn.com@free.fr")
ActiveSheet.Copy
End Sub
bonjour,
puis-je avoir les details de cette fonction pour griser les lignes d'un tableau?
& merci d'avance
Messages postés
30
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
14 février 2008
9
merci