EXCEL : Réactualiser une macro

antic80 Messages postés 4877 Statut Contributeur -  
 Lupin -
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. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    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
    0
  2. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    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
    0
  3. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    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+
    0
  4. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    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+
    0
  7. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    oui le resultat sans macro m'interesse ca m'aidera a progresser

    demain j'essaie ta commande

    merci encore
    0
  8. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    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+
    0
  9. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    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
    0
  10. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    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+
    0
  11. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    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
    0
  12. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    up
    0
  13. Lupin.Arsene
     
    Bonjour,

    Ajouter en début de fonction :

    [ Application.Volatile ]

    Lupin
    0
  14. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    Salut,

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

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

    A+
    0
  15. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    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
    0
  16. Lupin
     
    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
    0
    1. Lupin
       
      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
      0
      1. Lupin > Lupin
         
        suite :

        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
        0