Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2021 Transformer une formule en vba

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 !

gege5959

XLDnaute Nouveau
Bonjour,

Je suis débutant et je cherche à transcrire la formule suivante en vba mais j'ai toujours des messages d'erreur alors que la formule fonctionne dans une cellule
=SOMME(NB.SI.ENS(A1:E1;G1:J1))
Le but étant de compter le nombre de doublons dans une plage avec pour critère une autre plage
Cette formule sera intégrée à 2 boucles si bien qu'elle pourrait finir par exemple par =SOMME(NB.SI.ENS(A500:E500;G300:J300))

Je l'ai écrite comme suit:
com1 = activeWorksheetFunction.somme(activeWorksheetFunction.nb.si.ens(Sheets("sol2").Range(Cells(i, j), Cells(i, j + 4)), Sheets(feu1).Range(Cells(posi, colref1 ), Cells(posi, colref1 +3))))

Message d'erreur: «erreur définie par l'application ou par l'objet»

Merci d'avance pour votre éclairage
 
Solution
A priori, le demandeur veut le résultat en variable, d'où le souci.
VB:
Sub Macro3()
    Dim rng1 As String
    Dim rng2 As String
    
    ' ' =SOMME(NB.SI.ENS(A1:E1;G1:J1))
    ' Adresse relative en notation A1
    rng1 = Range(Cells(1, 1), Cells(1, 4)).Address(RowAbsolute:=False, ColumnAbsolute:=False)
    rng2 = Range(Cells(1, 7), Cells(1, 10)).Address(RowAbsolute:=False, ColumnAbsolute:=False)

    ' Formule en français avec ; comme séparateur
    ActiveCell.FormulaLocal = "=SOMME(NB.SI.ENS(" & rng1 & ";" & rng2 & "))"
End Sub
Astuces


VB:
Sub Macro6_Corrige()

'Je l 'ai écrite comme suit:
'com1 = activeWorksheetFunction.somme(activeWorksheetFunction.nb.si.ens(Sheets("sol2").Range(Cells(i, j), Cells(i, j + 4)), Sheets(feu1).Range(Cells(posi, colref1), Cells(posi, colref1 + 3))))

    Dim wsSol As Worksheet, wsFeu As Worksheet
    Dim rng1 As String, rng2 As String
    Dim i As Long

    Set wsSol = Sheets("sol2") ' Sheets("sol2")
    Set wsFeu = Sheets("feu1") ' Sheets(feu1)
   
    ' Cette formule sera intégrée à 2 boucles si bien qu'elle pourrait finir par exemple par =SOMME(NB.SI.ENS(A500:E500;G300:J300))
    For i = 1 To 500  ' Exemple A500:E500 / Mais pour G300:J300 ? il faut 500 Lignes aussi donc G500:J500
        ' Construire les adresses A1 relatives avec le nom des feuilles
        rng1 = wsSol.Range(wsSol.Cells(i, 1), wsSol.Cells(i, 4)).Address(RowAbsolute:=False, ColumnAbsolute:=False, External:=True)
        rng2 = wsFeu.Range(wsFeu.Cells(i, 7), wsFeu.Cells(i, 10)).Address(RowAbsolute:=False, ColumnAbsolute:=False, External:=True)
       
        ' Formule avec SOMME(NB.SI.ENS) en français
        wsSol.Cells(i, 13).FormulaLocal = "=SOMME(NB.SI.ENS(" & rng1 & ";" & rng2 & "))"
    Next i
End Sub
 
Bonjour,

Merci pour votre macro.
Elle ressemble assez à une autre plus haut mais elle pourra m'être utile.
Cordialement.
 
Bonjour,

Merci beaucoup. C'est exactement ce que je cherchais. Cordialement.
 
Bonjour à toutes et à tous, bonjour @gege5959
Merci pour le retour.
Elle ressemble assez à une autre plus haut
Oui postée 3 minutes plus tôt, mais avec cette différence que je place le résultat dans une variable et non pas en formule dans une cellule.
Vu ton 1er post :
com1 = activeWorksheetFunction.somme(activeWorksheetFunction.nb.si.ens(Sheets("sol2").Range(Cells(i, j), Cells(i, j + 4)), Sheets(feu1).Range(Cells(posi, colref1 ), Cells(posi, colref1 +3))))
Et le post 8 :
ValMin = Application.WorksheetFunction.Min(Range(Cells(18, 1), Cells(31, 840))) .
J'avais cru comprendre que c'était ce que tu recherchais
Apparemment je me trompais 🫢
À bientôt
 
- 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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…