IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Pierre Fauconnier

Power Query Excel : Récupérer une plage nommée

Noter ce billet
par , 21/12/2020 à 12h11 (758 Affichages)
Salut.

Question d'un de mes clients: Pierre, Power Query ne fait pas toujours ce que je veux lorsque je récupère une plage nommée? Ca marche comment, en fait?


Power Query permet de récupérer les plages nommées, mais traitera la plage différemment selon sa morphologie. A l'incorporation dans Power Query, les premières lignes de la plage sont analysées pour permettre à Power Query de déterminer le traitement qui sera opéré. Trois cas peuvent être distingués:
  1. La première ligne contient autre chose que du texte => Toutes les lignes sont des enregistrements et Power Query force le nom des colonnes en Column1, Column2, ...;
  2. La Plage ne contient que du texte => La première ligne est considérée comme un enregistrement et Power Query nomme les colonnes column1, Column2, ...;
  3. La plage contient au moins une valeur non textuelle dans "les lignes de données" ET la première ligne ne contient que du texte => La première ligne est considérée comme la ligne d'entête.


On peut résumer en disant: Si la plage contient uniquement du texte en première ligne et au moins une valeur non textuelle dans une des lignes suivantes, la première ligne est considérée comme étant la ligne d'entête. Dans les autres cas, toutes les lignes sont des enregistrements et Power Query crée la ligne d'entête avec Column suffixé de l'index de la colonne.

Il découle de ce qui précède que le contenu d'une cellule nommée sera déterminant lors de l'ajout de la requête dans Power Query.

Je précise ici que lorsque Power Query promeut la première ligne en entête, c'est par une étape qui est ajoutée à la requête et cette étape peut bien entendu être supprimée. La première étape est toujours la même quelle que soit la plage.


Récupération d'une plagemulti-lignes au départ d'Excel

Quelle que soit sa morphologie, on sélectionne l'entièreté de la plage(1) puis, via Données\Récupérer et transformer des données\A partir d'un tableau ou d'une plage, on crée la requête dans Power Query, et l'on remarque que c'est bien une table qui est récupérée. On remarque cependant que, dans le cas présent (rien que du texte dans les cellules de la plage), Power Query a créé ses propres entêtes et l'on doit promouvoir la première ligne en titre, car Power Query n'avait aucun élément pour déterminer que la première ligne constituait les entêtes de colonnes:

Nom : 2020-12-21_085053.png
Affichages : 257
Taille : 17,9 Ko

Nom : 2020-12-21_085141.png
Affichages : 240
Taille : 8,0 Ko

Nom : 2020-12-21_085218.png
Affichages : 251
Taille : 20,3 Ko

Nom : 2020-12-21_085245.png
Affichages : 241
Taille : 8,5 Ko



Si la plage nommée avait contenu autre chose que du texte dans au moins une cellule de données, la première ligne aurait directement été considérée comme ligne d'entête:

Nom : 2020-12-21_085545.png
Affichages : 245
Taille : 4,8 Ko

Nom : 2020-12-21_085605.png
Affichages : 252
Taille : 6,0 Ko


Récupération d'une cellule nommée

Power Query se comporte de façon identique avec une cellule nommée, c'est-à-dire une plage nommée constituée d'une seule cellule. Soit la cellule contient du texte et on obtient une table vide avec une colonne Column1 et la cellule "promue" en entête, soit on obtient une table d'une colonne Column1 avec la donnée non textuelle dans la ligne unique de la table:

Cellule nommée avec valeur textuelle

Nom : 2020-12-21_091813.png
Affichages : 252
Taille : 141,5 Ko

Cellule nommée avec valeur non textuelle

Nom : 2020-12-21_091923.png
Affichages : 253
Taille : 136,5 Ko


On voit donc ici que Power Query se comporte différemment selon le contenu de la plage, qu'elle soit mono ou multi-cellules. Dans les deux cas, la première étape est identique et permet de récupérer la table issue de la cellule nommée et cela crée une table d'une ligne et d'une colonne nommée Column1, puis l'étape de promotion est éventuellement ajoutée:
Code PowerQuery : Sélectionner tout - Visualiser dans une fenêtre à part
= Excel.CurrentWorkbook(){[Name="Chemin"]}[Content]

Nom : 2020-12-21_112727.png
Affichages : 252
Taille : 3,7 Ko


Récupération de la valeur de la cellule nommée

On peut adresser les lignes (les enregistrements, en fait, qui sont des objets Record) via leur index, en se souvenant que Power Query commence toujours ses index à 0 => {x}. On peut adresser une colonne de table par son nom => [Column]... On peut donc systématiquement récupérer la valeur de la cellule nommée via le code suivant en adaptant évidemment NomCelluleNommée au nom attribué dans Excel:
Code PowerQuery : Sélectionner tout - Visualiser dans une fenêtre à part
= Excel.CurrentWorkbook(){[Name="NomCelluleNommée"]}[Content]{0}[Column1]

Nom : 2020-12-21_114520.png
Affichages : 258
Taille : 68,3 Ko



(1) Lorsque l'on n'est ni dans un tableau structuré, ni dans la sélection complète d'une plage nommée, Excel crée un tableau structuré avant l'incorporation dans Power Query.

Envoyer le billet « Power Query Excel : Récupérer une plage nommée » dans le blog Viadeo Envoyer le billet « Power Query Excel : Récupérer une plage nommée » dans le blog Twitter Envoyer le billet « Power Query Excel : Récupérer une plage nommée » dans le blog Google Envoyer le billet « Power Query Excel : Récupérer une plage nommée » dans le blog Facebook Envoyer le billet « Power Query Excel : Récupérer une plage nommée » dans le blog Digg Envoyer le billet « Power Query Excel : Récupérer une plage nommée » dans le blog Delicious Envoyer le billet « Power Query Excel : Récupérer une plage nommée » dans le blog MySpace Envoyer le billet « Power Query Excel : Récupérer une plage nommée » dans le blog Yahoo

Commentaires