Lancer une macro sans bouton

Résolu
Bonsoir
Je cherche désepérement une solution pour lancer une macro sur Excel à partir du remplissage d'une cellule.
C.a.d que la macro s'exècute dés que la cellule reçoit la valeur condition, sans passer par un bouton ou une option clavier.
Est ce possible.
Merci d'avance à mon (ou mes)sauveur (veuse)
Bien cordialement
--
Science sans conscience n'est que ruine de l'Ame

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonsoir,

    Ce n'est pas une macro qu'il faut que tu utilises, mais la fonction "recherchev" ou la mise en forme conditionnelle.

    La recherchev, sers à ce que quand tu rentres une donnée, excel rempli automatiquement d'autre cellule. Du genre, tu rentres un code, et automatiquement excel rempli que c'est un "pantalon marron" dans la cellule d'à coté et son prix dans la cellule d'après.

    La mise en forme conditionnelle te permets de mettre par exemple toutes les cellules d'un tableau dont le chiffre est inférieur à 2 en gras ou en rouge...

    La recherchev est un peu compliqué à t'expliquer comme ça, mais la mise en forme conditionnelle est simple : tu fais "format" "mise en forme conditionnelle" "la valeur de la cellule est" tu choisis quoi (égale, inférieur ou égale à ...) dans la troisière colonne, tu saisis le nombre ou tu sélectionne la cellule et enfin tu choisis ce qui doit se passer dans ce cas en cliquant sur "format" (le "format de la boite de dialogue biensur).

    Et le tour est joué !
    1. Modérateur
      Bonsoir,

      Oui, ça s'appelle des macros événementielles.
      Je te conseille de télécharger le classeur jb-worksheetchange de Jacques Boisgontier sur le site d'Excelabo :
      http://www.excelabo.net/moteurs/download.php?pge=1&auteur=&tous=&deb=&tri=&rubrique=macros

      Tu vas trouver plein d'exemples et tu vas apprendre plein de choses.
      1. Contributeur
        Bonsoir,

        il faut utiliser l'evenement change de ta feuille(worksheet) :

        Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, [A1:C3]) Is Nothing Then
        'rien faire
        Else 'c'est la bonne cellule
        'et tu peux rajouter un test sur le contenu
        If Target.Value = 5 Then
        MsgBox ("yesss!!!!")
        Else
        MsgBox ("ah ben non, il fallait saisir 5")
        End If
        End If
        End Sub

        et si plusieurs zones doivent etre testées tu remplaces [A1:C3] par union([A1:C3], [D:D], [8:8]) (zone+colonne+ligne+...)

        eric
        1. Contributeur
          Merci beaucoup Popie, je connais la fonction,mais ce n'est pas ce que je cherche. Ce que je souhaite, ce n'est pas trouver la valeur d'une cellule dans une liste, mais d'engager une action quelconque à parir du moment ou une cellule identifiée prend une certaine valeur.
          Merci quand même,c'est toujors agréable de trouver des gens qui tentent de réosudre vos problèmes.
          Bien cordialement
          1. Contributeur
            J'essaie cela dans les jours qui viennet et je vous réponds sur le sujet Eriiic, ça me semble convenir.A vérifier, merci beaucoup.
            Bien cordialement
            1. Contributeur
              J'ai fait un tour dans le site M@rina, et je vais peut être y trouver mon bonheur, dans des configurations qui se rapprochent de ce que m'a répondu Eriiic.
              Décidemment, on avance beaucoup avec des gens comme vous.*Merci encore.
              Cordia
              lement
              1. Contributeur
                Bonjour
                ci après code à, placer dans le code de la feuille où se trouve la cellule , à ajuster
                Ce code lance la macro si la cellule C21 est modifiée, dès l'action sur la touche "entrée"

                Private Sub Worksheet_Change(ByVal Target As Range)
                If Intersect(Target, [C21]) Is Nothing Then Exit Sub

                Ici,écrire ou lancer macro

                End Sub

                en variante s'il est nécessaire de remplir plusieurs cellules pour lancer le code, modifier la ligne:

                If Intersect(Target, Union([C21], [C23], Range("A3:A20"))) Is Nothing Then Exit Sub

                Pour rendre à César ce qui est à Eriiic, c'est de lui que je détiens ce code qui fonctionne, je l'ai testé dans un fichier il y a quelques jours.

                Pour info si nécessaire _bien que je ne crois pas:
                code à entrer dans le code feuille, soit clic droit sur nom de la feuille et "Visualiser le code", inscrire dans l'affichage VBA correspondant.

                Crdlmnt

                1. Modérateur
                  Hello Vaucluse ! presque trois ans après ?!! ;))) ça a dû drôlement mouliner !!! :D

                  m@rina
                2. Contributeur
                  Salut tout le monde ,

                  Ben oui, qu'est-ce qu'il nous fait vaucluse ?
                  En plus, 3 ans plus tard, il se répond à lui même :-)
                  Vaucluse va falloir l'allonger un peu plus l'anisette, le soleil commence à revenir ;-)
                  Bonne journée
                  eric
                3. Contributeur
                  Salut Eriiic, salut M@rina

                  hé bééé, hips, oui...., c'est plus de l'anisette là, c'est carrément l'absinthe!!!!(voire pire)
                  Mais il y a quand même une autre explication, un peu plus rationnelle qu'un coma éthylique dépassé...!
                  en fait, je répondais à un message privé qui était tombé dans ma boite ce matin et je me suis un tout petit peu trompé de fil, à cause d'un lien qui trainait que je n'ai pas identifié!
                  J'en suis donc quitte pour une tournée à boire à ma santé (il y en a bien besoin), et surtout pour une grande poignée de main à Eriiic et une grosse bise à Ma Rina, (que je m'approprie pour la circonstance, na!.. Marie....)

                  Bien amicalement
              2. Modérateur
                Bon d'accord, j'arrive !!! ;) c'est où ?... au vieux Port ? ;))

                m@rina
                1. Contributeur
                  Non M@rina.. au vieux porc non plus!
                  Bise