CountIf dans un Formula.R1C1

Bonjour à tous,

Je souhaite appliquer une formule dans une cellule via VBA. La formule en question avec une rédaction Excel est la suivante (en J8) :

=SI.CONDITIONS(NB.SI(J9:J11;0)=3;SI(BASE!$AG$8=$B$7;D$7;0);NB.SI(J9:J11;0)=2;SI(BASE!$AG$8=$B$8;D$8;0);NB.SI(TCD!J9:J11;0)=1;SI(BASE!$AG$8=$B$9;D$9;0);NB.SI(TCD!J9:J11;0)=0;SI(BASE!$AG$8=B$10;D$10;0))

La plage J9:J11 correspond donc aux 3 cellules en dessous de celle où est située la formule.

BASE correspond à une autre feuille de mon document dans laquelle se trouve ma valeur de référence avec laquelle je souhaite comparer mes cellules B7, B8, B9 et B10.

Le problème arrive lorsque je souhaite faire en sorte d'insérer cette formule dans la cellule via VBA, actuellement j'en suis ici :

Sheets("TCD").Range("J8").FormulaR1C1 = "=If(Countif(R[1]C:R[3]C,0)=3,If('BASE'!RC[23]=R[-1]C[-8],R[-1]C[-6],0),If(CountIf(R[1]C:R[3]C,0)=2,If('BASE'!RC[23]=RC[-8],RC[-6],0),If(CountIf(R[1]C:R[3]C,0)=1,If('BASE'!RC[23]=R[1]C[-8],R[1]C[-6],0),If(CountIf(R[1]C:R[3]C,0)=0,If('BASE'!RC[23]=R[2]C[-8],R[2]C[-6],0))))"

Le premier problème que je rencontre est que je n'ai pas trouvé le moyen de faire un SI.CONDITIONS dans VBA, je me retrouve donc avec une formule à rallonge …

Cependant cela n'empêche pas le fonctionnement de cette formule. Ce qui le bloque en revanche est, selon moi, un problème de rédaction du CountIf :

- Je ne sais pas si il faut ou non mettre "Application." ou "WorksheetFunction." ou même les 2 avant le CountIf;

-Je ne sais pas non plus la rédaction à utiliser pour définir ma plage, le " R[1]C:R[3]C " ne me parait absolument pas plausible mais j'ai utilisé les ":" afin d'illustrer ce que voulais obtenir.

Comment puis-je donc formuler cela ? Avec un Range ?

Merci d'avance,

Tom

Bonjour,

Il y a 2 manières d'utiliser les fonctions dans VBA : les écrire de sorte qu'elles apparaissent ensuite dans la cellule après l'exécution de la macro, en utilisant l'une des propriété .Formula (en anglais avec plage type A1), .FormulaR1C1 (en anglais de type L1C1) ou .FormulaLocal (dans la langue utilisateur, selon le format utilisateur).

L'autre manière consiste à appeler la fonction Excel et/ou utiliser un équivalent VBA pour n'inscrire que le résultat dans une cellule. Dans ce cas, on utilise Application. ou WorksheetFunction. et on inscrit le tout dans la propriété .Value d'une cellule. Les plages sont définies avec la syntaxe VBA, par exemple [A1], Range("A1") ou Cells(1, 1).

Pour la première possibilité, le plus simple est d'utiliser l'enregistreur de macro pour récupérer la syntaxe de la fonction. Là tu te mélanges les pinceaux entre les 2 manières.

bonjour à tous,

si.conditions = IFS en anglais

un essai pour J8

Sub aargh()
'=IFS(COUNTIF(J9:J11,0)=3,IF(base!$AG$8=$B$7,D$7,0),COUNTIF(J9:J11,0)=2,IF(base!$AG$8=$B$8,D$8,0),COUNTIF(tcd!J9:J11,0)=1,IF(base!$AG$8=$B$9,D$9,0),COUNTIF(tcd!J9:J11,0)=0,IF(base!$AG$8=B$10,D$10,0))

Range("J8").FormulaR1C1 = "=ifs(countif(r[1]c:r[3]c,0)=3,if(base!r8c33=r7c2,r7c[-6],0),countif(r[1]c:r[3]c,0)=2,if(base!r8c33=r8c2,r8c[-6],0),countif(tcd!r[1]c:r[3]c,0)=1,if(base!r8c33=r9c2,r9c[-6],0),countif(tcd!r[1]c:r[3]c,0)=0,if(base!r8c33=r10c2,r10c[-6],0))"
End Sub

Merci à vous 2 pour vos réponses, elles m'aident à avancer vers ma solution.

h2so4, ta proposition fonctionne très bien cependant je ne comprends pas comment tu l'as obtenue :

Passer de ma proposition : "=If(Countif(R[1]C:R[3]C,0)=3,If('BASE'!RC[23]=R[-1]C[-8],R[-1]C[-6],0) …

à : "=ifs(countif(r[1]c:r[3]c,0)=3,if(base!r8c33=r7c2,r7c[-6],0) …

pour ne prendre que le début de la rédaction

Comment se fait-il que mon "RC[23]=R[-1]C[-8]" devienne "r8c33=r7c2", les valeurs ne sont même plus similaires !

Et le plus étonnant est que cela renvoie tout de même le bon résultat ! J'aimerais beaucoup que tu m'éclaires sur ce point..

Salut h2so4 !

@Tom : le principe de l'écriture R1C1 :

R signifie Row, et désigne la ligne.

C signifie Column (je ne prends pas la peine de traduire )

Un nombre entre crochets correspond à une position relative par rapport à la cellule qui contient la formule. [-1] est la ligne ou colonne précédente, [1] (comprendre +1) la suivante. Pour désigner la même ligne ou colonne, on ne met rien (pas de [0]). Un nombre sans crochet est une référence absolue (fixe quelle que soit la position de la formule).

Lorsque l'on écrit en J8, R[-1]C[-8] équivaut donc à R7C2 (B7 pour le premier, $B$7 pour le second).

OK, je ne savais pas pour le fonctionnement sans crochets, tout est plus clair maintenant !

Je pense donc avoir compris et résolue mon problème !

Rechercher des sujets similaires à "countif formula r1c1"