EXCEL : Réactualiser une macro
antic80
Messages postés
4877
Statut
Contributeur
-
Lupin -
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
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:
- EXCEL : Réactualiser une macro
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
- Déplacer colonne excel - Guide
- Excel trier par ordre croissant chiffre - Guide
15 réponses
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
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
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
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
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+
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+
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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+
ç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+
oui le resultat sans macro m'interesse ca m'aidera a progresser
demain j'essaie ta commande
merci encore
demain j'essaie ta commande
merci encore
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+
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+
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
- 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
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+
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+
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
dis moi de koi tu as besoin
Salut,
je t'ai préparé un classeur avec des données bidon.
je ne sais comment te le faire parvenir....
A+
je t'ai préparé un classeur avec des données bidon.
je ne sais comment te le faire parvenir....
A+
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
pourrais tu me donner des sites pour apprendre des fonctions avancées sur excel si tu en as
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 :
//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
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
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
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