Microsoft 365 Exécution d'une formule en VBA

  • Initiateur de la discussion Initiateur de la discussion pat66
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

pat66

XLDnaute Impliqué
Bonjour le forum,

J'aimerai pouvoir affecter à une forme une macro qui permette à chaque clic d'alterner entre les 2 formules suivantes sur une plage de cellules
de 25 lignes, le bouton sera sur la feuille1

1er clic
Feuil2!U11*30%*-1+Feuil2!AF11*30%
Feuil2!U12*30%*-1+Feuil2!AF12*30%
------
Feuil2!U35*30%*-1+Feuil2!AF35*30%

2 clic
Feuil2!U11*30%)
Feuil2!U12*30%)
----
Feuil2!U35*30%)


etc ...

je vous remercie d'avance pour votre aide

cdt
 
Dernière édition:
Bonjour,
ceci:

VB:
Sub AlternerFormule()

    Dim cible As Range
    Set cible = ActiveSheet.Range("A1")

    If cible.Formula = "" Or cible.Formula = "=Feuil2!U11*30%" Then
        ' 1er clic
        cible.FormulaLocal = "=Feuil2!U11*30%*-1+Feuil2!AF11*30%"
    Else
        ' 2e clic
        cible.FormulaLocal = "=Feuil2!U11*30%"
    End If

End Sub

Nicolas

, la demande a changé, créer une boucle ensuite
 
Bonjour Pat, Nicolas,
Un exemple en PJ à adapter à votre fichier, avec :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [B11]) Is Nothing Then     ' B11 à adapter
         Formule1 = "=Feuil2!U11*30%-1+Feuil2!AF11*30%"
         Formule2 = "=Feuil2!U11*30%"
         If Target.FormulaLocal = Formule1 Then
            Target.FormulaLocal = Formule2
         Else
            Target.FormulaLocal = Formule1
        End If
        ActiveCell.Offset(0, 1).Select
    End If
Fin:
End Sub
 

Pièces jointes

Bonjour Sylvanu, Nicolas,

je suis désolé, j'ai du modifié mon premier post car en fait cela concerne 25 lignes

sylvanu : utiliser Worksheet_SelectionChange ne convient pas, je dois impérativement utiliser une macro pour alterner entre les 2 formulaLocal sans avoir à saisir une valeur, merci

Nicolas : peux t'on étendre à une plage votre solution sur 25 lignes des mêmes colonnes, merci
 
utiliser Worksheet_SelectionChange ne convient pas, je dois impérativement utiliser une macro pour alterner entre les 2 formulaLocal sans avoir à saisir une valeur, merci
Euh, Worksheet_SelectionChange est une macro. Il suffit de cliquer dans la cellule pour changer la formule, il n'y a aucune valeur à entrer.
qui permette à chaque clic d'alterner entre les 2 formules
Rien ne dit que vous vouliez un bouton.
Un essai en PJ sur 25 lignes :
VB:
Sub ChangeFormule()
On Error GoTo Fin
Formule1 = "=Feuil2!U11*30%-1+Feuil2!AF11*30%"
Formule2 = "=Feuil2!U11*30%"
If [B11].FormulaLocal = Formule1 Then
    [B11:B36].FormulaLocal = Formule2
Else
    [B11:B36].FormulaLocal = Formule1
End If
Fin:
End Sub
Les plages sont à adapter à votre fichier.
 

Pièces jointes

Dernière édition:
Nicolas : peux t'on étendre à une plage votre solution sur 25 lignes des mêmes colonnes, merci

VB:
Sub AlternerFormule()

    Dim i As Long
    Dim cible As Range
    Dim mode1 As Boolean
    
    Set cible = ActiveSheet.Range("A1")
    mode1 = (cible.Formula = "" Or cible.Formula = "=Feuil2!U11*30%")

    For i = 1 To 25
        Set cible = ActiveSheet.Cells(i, "A")

        If mode1 Then
            ' 1er clic
            cible.FormulaLocal = "=Feuil2!U" & (i + 10) & "*30%*-1+Feuil2!AF" & (i + 10) & "*30%"
        Else
            ' 2e clic
            cible.FormulaLocal = "=Feuil2!U" & (i + 10) & "*30%"
        End If
    Next i

End Sub
 
Bonjour @pat66, @Nicolas JACQUIN, @sylvanu,

Nul besoin de VBA. Une simple formule paramétrée suffit.

En C2, une liste de validation avec deux éléments: Col U seule ou bien Col U & AF suivant la formule qu'on désire choisir. Si on choisit la 1° option alors on utilise la formule courte. Si on choisit la 2° option alors on utilise la formule longue. On peut déplacer C2 où on veut (voire même sur une autre feuille).

L'astuce consiste simplement à annuler le terme (-1+Feuil2!AF11*30%) si on ne désire que la formule avec la colonne U.
NB.SI($C$2;"*AF") vaut 0 si "AF" ne termine pas la valeur de C2 et vaut 1 si "AF" termine la valeur de C2.

La formule en E5 à tirer vers le bas: =Feuil2!U11*30% + (-1+Feuil2!AF11*30%) * NB.SI($C$2;"*AF")
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour