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

29quantiles.zip (11.86 Ko)

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 Sub

je te l'accorde la formule est complexe et je ne sais pas la coder, si quelqu'un peut m'aider..

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 Sub

Amicalement

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

19essai-quantile.zip (15.94 Ko)

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 Sub

et 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 Sub

Amicalement

Claude

merci beaucoup Claude!

Rechercher des sujets similaires à "passage formule macro"