Monsieur Excel
Pour tout savoir faire sur Excel !

05 avril 2011

Tutorial sur la fonction decaler()

Pour faire suite aux tutoriaux récents sur les trois fonctions fondamentales d'Excel, recherche(), index() et equiv(), il est approprié de jeter maintenant un coup d’œil sur la fonction decaler() qui a elle aussi une grande utilité.

La syntaxe est =decaler(référence;nb_lig;nb_col[;hauteur[;largeur]])

… où les crochets droits représentent des arguments facultatifs…

… et où hauteur et largeur sont le nombre de lignes et de colonnes à ramener…

La référence peut être la référence à une cellule ou à un bloc rectangulaire de cellules.

L’utilisation habituelle de la fonction decaler()

La syntaxe la plus courante est la formule =decaler(adresse;nb_lig;nb_col), grâce à laquelle on récupère le contenu de la cellule placée nb_lig en dessous et nb_col à droite de la cellule dont l’adresse est indiquée en premier argument.

Nous voyons une utilisation tout à fait classique de cette syntaxe dans les articles « Introduction à la fonction Decaler() » du 5 janvier 2007 et
« Paiement à 15 ou à 45 jours » du 9 janvier 2007, dont je vous conseille vivement la lecture.

Utiliser decaler() en deux dimensions

Il y a deux façons d’utiliser la fonction decaler() en deux dimensions :

● soit en prenant comme premier argument la référence à un bloc de cellules plutôt qu’à une cellule unique

● soit en utilisant les arguments facultatifs hauteur et largeur.

Ainsi, =decaler(A1:B3;2;3) renvoie la matrice D3:E5.

Si l’on entre cette formule normalement dans une cellule, on obtient le message #VALEUR !

Si l’on entre cette formule matriciellement (donc avec [Ctrl]-[Maj]-[Entrée]) dans une cellule, on obtient la valeur de D3.

Si enfin on l’entre matriciellement cette formule dans un bloc de trois lignes et deux colonnes, on récupère le contenu de la matrice A1:B3.

Maintenant si, dans un bloc de trois lignes et deux colonnes, vous entrez matriciellement la formule =decaler(A1;2;3;3;2), vous obtenez exactement le même résultat !

Donc, =decaler(A1:B3;2;3) et =decaler(A1;2;3;3;2) sont totalement équivalents, ce qui fait que je ne vois pas bien l’intérêt des deux derniers arguments, sauf peut-être dans une macro dans laquelle on n'a pas envie de s'embêter avec des lettres comme identificateurs de colonnes …

Appel aux lecteurs du blog !

Un lecteur pourra peut-être nous montrer une utilisation intelligente de la double double dimension, c’est-à-dire un exemple intéressant où le premier argument représente une matrice et où les deux arguments facultatifs sont utilisés (avec des valeurs différentes de 1 !)

7 Commentaire(s):

  • Tout simplement pour créer une plage de taille variable, et éviter ainsi d'avoir à créer par anticipation une plage "la plus large possible" et contenant des éléments non utilisés.
    Ou plus concrêtement, pour réaliser des graphiques dynamiques, dans lesquels les nombres de points ou de catégories (histogrammes ou pie charts notamment) sont variables : il suffit par exemple de créer des noms variables, définis grâce à des décaler de taille variables et d'utiliser ces noms en source du graphique !

    S.

    By Anonymous Anonyme, sur 10:23 AM  

  • Pourriez-vous SVP me mailer un ou deux exemples à thiriez@hec.fr ?

    J'aimerais les étudier pour voir si c'est effectivement la seule (ou la meilleure) solution pour ces problèmes.

    By Blogger Hervé Thiriez, sur 11:41 AM  

  • Ou encore, si on combine avec SOMME ou MOYENNE ou MIN ou MAX ou ..., on peut ainsi effectuer une opération sur la plage que la fonction DECALER nous renvoie.

    Exemple :
    =SOMME(DECALER(A1,2,2,2,2)) nous donnera la somme de C3:D4

    By Anonymous Anonyme, sur 10:52 PM  

  • Mais cela ne répond pas à ma question, à savoir un bon exemple où le premier argument est une matrice (et non une cellule isolée) et où les 4ème et 5ème arguments ne sont pas tous les deux "1"...

    By Blogger Hervé Thiriez, sur 2:14 PM  

  • J’ai voulu faire simple et vite, mais allons-y dans le détail s’il le faut :
    Imaginons un tableau contenant les données des ventes d’un produit. En lignes les années et en colonnes les mois de l’année.
    Ce tableau est nommé (dans le gestionnaire de nom) par « Tablo »
    On a ensuite 4 variables :
    A1 = Année de départ (1 à x)
    A2 = Nombre d’années
    A3 = Mois de départ ( 1 à 12)
    A4 = Nombre de mois
    Si on veut connaître la somme des ventes pour X années et Y Mois, on écrit :

    = SOMME(DECALER(Tablo,A1,A3,A2,A4))

    Exemple
    = SOMME(DECALER(Tablo,1,3,2,3)) nous donnerait la somme des ventes pour les années 1 et 2 et les mois 3 à 5 (mars à mai)

    On a donc un matrice et les 4e et 5e arguments ne sont pas des 1…

    By Anonymous Anonyme, sur 3:58 PM  

  • Deux remarques, cher Anonyme...

    1. Ce que vous obtenez avec cette formule, c'est la somme la somme des ventes pour les années 2 et 3 et les mois 4 à 6 (vous avez oublié que l'on décale depuis le début...). Ou alors la table est définie en incluant les titres de lignes et de colonnes...

    2. La formule =somme(decaler(Table,A1,A3,A2,A4)) joue le même rôle que la formule =somme(decaler(réf,A1,A3,A2,A4)) ou réf est l'adresse de la cellule supérieure gauche de la table.

    Ce qui ramène à ma remarque : aucun intérêt d'avoir une matrice en premier argument quand on utilise les arguments 4 et 5...

    By Blogger Hervé Thiriez, sur 10:29 PM  

  • Et ben moi ça m'est bien utile car j'utilise les formules matricielles pour résoudre des problèmes linéaires du type A X = B où A est une matrice et B un vecteur.

    Grâce à cette formule, le nombre de lignes est paramétrable par l'utilisateur, par exemple pour résoudre le problème en fonction du nombre de plaques dans un échangeurs, ou etc.

    By Anonymous Anonyme, sur 7:31 PM  

Enregistrer un commentaire

<< Accueil