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
A voir également:

15 réponses

JvDo Messages postés 2012 Statut Membre 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
antic80 Messages postés 4877 Statut Contributeur 1 161
 
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
JvDo Messages postés 2012 Statut Membre 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
antic80 Messages postés 4877 Statut Contributeur 1 161
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JvDo Messages postés 2012 Statut Membre 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
antic80 Messages postés 4877 Statut Contributeur 1 161
 
oui le resultat sans macro m'interesse ca m'aidera a progresser

demain j'essaie ta commande

merci encore
0
JvDo Messages postés 2012 Statut Membre 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
antic80 Messages postés 4877 Statut Contributeur 1 161
 
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
JvDo Messages postés 2012 Statut Membre 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
antic80 Messages postés 4877 Statut Contributeur 1 161
 
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
antic80 Messages postés 4877 Statut Contributeur 1 161
 
up
0
Lupin.Arsene
 
Bonjour,

Ajouter en début de fonction :

[ Application.Volatile ]

Lupin
0
JvDo Messages postés 2012 Statut Membre 859
 
Salut,

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

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

A+
0
antic80 Messages postés 4877 Statut Contributeur 1 161
 
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
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
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
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