Lancer une macro sous EXCEL lorsqu'une condit

Fermé
Bof - 8 avril 2008 à 13:48
LePierre Messages postés 249 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 2 août 2012 - 8 avril 2008 à 16:10
Bonjour,

Je cherche à lancer une macro lorsqu'une condition est remplie: exemple si la valeur d'une cellule=la valeur d'une autre cellule.

Merci d'avance de votre aide
A voir également:

3 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
8 avril 2008 à 14:21
Bonjour,
Si G13=G14 appel la fonction NomFonctionMacro si la fonction renvoi un paramètre l'inscrit dans la cellule mais pas obligatoire.

=SI(G13=G14;NomFonctionMacro();0)

Edit: mais c'est la solution à mettre dans une cellule.
Autre solution si pas dans cellule..

Private Sub Worksheet_Calculate()
    If Range("G13") = Range("G14") then
        call NomFonctionMacro()
    end if
End Sub



A+
0
LePierre Messages postés 249 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 2 août 2012 338
8 avril 2008 à 14:28
bonjour

tu pourrais essayer ceci dans le code d'une feuille (Feuil1 par exemple) :
Public InfoTest As Integer

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    x = Cells(6, 2).Value
    y = Cells(6, 5).Value
    If x <> y Then
        InfoTest = 0
        Exit Sub
    End If
    If InfoTest = 1 Then Exit Sub
    InfoTest = 1
    Call test
End Sub


Sub test()
    MsgBox ("Test lancement d'une procédure")
End Sub

si les contenus de B6 et E6 dans Feuil1 sont égaux --> alors lancement de la procédure "test".
La variable InfoTest est indispensable pour éviter le lancement de la procédure "test" à chaque click lorsque les contenus sont égaux.
à plus
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
8 avril 2008 à 14:37
Bonjour LePierre
l'ennui avec la sub SelectionChange c'est que la fonction est appellée à chaque fois que l'ont change de cellule, l'avantage avec calculate c'est qu'elle n'est appellée que si une cellule est modifiée.
A+
0
LePierre Messages postés 249 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 2 août 2012 338 > lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020
8 avril 2008 à 14:53
tu as raison mais seulement dans le cas où quelque chose est à calculer faisant référence aux 2 cellules concernées
Si ces cellules à tester n'on pas de liens de calculs alors ça ne fonctionne pas.
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191 > LePierre Messages postés 249 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 2 août 2012
8 avril 2008 à 15:07
Désolé de te contredire, mais dés que le contenu d'une cellule (quel qu'elle soit) est modifiée la fonction calculate est appellée. (Pour autant que la propriété Calculate soit mise en auto).
Aucune "Liaison" requise, je ne vois d'ailleur pas ce que tu veux dire par liaison, toutes les cellule d'une feuille sont "liées".
A+
0
LePierre Messages postés 249 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 2 août 2012 338 > lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020
8 avril 2008 à 16:10
bonjour Lermite
voici mon fichier de test pour t'expliquer le problème :
https://www.cjoint.com/?eiqceSiHfd
tu pourras constater dans la feuil2 que mettre des valeurs identiques dans les cellules jaunes ne provoque pas le lancement de la macro alors que sur la Feuil2(2) ça fonctionne car les cellules jaunes sont "liées" par un calcul.
sur Feuil1 ça fonctionne toujours
à plus
0
Mike-31 Messages postés 18384 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 9 avril 2025 5 127
8 avril 2008 à 14:48
Salut,
pour coller ce code lancer visual basic editor, double clic sur la feuille qui doit réagir à ce code et coller ce code.

dans cet exemple, dès que B10 = A41, en A2 est collé la fonction maintenant().
reste à coller tes codes dans l'espace vide, modifier B10 et A41 et effacer Range("A2").Select ActiveCell.FormulaR1C1 = "=NOW()"

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("B10") = Range("A41") Then




Range("A2").Select
ActiveCell.FormulaR1C1 = "=NOW()"
Exit Sub
End If
End Sub

A+
_____________________________________________________________
Vous cherchiez de l’aide. Les membres du forum, bénévolement étaient à vos côtés.
Ayez la gentillesse de nous dire si votre problème est résolu. Afin de classer la
Demande.
0