[vba excel] executer une macro sur un click
Fermé
wilmath
-
6 sept. 2006 à 16:29
ori05 Messages postés 56 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 7 septembre 2009 - 26 août 2009 à 10:40
ori05 Messages postés 56 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 7 septembre 2009 - 26 août 2009 à 10:40
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.
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.
A voir également:
- [vba excel] executer une macro sur un click
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Calculer une moyenne sur excel - Guide
- Déplacer une colonne excel - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
11 réponses
Utilisateur anonyme
9 déc. 2006 à 00:33
9 déc. 2006 à 00:33
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 !
Il vous faudra adapter !
Lupin
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
psychoman
Messages postés
30
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
14 février 2008
9
25 oct. 2007 à 19:29
25 oct. 2007 à 19:29
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.
tu met la condition = "<>" et tu choisis une couleur pour cette condition.
ShaBoo
Messages postés
392
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
5 septembre 2009
50
25 oct. 2007 à 20:46
25 oct. 2007 à 20:46
Salut psycho,
je suis tjrs sur ton fichier...
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
25 oct. 2007 à 21:30
25 oct. 2007 à 21:30
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.
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
50
>
psychoman
Messages postés
30
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
14 février 2008
25 oct. 2007 à 22:12
25 oct. 2007 à 22:12
wow ... lol
je vais etre dépasser par ce que tu veux ;p
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
50
>
psychoman
Messages postés
30
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
14 février 2008
25 oct. 2007 à 22:15
25 oct. 2007 à 22:15
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
25 oct. 2007 à 23:17
25 oct. 2007 à 23:17
voila :
psychoman4us@hotmail.com
a+
psychoman4us@hotmail.com
a+
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 716
7 sept. 2006 à 08:57
7 sept. 2006 à 08:57
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre 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
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
Salut Wilmath
Pourrais s'il te plait me donner la solution je cherche à faire la même chose.
Merci d'avance
Biloue
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.
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
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
puis-je avoir les details de cette fonction pour griser les lignes d'un tableau?
& merci d'avance
psychoman
Messages postés
30
Date d'inscription
mercredi 17 octobre 2007
Statut
Membre
Dernière intervention
14 février 2008
9
8 janv. 2008 à 17:12
8 janv. 2008 à 17:12
merci
4 mars 2009 à 18:35
je m'inspire de ton code pour une de mes applications.
Mais le problème, c'est que cela fonctionne quand on quitte une cellule de la colonne B, et pas sans partir de la cellule.
Pour être plus claire, dans mon cas, je voudrais que quand le user écrit quelquechose en colonne B, un userform s'affiche avec une zone de texte. Il complète la zone de texte qui doit agrémenter la colonne C, soit un ActiveCell.Offset(0,1).Select.
Mais si par exemple il saisie en cellule B2, si en quittant la cellule, il utilise la flèche du haut, il est en B1, le userform s'affiche, il saisie son blabla, ActiveCell.Offset(0,1) --> le texte s'affiche en C1, alors que je le voulais en C2. S'il quitte la cellule B2 en utilisant la flèche du bas, après userform, le texte va arriver en C3...
Or je ne peux pas dans mon code VB lui dire "va dans C2", car ce code doit fonctionner pour toute la colonne B (et accesoirement pour les colonnes E, H...).
Alors je me suis dit que j'allais faire une recherche dans la colonne C, et que s'il y avait un nombre dans la colonne B et rien sur la même ligne dans la colonne C, alors c'est ici que le texte doit aller (car je vais interdire une saisie dans B sans blabla dans la colonne C). Ben oui, mais s'il utilise les flèches de gauche ou de droite quand il quitte B2, comment va-t-il deviner dans quelle colonne chercher?
Bref, y-a-t-il une solution? Ai-je un esprit trop tordu?
Merci
5 mars 2009 à 13:57
Alors voici une solution possible :
Dans un module standard, il te faut déclarer un variable globale
à ton projet de cette façon :
voici le code de détection du changement, légèrement modifié :
et le code qui devra être placé derrière un bouton de validation
de ton [ UserForm ]
Voilà, j'espère avoir bien compris ton dilème !
Lupin
5 mars 2009 à 17:58
5 mars 2009 à 19:02
Il te faudra faire attention ici, car les évènements sont désactivés par la ligne :
Application.EnableEvents = False
Si la routine ne s'exécute pas jusqu'a la fin -> Application.EnableEvents = True
Il n'y auras plus d'évènement [ Worksheet_Change ]
Dans un module standard, place cette routine :
Sub ActiveEvenement()
Application.EnableEvents = True
End Sub
Tu pourras ainsi réactiver les évènements du classeur.
De plus cette routine s'accroche sur la colonne A pour déterminer
la plage à surveiller en colonne B, avais-tu compris cette approche ?
Connais tu les points d'arrêts ?, le mode "pas à pas" ?
Lupin
5 mars 2009 à 20:11
C'était effectivement le fait qu'après un premier plantage, il était resté en
Application.EnableEvents = False.
Je voulais justement te demander par la suite que voulait dire cette commande, ben du coup, c'est déjà fait ;-)
Et à propos, en me renseignant, j'ai découvert que Application.ScreenUpdating = False permet une exécution plus rapide... Dans un fichier j'avais une macro qui durait 20 secondes (pour 100 lignes!), et après ajout de ce code, ben ça dure 0,002 secondes!!!! Lupin, je t'adore!!!!!!!!!
Concernant la notion d'index, j'ai compris que s'il y a quelquechose dans la colonne A et quelquechose dans la colonne B, alors il doit afficher mon userform, ce qui évite qu'il mouline à chercher dans toute la feuille. Dans mon cas, je n'aurais pas vraiment ce fonctionnement, car le nombre de ligne n'est pas infini. Je lui demanderais probablement d'arrêter le traitement à une ligne précise. Mais j'hésite, pourquoi pas une colonne genre index. Il devra chercher dans la ligne 10, puis 11, puis 13, 14, 16, 19..... Mais bon, est-ce plus long de chercher dans 50 lignes, que dans 20 lignes? Je ne pense pas (surtout depuis que j'ai découvert Application.ScreenUpdating = False).
Pour les points d'arrêts et le mode pas à pas, je viens de me renseigner sur ces forums (et je suis tombée sur un de tes messages ;-) ). Je ne m'étais jamais renseignée du pourquoi il y a des gros points marrons quand je clique sur la gauche! !-))))) Excellente découverte! Je vais m'en servir!
Bref, je vais m'endormir moins bête ce soir! (et c'est toujours cela de gagné)
Bonne soirée SUPERLupin, merci pour tout!