Langage VBA hors du commun du type IF(R[3]C[-9]:R[7998]C[-9]....
Résolu
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
dans mon code VBA, j'ai besoin de copier la formule matricielle suivante dans une case :
=SOMME(SI(AQ5:AQ8000<>"";1/NB.SI(AQ5:AQ8000;AQ5:AQ8000)))
Quand je le demande sous VBA en créant une nouvelle macro, le code qui ressort est le suivant :
Range("AZ2").Select
Selection.FormulaArray = _
"=SUM(IF(R[3]C[-9]:R[7998]C[-9]<>"""",1/COUNTIF(R[3]C[-9]:R[7998]C[-9],R[3]C[-9]:R[7998]C[-9])))"
Malgré le fait que je bidouille sous VBA depuis pas mal de temps, je ne comprends pas le langage qu'il utilise ici, ni comment le comprendre, ni pourquoi il est utilisé...
J'aimerais avoir les traductions des caractères utilisés :
Comme par exemple les formulations du type :
- R[3] (, a quoi correspond le 3 ?)
- C[-9]
Et aussi pourquoi 1/COUNTIF, et pourquoi peut-on l'utiliser alors qu'habituellement pour utiliser une formule comme COUNTIF il faut ajouter Application.WorksheetFunction.CountIf (...)
Merci de votre aide !
dans mon code VBA, j'ai besoin de copier la formule matricielle suivante dans une case :
=SOMME(SI(AQ5:AQ8000<>"";1/NB.SI(AQ5:AQ8000;AQ5:AQ8000)))
Quand je le demande sous VBA en créant une nouvelle macro, le code qui ressort est le suivant :
Range("AZ2").Select
Selection.FormulaArray = _
"=SUM(IF(R[3]C[-9]:R[7998]C[-9]<>"""",1/COUNTIF(R[3]C[-9]:R[7998]C[-9],R[3]C[-9]:R[7998]C[-9])))"
Malgré le fait que je bidouille sous VBA depuis pas mal de temps, je ne comprends pas le langage qu'il utilise ici, ni comment le comprendre, ni pourquoi il est utilisé...
J'aimerais avoir les traductions des caractères utilisés :
Comme par exemple les formulations du type :
- R[3] (, a quoi correspond le 3 ?)
- C[-9]
Et aussi pourquoi 1/COUNTIF, et pourquoi peut-on l'utiliser alors qu'habituellement pour utiliser une formule comme COUNTIF il faut ajouter Application.WorksheetFunction.CountIf (...)
Merci de votre aide !
A voir également:
- 9^9 excel
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Internet explorer 9 - Télécharger - Navigateurs
2 réponses
Bonjour,
Tu peux utiliser simplement
R[3] indique une position relative de ligne par rapport à la cellule qui contient la formule
C[-9] indique une position relative de colonne par rapport à la cellule qui contient la formule
R[3]C[-9] correspond donc à AQ5 puisque décalée de 3 lignes et -9 colonnes par rapport à AZ2.
COUNTIF est simplement la traduction anglaise de la fonction Excel NB.SI alors que Application.WorksheetFunction.CountIf est une méthode VBA qui permet d'effectuer la même opération.
Dans ton cas, il s'agit d'inscrire la formule Excel dans AZ2 avec un code VBA.
Il est donc normal d'utiliser COUNTIF. Tu aurais pu te poser la même question pour les fonctions SUM ou IF.
A+
Tu peux utiliser simplement
Range("AZ2").FormulaArray = "=SUM(IF(AQ5:AQ8000<>"""",1/COUNTIF(AQ5:AQ8000,AQ5:AQ8000)))"
R[3] indique une position relative de ligne par rapport à la cellule qui contient la formule
C[-9] indique une position relative de colonne par rapport à la cellule qui contient la formule
R[3]C[-9] correspond donc à AQ5 puisque décalée de 3 lignes et -9 colonnes par rapport à AZ2.
COUNTIF est simplement la traduction anglaise de la fonction Excel NB.SI alors que Application.WorksheetFunction.CountIf est une méthode VBA qui permet d'effectuer la même opération.
Dans ton cas, il s'agit d'inscrire la formule Excel dans AZ2 avec un code VBA.
Il est donc normal d'utiliser COUNTIF. Tu aurais pu te poser la même question pour les fonctions SUM ou IF.
A+
Bonjour,
Pour compléter Gyrus R[3]C[-9] est la notation R1C1 que tu peux activer dans les options excel. Toi tu es habitué à la notation A1.
A noter que pour une formule 'simple' tu as :
mais aussi :
Ca n'existe pas pour FormulaArray.
Mais tu peux inscrire ta formule en français avec .formulaLocal
et la revalider en matriciel avec :
eric
Pour compléter Gyrus R[3]C[-9] est la notation R1C1 que tu peux activer dans les options excel. Toi tu es habitué à la notation A1.
A noter que pour une formule 'simple' tu as :
.formulaR1C1
.formula
mais aussi :
.formulaR1C1local= "=ta_formule_en_français_références_type_R1C1"qui te permet de faire un copier-coller de ta feuille dans vbe.
et
.formulaLocal= "=ta_formule_en_français_références_type_A1"
Ca n'existe pas pour FormulaArray.
Mais tu peux inscrire ta formule en français avec .formulaLocal
et la revalider en matriciel avec :
Range("AZ2").FormulaArray = Range("AZ2").Formula
eric