Qu'est-ce que la fonction RANGMEMBRECUBE ?
RANGMEMBRECUBE (CUBERANKEDMEMBER en anglais) te sert dès qu'un rapport BI doit afficher un Top N ou un classement qui se met à jour tout seul quand le cube change, sans que tu aies à retaper le nom du premier ou du dernier chaque semaine. Elle est réservée aux classeurs connectés à un cube OLAP, SQL Server Analysis Services ou Power BI.
Concrètement, c'est elle qui identifie automatiquement le premier produit par chiffre d'affaires chaque semaine, qui liste les cinq meilleurs clients d'une période, ou qui affiche la région en queue de classement sans qu'on ait besoin de connaître le nombre total de membres dans le jeu.
Syntaxe
=RANGMEMBRECUBE(connexion; expression_jeu; rang)Clique sur un argument pour aller à son explication.
La connexion doit être préalablement configurée dans ton classeur via Données > Connexions existantes. L'expression_jeu utilise la syntaxe MDX et doit référencer un jeu déjà trié côté cube pour que les rangs soient significatifs.

Comprendre chaque paramètre de la fonction RANGMEMBRECUBE
Les trois arguments s'enchaînent dans un ordre fixe et aucun n'est facultatif : d'abord le nom de ta connexion OLAP entre guillemets, ensuite l'expression MDX du jeu à parcourir, et enfin le rang voulu.
Le rang accepte des valeurs négatives : 1 te donne le premier membre, -1 le dernier, sans que tu aies à connaître la taille du jeu. Et comme ce dernier argument peut pointer vers une cellule, tu rends tout ton classement pilotable depuis une simple liste déroulante.
connexion
: le nom de la connexion au cube OLAP, tel qu'il est configuré dans ton classeurCe paramètre doit être une chaîne de texte entre guillemets, par exemple "VentesCube" ou "CRM_OLAP".
Pour vérifier les connexions disponibles, va dans Données > Connexions. Le nom est sensible à la casse et doit correspondre exactement à celui visible dans la liste.
expression_jeu
: l'expression MDX (Multidimensional Expressions) qui définit le jeu de membres à classerC'est ce jeu qui sera parcouru pour trouver le membre à la position demandée. Tu peux référencer des dimensions, des hiérarchies, ou utiliser des fonctions MDX pour créer des jeux filtrés ou triés.
Exemples valides : "[Produit].[Tous les produits].Children", "[Client].[Top Clients]", "[Geo].[Region].Members".
rang
: la position du membre à retourner dans le jeuLe rang 1 correspond au premier membre, 2 au deuxième, etc. Tu peux aussi utiliser des rangs négatifs : -1 pour le dernier membre, -2 pour l'avant-dernier, et ainsi de suite.
Tu peux référencer une cellule pour rendre le rang dynamique, par exemple =RANGMEMBRECUBE("VentesCube"; "[Produit].Children"; A1) où A1 contient le rang choisi par l'utilisateur.
Attention : Si le rang demandé dépasse le nombre de membres dans le jeu (par exemple rang 15 pour un jeu de 10 membres), Excel retourne l'erreur #REF!. Utilise MEMBRESENSEMBLECUBE pour compter les membres disponibles avant d'utiliser un rang variable.

Exemples pratiques pas à pas
Comment obtenir le premier membre d'un classement avec la fonction RANGMEMBRECUBE
Ton jeu de produits est trié par chiffre d'affaires décroissant, mais la cellule qui le contient n'affiche qu'une étiquette : le meilleur vendeur est là, invisible. Tu veux l'afficher en tête de ta synthèse, et surtout qu'il change tout seul le jour où un autre produit prend la première place. La fonction RANGMEMBRECUBE va chercher le membre qui occupe une position donnée.
- 1Dans une cellule, écris
=RANGMEMBRECUBE(. - 2En 1er argument : saisis le nom de ta connexion au cube entre guillemets,
"ThisWorkbookDataModel". C'est le nom réservé du modèle de données interne au classeur, à écrire exactement comme dans la liste Données puis Connexions. - 3En 2ᵉ argument : clique sur la cellule où vit le jeu déjà trié,
F4. C'est le tri de ce jeu qui donne son sens au classement, la fonction RANGMEMBRECUBE ne réordonne rien par elle-même. - 4En 3ᵉ argument : saisis la position à lire,
1, pour obtenir le premier membre du jeu. Un-1lirait le dernier et un-2l'avant-dernier sans que tu aies à connaître la taille du jeu, tandis qu'un rang au-delà du nombre de membres renvoie une erreur. - 5Ferme la parenthèse et appuie sur Entrée. La cellule affiche alors le nom natif du membre trouvé, ici
Moniteur.
=RANGMEMBRECUBE("ThisWorkbookDataModel"; F4; 1)Moniteur, le produit en tête du jeu avec ses 8000 de chiffre d'affaires. Elle ne trie rien par elle-même : elle lit le jeu à la position demandée, et tout dépend donc du tri posé dans la fonction JEUCUBE. Sur un jeu non trié, le rang 1 rendrait un membre parfaitement arbitraire.Comment afficher un classement complet avec la fonction RANGMEMBRECUBE
Le premier vendeur ne suffit pas : ta réunion commerciale veut voir le podium entier, et tu ne veux pas rouvrir la formule à chaque fois pour changer un chiffre. En sortant le rang de la formule pour le poser dans une cellule, tu obtiens un classement que l'on parcourt en tapant simplement un autre numéro.
- 1Dans une cellule, écris
=RANGMEMBRECUBE(. - 2En 1er argument : saisis le nom de la connexion entre guillemets,
"ThisWorkbookDataModel", comme dans l'exemple précédent. - 3En 2ᵉ argument : clique sur la cellule qui porte le jeu trié par chiffre d'affaires décroissant,
F4. C'est ce tri qui donne son sens au rang, sans lui le « premier » ne voudrait rien dire. - 4En 3ᵉ argument : clique sur la cellule qui contient le rang à consulter,
F7, au lieu du1écrit en dur de l'exemple précédent. Toute la souplesse est là, la formule ne bouge plus et c'est la cellule qui décide de la place lue. - 5Ferme la parenthèse et appuie sur Entrée, puis tape
2dansF7, puis3, et le résultat suit en déroulant le classement. Tu peux remplacer cette saisie par une liste déroulante, ou poser les numéros1,2et3dans une colonne en figeant le jeu en$F$4pour recopier la formule vers le bas.
=RANGMEMBRECUBE("ThisWorkbookDataModel"; F4; F7)F7. Tu passes donc tout le podium sans jamais rouvrir la formule : 1 donne Moniteur (8000), 2 donne Clavier (4000), 3 donne Souris (2000). C'est ce qui fait la différence avec l'exemple précédent, où le 1 était figé dans la formule et ne montrait jamais que le premier.Comment afficher le chiffre du premier membre en combinant la fonction RANGMEMBRECUBE et la fonction VALEURCUBE
Afficher le meilleur produit sans le montant qui va avec laisse ton lecteur à mi-chemin : « c'est l'écran, oui, mais combien ? ». Écrire ce montant à la main le condamne à devenir faux au premier changement de classement, et personne ne le remarquera. La fonction RANGMEMBRECUBE rend un membre que la fonction VALEURCUBE sait chiffrer.
- 1Dans une cellule, écris
=VALEURCUBE(. - 2En 1er argument : saisis le nom du modèle de données interne,
"ThisWorkbookDataModel". C'est le même que celui qu'interroge déjà la formule de la celluleF7. - 3En 2ᵉ argument : saisis entre guillemets la mesure à évaluer,
"[Measures].[Total CA]", qui porte le chiffre d'affaires total du cube. - 4En 3ᵉ argument : clique sur la cellule du membre gagnant,
F7, sans guillemets puisque c'est une référence et non du texte. Une formule RANGMEMBRECUBE y a d'abord placéMoniteur, et ce membre sert de filtre exactement comme l'aurait fait l'expression"[Ventes].[Produit].[Moniteur]"écrite en toutes lettres. - 5Ferme la parenthèse et appuie sur Entrée. La cellule rend
8000, le chiffre d'affaires du premier du classement, et le jour où la souris passe en tête le montant suit tout seul.
=VALEURCUBE("ThisWorkbookDataModel"; "[Measures].[Total CA]"; F7)8000 : le chiffre d'affaires du premier du classement, sans jamais nommer l'écran nulle part. Le jour où la souris passe en tête, le nom et le montant suivent ensemble.
Les erreurs fréquentes avec la fonction RANGMEMBRECUBE
Comme RANGMEMBRECUBE dialogue avec un cube externe, ses ratés viennent presque toujours de la liaison plutôt que d'une faute de calcul. Le #NOM? signale une connexion que ton classeur ne reconnaît pas (souvent une majuscule de travers dans le nom), et le #VALEUR! une expression MDX qui ne tient pas la route.
Les deux autres cas sont liés aux données : #REF! quand tu réclames un rang plus loin que le nombre de membres réellement présents, et une cellule vide ou #N/A quand le cube n'a pas été actualisé ou que le serveur est hors d'atteinte.
Erreur #NOM? : connexion introuvable
Excel ne trouve pas la connexion OLAP spécifiée dans le premier paramètre. Le nom est sensible à la casse ou ne correspond pas exactement à celui configuré dans le classeur.
Solution : Va dans Données > Connexions pour vérifier le nom exact de ta connexion OLAP. Copie-colle ce nom dans ta formule entre guillemets pour éviter toute erreur de frappe.
Erreur #REF! : rang hors limites
Tu demandes un rang qui n'existe pas dans le jeu. Par exemple, le rang 15 alors que le jeu ne contient que 10 membres.
Solution : Utilise MEMBRESENSEMBLECUBE pour compter les membres disponibles : =MEMBRESENSEMBLECUBE("Ventes"; "[Produit].[Top 10]"). Assure-toi que ton rang ne dépasse pas cette valeur, ou entoure la formule de SIERREUR.
Erreur #VALEUR! : expression MDX invalide
L'expression_jeu utilise une syntaxe MDX incorrecte ou référence une dimension qui n'existe pas dans le cube. Une parenthèse manquante ou un nom de dimension mal orthographié suffit.
Solution : Teste ton expression MDX dans SQL Server Management Studio ou dans l'outil de requête de ton serveur OLAP avant de l'utiliser dans Excel. Vérifie que les noms de dimensions et hiérarchies sont orthographiés exactement comme dans le cube.
Résultat vide ou #N/A : cube non actualisé
Les données du cube ne sont pas à jour ou la connexion n'est pas active. Excel retourne #N/A ou une cellule vide.
Solution : Actualise ta connexion OLAP via Données > Actualiser tout. Vérifie aussi que le serveur OLAP est accessible depuis ton réseau et que tes identifiants de connexion sont valides.
Questions fréquentes
Le rang commence à 1 pour le premier membre du jeu. Tu peux utiliser un rang positif pour classer depuis le début (1, 2, 3...), ou un rang négatif pour classer depuis la fin du jeu (-1 pour le dernier, -2 pour l'avant-dernier, etc.).
MEMBRECUBE retourne un membre spécifique par son nom ou chemin exact, tandis que RANGMEMBRECUBE récupère un membre selon sa position dans un classement dynamique du jeu OLAP. RANGMEMBRECUBE est idéal pour créer des Top N ou des classements qui évoluent avec les données.
Oui. Tu utilises RANGMEMBRECUBE avec des rangs de 1 à 10 pour récupérer les dix premiers membres d'un jeu trié. Combine-le avec VALEURCUBE pour afficher les valeurs associées à chaque membre et créer un tableau de classement complet qui se met à jour automatiquement.
L'erreur #REF! apparaît quand le rang demandé dépasse le nombre de membres dans le jeu. Utilise MEMBRESENSEMBLECUBE pour compter les membres disponibles et valider ton rang. Tu peux aussi entourer la formule de SIERREUR(...; "") pour afficher une cellule vide à la place de l'erreur.
RANGMEMBRECUBE fonctionne avec toutes les connexions OLAP configurées dans Excel (SQL Server Analysis Services, Power BI, etc.). Assure-toi simplement que ta connexion est active et que le cube contient bien les dimensions et mesures nécessaires.
Pour aller plus loin
Continue sur ta lancée après la fonction RANGMEMBRECUBE : la leçon associée, un modèle prêt à l'emploi et le guide pour progresser.
Tout voir



