VBA - Calcul matriciel avec plage variable

  • Initiateur de la discussion Initiateur de la discussion rockball73
  • 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 !

R

rockball73

Guest
Bonjour forum,

Je me permets de poser une question concernant la création d'une macro.

Mise en situtation :
J'ai dans un tableur de +/- 150.000 lignes (nombre de ligne variable à chaque ouverture du fichier car alimenté par des exports de notre logiciel comptable). Dans la colonne X, je désire faire un test réalisé grâce à une formule matricielle qui est la suivante :
Code:
{=SI(Q2="44";SOMME(SI(("70"=$Q$2:$Q$149999)*(U2=$U$2:$U$149999);$G$2:$G$149999;""));"")}  , une fois validée par CTRL+MAJ+Enter

Cependant, d'année en année, le fichier dans lequel se trouve cette formule est supprimé pour laisser place à son successeur, qui est le même export, mais avec les données de l'année suivante. J'aimerais, dès lors que, via une macro exécutée par un fichier de regroupement, cette formule soit retranscrite dans la cellule "X2" et ensuite étirée jusqu'à la dernière cellule non vide.
J'utilise ce bout de code pour étirer la formule et cela fonctionne, lorsque la cellule "X2" est au préalable remplie par la fonction matricielle ci-dessus :
Code:
Dim a As Long
    a = Range("G2").End(xlDown).Row
    Range("X2").AutoFill Destination:=Range("X2:X" & a)

Maintenant, j'aimerais que la formule matricielle soit sous cette forme, afin que le calcul porte sur la plage "non vide" de lignes (et pas sur toutes les lignes de 2 à 1.046.546) pour raccourcir les temps de calculs et alléger le fichier.
J'avais donc penser à ce code-ci :
Code:
Dim a As Long
    a = Range("G2").End(xlDown).Row
    Range("X2").Formula = "=IF(RC[-7]=""44"",SUM(IF((""70""=R2C17:R" & a & "C17)*(RC[-3]=R2C21:R" & a & "C21),R2C7:R" & a & "C7,"""")),"""")"
    Range("X2").AutoFill Destination:=Range("X2:X" & a)
Cela fonctionne presque, le seul problème est que le code VBA ne fait pas la validation matricielle "CTRL+MAJ+Enter"...

Merci d'avance pour votre aide,

Rockb@ll.
 
Re : VBA - Calcul matriciel avec plage variable

Bonjour Pierrot,

Tout d'abord merci de ta réponse, et de l'intérêt que tu portes à mon problème.

J'ai essayé déjà avec la le FormulaArray. De plus, lorsque l'on utilise ce code, faut-il quand même mettre les corchets {} indiquant un calcul matriciel, ou alors, de quelle manière faut-il procéder pour indiquer à Excel, via la macro, que l'on procède à une validation matricielle?

Merci encore,

Bon après-midi.
 
Re : VBA - Calcul matriciel avec plage variable

Merci beaucoup Pierrot,

En effet, FormulaArray fonctionne. Je ne sais pourquoi, lors de toutes mes précédentes tentatives, cela n'a pas fonctionné.

Encore merci, et bonne continuation.
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
0
Affichages
593
Réponses
1
Affichages
1 K
D
Réponses
2
Affichages
916
D
Réponses
13
Affichages
2 K
K
Réponses
6
Affichages
1 K
Korasgar
K
I
  • Question Question
Réponses
1
Affichages
3 K
N
Réponses
5
Affichages
3 K
Nicocotte125
N
Retour