EXCEL : Réactualiser une macro

bonjour

voila je viens de créer une macro que j'execute dans une cellule

cette macro utilise des valeurs d'autres cellules

j'aimerai savoir comment faire pour que quand je change une valeur la macro se ré-execute automatiquement

merci pour vos reponses

15 réponses

  1. Bonsoir,

    je ne comprends pas bien la phrase "une macro que j'execute dans une cellule":

    1) ta macro, c'est une fonction qui utilise les valeurs de certaines cellules?
    si c'est le cas, lorsque tu changes une de ces valeurs, il y a recalcul automatique , non?

    2) lances-tu ta macro manuellement et tu souhaites qu'elle se lance automatiquement lorsque une des cellules qui participent à la macro sont modifiées?
    dans ce cas, mets du code derrière ta feuille de calcul du genre :
    ------------------------
    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Call E1_22
    Application.EnableEvents = True
    End Sub
    ------------------------
    Sub E1_22()
    Range("E1").Value = Now
    End Sub

    ------------------------

    3) si c'est un autre cas, dis en plus

    cordialement
    1. Contributeur
      prenons un exemple

      dans a1 et b1 j'ai des valeurs qui entre en compte dans une macro que j'execute en e1

      cette macro en fait c'est une rechercheV

      une fois la macro executer j'obtient en e1 la formule =rechercheV(...

      cette macro se repete sur plusieurs lignes

      si par exemple je change la valeur dans a1, e1 dois se mettre a jour directement mais pareil pour e10 si je modifie a10
      1. Bonjour,

        je ne comprends toujours pas ce que tu veux dire par "executer une macro dans une cellule"
        je vois bien le recherchev qui pour moi est une fonction d'excel, pas une macro.

        peux-tu me faire un copier coller de ta macro et du contenu de ta cellule E1?

        A+
        1. Contributeur
          voila la macro

          Sub recherche()
          Dim var1, var2, var3, var4

          If ActiveCell.Offset(0, -15).Text = "j" Then
          var3 = "javelot"
          Else
          var3 = "poids"
          End If

          If ActiveCell.Offset(0, -17).Text = "g" Then
          var4 = 3
          Else
          var4 = 2
          End If

          ActiveCell.FormulaR1C1 = _
          "=VLOOKUP(RC[-1]," + CStr(var3) + "," + CStr(var4) + ",true)"

          End Sub

          contenu de la cellule R5 (c pas E1)

          =RECHERCHEV(Q5;poids;2;VRAI)

          en a5 j'ai soit la valeur f ou g
          en c5 j'ai soit j ou p

          si c5= j je cherche dans le tableau javelot si c5=p je cherche dans poids

          si a5= f je cherche dans la colonne 2 si a5= g je cherche ds colonne 3

          ds mon cas a5=f c5=p donc ma fonction c'est

          =RECHERCHEV(Q5;poids;2;VRAI)

          et en fait ce que j'ai fais en r5 j'ai selectionner la cellule , j'ai fais alt+f8 et j'ai executer ma macro
          1. hello,

            ça y est, je commence à comprendre!

            essaie de mettre le code suivant derrière la feuille concernée :

            Private Sub Worksheet_Change(ByVal Target As Range)
            Application.EnableEvents = False
            Call recherche(Range("R" & Target.Row))
            Application.EnableEvents = True
            End Sub


            puis tu rajoutes une variable dans ta routine recherche :

            Sub recherche(VCell As Range)
            Dim var1, var2, var3, var4

            If VCell.Offset(0, -15).Text = "j" Then
            var3 = "javelot"
            Else
            var3 = "poids"
            End If

            If VCell.Offset(0, -17).Text = "g" Then
            var4 = 3
            Else
            var4 = 2
            End If

            VCell.FormulaR1C1 = _
            "=VLOOKUP(RC[-1]," + CStr(var3) + "," + CStr(var4) + ",true)"

            End Sub


            Comme ça tu interceptes les changement dans ta feuille et tu recalcules la cellule R# où la ligne # correspond à la ligne de la cellule modifiée.

            Naturellement tu peux optimiser le truc en ne réagissant que si une cellule impliquée dans le calcul est modifiée.

            Au fait, tu tiens absolument à des macros?
            Tu peux obtenir le même résultat sans macros.

            Si ça t'intéresse, tu dis

            A+
            1. Contributeur
              oui le resultat sans macro m'interesse ca m'aidera a progresser

              demain j'essaie ta commande

              merci encore
              1. bonsoir,

                je voulais t'envoyer la feuille excel "sans macro" mais tu n'as pas laissé ton adresse dans ton profil.

                sinon :

                1) crée une feuille avec tes colonnes de saisie A, C, Q.

                2) crée les noms :
                F cellule avec la valeur 2
                G cellule avec la valeur 3
                J cellule avec la valeur javelot
                P cellule avec la valeur poids
                JAVELOT zone d'au moins 3 colonnes qui concerne le javelot
                POIDS zone d'au moins 3 colonnes qui concerne le poids

                3) dans la zone des résultat (R5:R##) saisie la formule :
                =RECHERCHEV(Q5;INDIRECT(INDIRECT(C5));INDIRECT(A5);VRAI)

                4) explications :
                INDIRECT(INDIRECT(C5)) :
                INDIRECT(C5) donne j ou p selon la saisie dans la zone discipline
                INDIRECT(INDIRECT(C5))=INDIRECT(j)= javelot (la zone nommée javelot)
                ou
                INDIRECT(INDIRECT(C5))=INDIRECT(p)= poids (la zone nommée poids)

                INDIRECT(A5) :
                A5 contient f ou g.
                Indirect(f)=valeur de la zone nommée "f" soit 2.
                Indirect(g)=valeur de la zone nommée "g" soit 3.

                C'est quand même plus visuel avec la feuille de calcul!!!!

                A+
                1. Contributeur
                  merci pour t explications mais j'aimerai savoir 2 ou 3 petites choses ou te préciser quelque infos

                  - le tableau dans lequel la recherche se fait est situé sur la feuil2 et le tableau ou s'affiche les resultats sur la feuil1

                  - le tableau ou la recherche se fait a été modifié

                  il se compose comme ca

                  Javelot Poids

                  Filles Notes Garcon Notes Filles Notes Garcon Notes

                  j'ai appeler chaque couple (sexe-discipline) comme suit

                  JavFille, JavGarcon, PoidsFille, poidsGarcon

                  comment l'integrer dans ton exemple
                  1. bonjour,

                    peux-tu m'envoyer ton classeur? ça sera plus simple pour moi.

                    en tout cas, il est possible de référencer les noms de feuil2 dans feuil1

                    A+
                    1. Contributeur
                      malheursement ce sont des données confidentiels mais je vais te fournir plus d'infos si tu veux

                      dis moi de koi tu as besoin
                      1. Bonjour,

                        Ajouter en début de fonction :

                        [ Application.Volatile ]

                        Lupin
                        1. Salut,

                          je t'ai préparé un classeur avec des données bidon.

                          je ne sais comment te le faire parvenir....

                          A+
                          1. Contributeur
                            a cette adresse dede_421@hotmail.com

                            pourrais tu me donner des sites pour apprendre des fonctions avancées sur excel si tu en as
                            1. re :

                              cette fonction est un peu lourde à cause de (rechercheV)
                              mais tu pourrais essayer ainsi :!

                              Déclarer ta fonction dans un module et non dans la feuille :

                              Effectuer les modifs suivante :

                              Function MaRecherche(Cellule1, Cellule2) As Variant
                              
                                  Dim Var1, Var2 As String
                                  Dim Var3, Var4 As Integer
                              
                                  Application.Volatile
                                  Var1 = "":    Var2 = ""
                                  If (Cellule1 = "j") Then
                                      Var3 = "javelot"
                                  Else
                                      Var3 = "poids"
                                  End If
                                  If (Cellule2 = "g") Then
                                      Var4 = 3
                                  Else
                                      Var4 = 2
                                  End If
                                  Recherche = "=VLOOKUP(RC[-1]," + CStr(Var3) + "," + CStr(Var4) + ",true)"
                              
                              End Function
                              


                              //Ensuite tu te positionne sur la cellule visé
                              //Menu Insertion/Fonctions
                              //Sélectionne personnalisé
                              //Dans le liste repère la fonction [MaRecherche]

                              Ça devrait donner le résultat escompté !
                              N'ayant pas le contexte de données, je ne puis tester à 100%

                              Lupin
                              1. désolé :

                                Function MaRecherche(Cellule1, Cellule2) As Variant

                                Dim Var1, Var2 As String
                                Dim Var3, Var4 As Integer

                                Application.Volatile
                                Var1 = "": Var2 = ""
                                If (Cellule1 = "j") Then
                                Var3 = "javelot"
                                Else
                                Var3 = "poids"
                                End If
                                If (Cellule2 = "g") Then
                                Var4 = 3
                                Else
                                Var4 = 2
                                End If
                                MaRecherche = "=VLOOKUP(RC[-1]," + CStr(Var3) + "," + CStr(Var4) + ",true)"

                                End Function

                                Lupin
                              2. @Lupinsuite :

                                la déclaration :

                                Function MaRecherche(Cellule1, Cellule2) As Variant

                                donne de façon explicite :

                                Function MaRecherche(Cellule1 As Variant, Cellule2 As Variant) As Variant

                                je suggère encore plus stricte,

                                Function MaRecherche(Cellule1 As String, Cellule2 As String) As String

                                Lupin