Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.
  • Initiateur de la discussion Initiateur de la discussion CISCO
  • 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 !

CISCO

XLDnaute Barbatruc
Bonsoir à tous

Histoire d'améliorer une proposition faite sur ce fil, je fais divers essais avec la fonction NB.SI. Et je découvre un truc étrange...

J'ai défini une plage dynamique, lettres, $A3:$Ax, et une autre recherches, correspondant à C$3:$C$y.
Lorsque j'écris dans la cellule D3 la formule NB.SI(lettres;recherches), Excel me donne le résultat de NB.SI(lettres;$C3).
Dans la cellule en dessous, toujours avec NB.SI(lettres;recherches), j'obtiens le résultat de NB.SI(lettres;$C4). Et ainsi de suite en dessous... Je n'avais jamais remarqué ce type d'enchainement.

Au passage, si quelqu'un a une idée. Mon "problème" :
Dans la colonne D, j'ai diverses valeurs correspondant à NB.SI(lettres;$C3), puis en dessous à
NB.SI(lettres;$C3)+NB.SI(lettres;$C4), et en dessous encore à NB.SI(lettres;$C3)+NB.SI(lettres;$C4)+NB.SI(lettres;$C5). Et ainsi de suite.
J'aimerai avoir ces valeurs non pas sur la feuille, mais dans un nom, une liste dynamique dans le gestionnaire de noms, histoire de l'utiliser dans une formule sans avoir besoin de l'afficher à l'écran.
J'aimerai bien, mais je n'y arrive pas.
Donc, si vous avez une idée, merci d'avance... Sans VBA, bien sûr. Ne vous prenez pas la tête pour autant, ce n'est pas très important, c'est juste pour le fun et pour en apprendre un peu plus...

@ plus
 

Pièces jointes

Dernière édition:
Bonjour CISCO, le forum,

Dans les 3 fichiers précédents les noms LETTRES et RECHERCHES sont définis par la fonction volatile DECALER.

De ce fait à chaque modification la formule matricielle de la plage E3:E6002 est calculée 6000 fois.

Dans ce fichier (4) la macro nomme les 2 plages :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Union([LETTRES], [RECHERCHES]).EntireColumn) Is Nothing Then Exit Sub
Dim i As Variant
i = Application.Match("zzz", [LETTRES].EntireColumn)
If Val(CStr(i)) < [LETTRES].Row Then i = [LETTRES].Row
[LETTRES].Resize(i - [LETTRES].Row + 1).Name = "LETTRES" 'renomme la plage
i = Application.Match("zzz", [RECHERCHES].EntireColumn)
If Val(CStr(i)) < [RECHERCHES].Row Then i = [RECHERCHES].Row
[RECHERCHES].Resize(i - [RECHERCHES].Row + 1).Name = "RECHERCHES" 'renomme la plage
i = [LETTRES].Cells(1) 'mémorise
Application.EnableEvents = False
[LETTRES].Cells(1) = i & " " 'modification de la plage
Set d = Nothing
[LETTRES].Cells(1) = i 'force le recalcul de la fonction
Application.EnableEvents = True
End Sub
A chaque modification la formule matricielle n'est maintenant calculée que 3 ou 4 fois, c'est quasi immédiat.

A+
 

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

  • Question Question
Microsoft 365 Souci de copie
Réponses
8
Affichages
218
Réponses
22
Affichages
1 K
Réponses
18
Affichages
316
Réponses
35
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…