Passage formule macro
Bonjour à tous,
j'aimerais passer des formules en macro afin de permettre à l'utilisateur du fichier d'écraser s'il le souhaite les nombres proposés.
je vous joins mon fichier avec une explication plus détaillée et illustrée avec un exemple.
merci
oza
Salut ozaland et le forum
Je ne comprends pas le problème.
J4, tu as une formule à rallonge. Tu l'écrases par une valeur => que tu ne veux plus de la formule.
Si tu veux de nouveau la formule, tu copies une des cellules de J contenant la formule (par exemple J5) et tu la colles en J4.
On peut le faire par macro, mais ce n'est pas plus rapide que de le faire en manuel. Et il faut déterminer comment on lance la macro.
A+
oui c'est la solution la plus simple et la plus rapide mais j'aimerais automatiser un maximum le fichier.
en clair: quand x est modifié par l'utilisateur, la macro génère automatiquement les valeurs dans J et K.
si ces valeurs ne conviennent pas à l'utilisateur il peut en changer facilement.
s'il veut redéfinir les valeurs par défaut il relance la macro.
ci-dessous la macro pour la fonction recherchev, quand l'utilisateur attribue une valeur en E27, la macro recherche la donnée correspondante et la place en F27. si cette donnée ne lui convient pas, il peut la changer sans problème.
s'il change E27 rebelote..
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("E27")) Is Nothing Then
Target.Offset(0, 1).Formula = "=VLOOKUP(E27,'données histo graphes'!P1:Q15,2,0)"
Target.Offset(0, 1).Value = Target.Offset(0, 1).Value
End If
End Subje te l'accorde la formule est complexe et je ne sais pas la coder, si quelqu'un peut m'aider..
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonsoir,
Ta 1ère demande, en modifiant la cellule "G5"
dans le VBE de la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("g5")) Is Nothing Then
Application.ScreenUpdating = False
If Target.Count > 1 Then Exit Sub
Range("i4").FormulaR1C1 = "=IF(RC[1]="""","""",R[-1]C+1)"
'----
Range("j4").FormulaR1C1 = _
"=IF(ISERROR(IF(ROUND(R[-1]C+(R7C7-R4C7)/R5C7,2)>R7C7,"""",ROUND(R[-1]C+(R7C7-R4C7)/R5C7,2))),"""",IF(ROUND(R[-1]C+(R7C7-R4C7)/R5C7,2)>R7C7,"""",ROUND(R[-1]C+(R7C7-R4C7)/R5C7,2)))"
'----
Range("K4").FormulaR1C1 = _
"=IF(RC[-1]="""","""",IF(R[1]C[-1]="""",R7C7,R[1]C[-1]))"
'---- incrémente ---
Range("I4:K4").AutoFill Destination:=Range("I4:K202")
Range("I4:j202") = Range("I4:j202").Value 'en dur
End If
End SubAmicalement
Claude
merci Claude!
est-ce possible de passer G4=MIN(tableau!A1:A20) et G7=MAX(tableau!A1:A20) en macro?
de la même manière l'utilisateur pourra s'il le souhaite modifier ces deux nombres. en cas de modification les quantiles s'actualiseront automatiquement.
cordialement
oza
-- 08 Juil 2011, 10:49 --
j'ai fait un essai mais ce n'est pas au point. j'ai codé les fonction min et max.
par contre je ne sais pas ou et comment les ajouter dans le code existant pour qu'elles répondent à mon besoin.
une idée?
merci
oza
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonjour,
Modifier "G5", çà remet les formules en G4 et G7 et relance les calculs en i4:K202
Modifier "G4" ou "G7", çà relance les calculs en i4:K202
Dans un module
Public Flag As Boolean '(dans Module)
Sub Formules()
Application.ScreenUpdating = False
Range("i4").FormulaR1C1 = "=IF(RC[1]="""","""",R[-1]C+1)"
'----
Range("j4").FormulaR1C1 = _
"=IF(ISERROR(IF(ROUND(R[-1]C+(R7C7-R4C7)/R5C7,2)>R7C7,"""",ROUND(R[-1]C+(R7C7-R4C7)/R5C7,2))),"""",IF(ROUND(R[-1]C+(R7C7-R4C7)/R5C7,2)>R7C7,"""",ROUND(R[-1]C+(R7C7-R4C7)/R5C7,2)))"
'----
Range("K4").FormulaR1C1 = _
"=IF(RC[-1]="""","""",IF(R[1]C[-1]="""",R7C7,R[1]C[-1]))"
'---- incrémente ---
Range("I4:K4").AutoFill Destination:=Range("I4:K202")
Range("I4:j202") = Range("I4:j202").Value 'en dur
End Subet dans le VBE de la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
If Flag Then Exit Sub
Application.ScreenUpdating = False
If Target.Count > 1 Then Exit Sub
'--- G5 ---
If Not Application.Intersect(Target, Range("g5")) Is Nothing Then
Flag = True
Range("G4") = "=MIN(tableau!a1:a20)"
Range("G7") = "=Max(tableau!a1:a20)"
Call Formules
Flag = False
End If
'--- G4 ---
If Not Application.Intersect(Target, Range("g4")) Is Nothing Then
Call Formules
End If
'--- G7 ---
If Not Application.Intersect(Target, Range("g7")) Is Nothing Then
Call Formules
End If
End SubAmicalement
Claude
merci beaucoup Claude!