libre office calc et bases de données


libre office calc et bases de données

 

Version 4.1 Guide Calc Chapitre 13 Calc en tant que base de données simplifiée LibreOffice est une marque déposée de The Document Fondation Plus d?informations sur fr.libreoffice.org Copyright Ce document est Copyright © 2010?2013 par ses contributeurs tels que listés ci-dessous. Vous pouvez le distribuer et/ou le modifier sous les termes des licences GNU General Public License (http://www.gnu.org/licenses/gpl.html), version 3 ou ultérieure ou Creative Commons Attribution License (http://creativecommons.org/licenses/by/3.0/), version 3.0 ou ultérieure. Tous les noms de marque à l'intérieur de ce guide appartiennent à leur propriétaire légitime. Contributeurs Auteur : Christian Chenal Relecteurs : Philippe Clément Retours Veuillez envoyer vos commentaires ou suggestions à propos de ce document à : docfr.libreoffice.org Remerciements Ce chapitre est basé sur les Chapitres 13 de OpenOffice.org 3.3 Calc Guide (anglais), LibreOffice 4.0 Calc Guide (anglais) et LibreOffice 4.0 Guide Calc (français). Les contributeurs à ces chapitres sont : Andrew Pitonyak Barbara Duprey Jean Hollis Weber Simon Brydon Christian Chenal Philippe Clément Pierre-Yves Samyn Laurent Balland-Poirier Date de publication et version du logiciel Publié le 13 décembre 2013. Basé sur LibreOffice 4.1.1. Apparence de LibreOffice LibreOffice fonctionne sous les systèmes d'exploitation Windows, Linux et Mac OS X, chacun de ces systèmes pouvant exister sous plusieurs versions. Chacune de ces configurations peut donner lieu à des options d'affichage différentes (polices, couleurs, thèmes, gestionnaire de fenêtres, icônes). De plus, ces options d'affichage sont pour certaines personnalisables par les utilisateurs. Les illustrations de ce chapitre ont été réalisées sous Windows avec le jeu d'icônes Galaxy. Certaines images ne ressembleront donc pas exactement à ce que vous voyez sur votre ordinateur. En cas de confusion sur une icône, dont l'apparence peut être très différente d'un jeu à l'autre, vous pouvez vérifier son nom, qui apparaît dans l'infobulle lorsque vous placez le pointeur de la souris au-dessus. Note pour les utilisateurs Mac Certaines combinaisons de touches et certains éléments de menus sont différents entre un Mac et Windows ou Linux. La table ci-dessous donne quelques équivalents pour les instructions de ce chapitre. Pour une liste plus détaillée, voyez dans l'Aide. Windows/Linux Équivalent Mac Effet Sélection de menu Outils > Options LibreOffice > Préférences Accès aux options de paramétrage Clic droit ?+clic Ouvre un menu contextuel Ctrl (Contrôle) ? (Commande) Utilisé avec d'autres touches F5 Maj+?+F5 Ouvre le Navigateur F11 ?+T Ouvre la fenêtre Styles & Formatage Table des matières Copyright.........................................................................................................................................2 Apparence de LibreOffice................................................................................................................2 Note pour les utilisateurs Mac..........................................................................................................3 Introduction......................................................................................................................................5 Associer une plage à un nom...........................................................................................................6 Plage nommée............................................................................................................................6 Plage de base de données..........................................................................................................9 Tri...................................................................................................................................................11 Filtres.............................................................................................................................................12 AutoFiltres.................................................................................................................................12 Filtres standard..........................................................................................................................13 Filtres spéciaux.........................................................................................................................17 Manipuler des données filtrées..................................................................................................19 Fonctions de Calc similaires à des fonctions de base de données................................................20 Comptage et somme selon une condition de recherche : NB.SI et SOMME.SI.........................21 Comptage et somme selon plusieurs conditions de recherche : NBSIENS et SOMMESIENS. .22 Ignorer les cellules filtrées avec SOUS.TOTAL.........................................................................22 Utiliser des formules pour trouver des données.........................................................................23 Rechercher un bloc de données en utilisant RECHERCHEV...............................................23 Rechercher un bloc de données en utilisant RECHERCHEH...............................................24 Rechercher une ligne ou une colonne avec RECHERCHE...................................................24 Utiliser EQUIV pour trouver l'index d'une valeur dans une plage..........................................25 Exemples..............................................................................................................................25 Retourner une chaîne pour l'adresse de la cellule avec ADRESSE...........................................26 Convertir une chaîne en cellule ou en plage avec INDIRECT...................................................27 Renvoyer une cellule ou une plage par rapport à une autre avec DECALER............................27 Renvoyer une cellule à l'intérieur d'une plage avec INDEX.......................................................28 Fonctions particulières aux plages de données.............................................................................29 Conclusion.....................................................................................................................................30 Calc en tant que base de données simplifiée 4 Introduction Un document Calc peut constituer une base de données simplifiée, disposant de fonctionnalités suffisantes pour satisfaire les besoins de certains utilisateurs. Ce chapitre présente les capacités d'un document Calc qui le rendent acceptable en tant qu'outil simplifié de base de données. Quand c'est possible, les fonctionnalités sont expliquées en utilisant à la fois l'interface graphique et les macros. Note Bien que ce document ait été initialement créé pour des programmeurs de macros, son contenu devrait être accessible à tous les utilisateurs. Voir le Chapitre 12 (Macros Calc) pour plus d'informations sur les macros. La documentation en anglais sur les interfaces à utiliser dans les macros est disponible sur le site http://api.libreoffice.org rubrique IDL Reference. Si vous n'utilisez pas les macros, vous pouvez sauter les portions correspondantes. Dans une base de données, un enregistrement est un groupe d'éléments de données liés entre eux et traités comme une seule unité d'information. Chaque élément dans l'enregistrement est appelé un champ. Une table est un ensemble d'enregistrements. Chaque enregistrement, à l'intérieur d'une table, a la même structure. Une table peut être vue comme une série de lignes et de colonnes. Chaque ligne de la table correspond à un seul enregistrement et chaque colonne correspond aux différents champs. Une feuille d'un document Calc a une structure similaire à une table de base de données. Chaque cellule correspond à un champ dans un enregistrement de base de données. Les fonctionnalités de base de données de Calc sont suffisantes pour certains utilisateurs et permettent de se dispenser d'un programme de gestion de base de données, tel que Base. Dans l'enseignement, un classeur peut être utilisé pour gérer les notes des étudiants. Chaque ligne correspond à un seul étudiant. Les colonnes représentent les différentes notes reçues au cours des tests ou de leurs travaux personnels (voir Figure 1). Figure 1 : Feuille des notes des élèves Note Bien que le choix d'associer un enregistrement à une ligne plutôt qu'à une colonne soit arbitraire, cette convention est pratiquement universelle. En d'autres termes, il est peu probable que quelqu'un fasse référence à une colonne de données en tant qu'enregistrement individuel de base de données. Introduction 5 Associer une plage à un nom Dans un document Calc, une plage fait référence à un groupe de cellules contiguës contenant au moins une cellule. Vous pouvez associer un nom significatif à une plage, ce qui vous permet de faire référence à celle-ci en utilisant ce nom. Vous pouvez créer soit une plage base de données, qui comporte des fonctionnalités ressemblant aux bases de données, soit une plage nommée, qui n'en comporte pas. Un nom est habituellement associé à une plage pour l'une de ces trois raisons : 1) Associer un nom à une plage améliore la lisibilité grâce à l'utilisation d'un nom significatif. 2) Si une plage est référencée par son nom à partir de plusieurs endroits, vous pouvez faire pointer ce nom sur un autre emplacement et toutes les références suivront. 3) Les plages associées à un nom sont affichées dans le Navigateur, qui est disponible en appuyant sur la touche F5 ou en cliquant sur l'icône Navigateur. Le Navigateur permet une navigation rapide vers les plages nommées. Plage nommée L'utilisation la plus répandue d'une plage nommée est d'associer une plage de cellules à un nom significatif. Par exemple, créez une plage appelée NotesTest1 et utilisez ensuite la formule suivante : =SOMME(NotesTest1). Pour créer une plage nommée, sélectionnez la plage à définir. Utilisez Insertion > Noms > Définir pour ouvrir la boîte de dialogue Définir un nom. Vous pouvez créer les plages nommées une par une. Figure 2 : Définir une plage nommée Dans une macro, une plage nommée est accédée, créée et supprimée en utilisant le service NamedRanges d'un document Calc. Utilisez les méthodes hasByName(nom) et getByName(nom) pour vérifier l'existence et renvoyer une plage nommée. La méthode getElementNames() renvoie un tableau contenant les noms de toutes les plages nommées. Un objet NamedRanges supporte la méthode addNewByName, qui accepte quatre arguments : le nom, le contenu, la position et le type. La macro du Listing 1 crée une plage nommée, si elle n'existe pas déjà, qui référence une plage de cellules. Associer une plage à un nom 6 Listing 1. Créer une plage nommée qui référence $Feuille1.$B$3:$D$6. Sub AjoutPlageNommee() Dim oPlage ' La plage nommée. Dim oPlages ' Toutes les plages nommées. Dim sNom$ ' Nom de la plage nommée à créer. Dim oCell ' Objet cellule. Dim s$ sNom$ = "MaPlage" oPlages = ThisComponent.NamedRanges If NOT oPlages.hasByName(sNom$) Then REM Définir une adresse de cellule. Dim oCellAdresse As new com.sun.star.table.CellAddress oCellAdresse.Sheet = 0 'La première feuille. oCellAdresse.Column = 1 'Colonne B. oCellAdresse.Row = 2 'Ligne 3. REM Argument 1 : nom de la plage. REM Argument 2 : formule ou expression à utiliser. REM Habituellement une chaîne qui définit une plage. REM Argument 3 : adresse de base pour les références relatives. REM Argument 4 : nombre qui définit comment la plage est utilisée. REM Habituellement 0. REM Voir Tableau 1 pour les valeurs possibles. s$ = "$Feuille1.$B$3:$D$6" oPlages.addNewByName(sNom$, s$, oCellAdresse, 0) End If REM Obtenir une plage à partir de la plage nommée créée oPlage = ThisComponent.NamedRanges.getByName(sNom$) REM Affiche la chaîne contenue de la cellule $Feuille1.$B$3 oCell = oPlage.getReferredCells().getCellByPosition(0,0) Print oCell.getString() End Sub Le quatrième argument de la méthode addNewByName() est la somme des valeurs des indicateurs qui précisent comment la plage nommée va être utilisée (voir Tableau 1). La valeur ordinaire est 0, qui n'est pas une valeur constante définie. Tableau 1. Constantes com.sun.star.sheet.NamedRangeFlag Valeur Nom Description 1 FILTER_CRITERIA La plage contient des critères de filtre. 2 PRINT_AREA La plage peut être utilisée comme plage d'impression. 4 COLUMN_HEADER La plage peut être utilisée comme en-têtes de colonnes pour l'impression. 8 ROW_HEADER La plage peut être utilisée comme en-têtes de lignes pour l'impression. Le troisième argument, une adresse de cellule, sert d'adresse de base pour les cellules avec une référence relative. Si la plage de cellule n'est pas définie avec une adresse absolue, la plage référencée sera différente selon l'endroit du classeur où elle sera utilisée. Le comportement en relatif est illustré Listing 2, qui présente également une autre utilisation d'une plage nommée, la définition d'une formule. La macro du Listing 2 crée une plage nommée AjoutGauche, qui fait Associer une plage à un nom 7 référence à la formule A3+B3 avec C3 en tant que cellule de référence. Les cellules A3 et B3 sont les deux cellules directement à gauche de C3, et donc la formule =AjoutGauche calcule la somme des deux cellules à la gauche de la cellule qui contient cette formule. Dans ce listing, si vous modifiez la cellule de référence en C4, qui se trouve en dessous de A3 et B3, cela modifiera la formule AjoutGauche, qui va alors calculer la somme des deux cellules sur la gauche et sur la ligne précédente. Listing 2. Crée la plage nommée AjoutGauche Sub AjoutFonctionNommee() Dim oFeuille 'Feuille qui contient la plage nommée. Dim oCellAdresse 'Adresse pour les références relatives. Dim oPlages 'Objet NamedRanges. Dim oPlage 'Plage de cellules. Dim sNom As String 'Nom de la fonction à créer. sNom = "AjoutGauche" oPlages = ThisComponent.NamedRanges If NOT oPlages.hasByName(sNom) Then oFeuille = ThisComponent.getSheets().getByIndex(0) oPlage = oFeuille.getCellRangeByName("C3") oCellAdresse = oPlage.getCellAddress() oPlages.addNewByName(sNom, "A3+B3", oCellAdresse, 0) End If End Sub Note Le Listing 2 illustre deux possibilités peu connues. Une plage nommée peut définir une fonction. Le troisième argument sert d'adresse de base pour les cellules référencées de façon relative. Sélectionnez la plage contenant les en-têtes et les données, puis utilisez Insertion > Noms > Créer pour ouvrir la boîte de dialogue Créer des noms (Figure 3), qui vous permet de créer simultanément plusieurs plages nommées basées sur la ligne supérieure, la colonne gauche, la ligne inférieure ou la colonne droite. Si vous choisissez de créer des plages basées sur la ligne supérieure, une plage nommée est créée pour chaque en-tête de colonne (l'en-tête lui-même n'est pas inclus dans la plage) et a pour nom le texte de cet en-tête. Figure 3 : Définir des plages nommées avec les en-têtes Note Le nom associé à une plage nommée ne peut contenir que des lettres, des nombres et des soulignements. Insertion > Noms > Créer remplace automatiquement les caractères « interdits » par un soulignement. Associer une plage à un nom 8 La macro du Listing 3 crée trois plages nommées basées sur la ligne supérieure d'une plage. Listing 3. Créer plusieurs plages nommées d'après les en-têtes de colonne. Sub AjoutPlagesEntete() Dim oFeuille 'Feuille qui contient la plage nommée. Dim oAdresse 'Adresse de la plage. Dim oPlages 'Objet NamedRanges. Dim oPlage 'Plage de cellules. oPlages = ThisComponent.NamedRanges oFeuille = ThisComponent.getSheets().getByIndex(0) oPlage = oFeuille.getCellRangeByName("A1:C20") oAdresse = oPlage.getRangeAddress() oPlages.addNewFromTitles(oAdresse, com.sun.star.sheet.Border.TOP) End Sub Les constantes du Tableau 2 déterminent l'emplacement des en-têtes quand plusieurs plages sont créées avec la méthode addNewFromTitles(). Tableau 2 . Constantes com.sun.star.sheet.Border Valeur Nom Description 0 TOP Sélectionne la ligne supérieure. 1 BOTTOM Sélectionne la ligne inférieure. 2 RIGHT Sélectionne la colonne droite. 3 LEFT Sélectionne la colonne gauche. Attention Il est possible de créer plusieurs plages nommées avec le même nom. Créer plusieurs plages nommées en une seule commande augmente la probabilité que le même nom soit employé plusieurs fois, ce que vous devriez éviter si possible. Plage de base de données Bien qu'une plage de base de données puisse être utilisée comme une plage nommée ordinaire, elle définit également une plage de cellules dans un classeur qui peuvent être utilisées comme base de données. Chaque ligne de la plage correspond à un enregistrement et chaque cellule de la ligne correspond à un champ. Vous pouvez trier, grouper, rechercher et effectuer des calculs avec la plage comme si c'était une base de données. Une plage de base de données fournit des fonctionnalités qui sont utiles quand vous avez une activité liée aux bases de données. Par exemple, vous pouvez définir la première ligne en tant qu'en-têtes. Pour créer, modifier ou supprimer une plage de base de données, utilisez Données > Définir la plage pour ouvrir la boîte de dialogue Définir une plage de base de données (voir Figure 4). Le bouton s'intitule Nouveau ou Modifier selon l'existence d'une plage de base de données ou non. Associer une plage à un nom 9 Figure 4 : Définir une plage de base de données Dans une macro, une plage de base de données est accédée, créée et supprimée à partir du service DatabaseRanges. La macro du Listing 4 crée une plage de base de données appelée MonNom et paramètre la plage pour être utilisée avec des AutoFiltres. Listing 4. Crée une plage de base de données avec un AutoFiltre. Sub AjoutPlageBD() Dim oPlage 'Objet DatabaseRange. Dim oAdr 'Adresse de la plage pour la plage de base de données. Dim oFeuille 'Première feuille, qui va contenir la plage. Dim oDoc 'Référence ThisComponent avec un nom court. oDoc = ThisComponent If NOT oDoc.DatabaseRanges.hasByName("MonNom") Then oFeuille = ThisComponent.getSheets().getByIndex(0) oPlage = oFeuille.getCellRangeByName("A1:G16") oAdr = oPlage.getRangeAddress() oDoc.DatabaseRanges.addNewByName("MonNom", oAdr) End If oPlage = oDoc.DatabaseRanges.getByName("MonNom") oPlage.AutoFilter = True End Sub Associer une plage à un nom 10 Tri Le mécanisme de tri dans un document Calc réorganise les données dans la feuille. La première étape est de sélectionner les données que vous voulez trier. Pour trier les données de la Figure 1, sélectionnez les cellules de A1 à G16 ; si vous incluez les en-têtes de colonne, indiquez-le dans la boîte de dialogue Tri (voir Figure 6). Utilisez Données > Trier pour ouvrir la boîte de dialogue Tri (voir Figure 5). Le nombre de clés de tri est illimité. La définition de la clé de tri 3 fait apparaître la clé de tri 4, et ainsi de suite. Figure 5 : Tri selon la colonne Nom Cliquez sur l'onglet Options (voir Figure 6) pour déterminer les options de tri. Cochez la case La plage contient des étiquettes de colonne pour éviter que les en-têtes de colonne soient triés avec les autres données. Si cette case est cochée, la liste déroulante Trier par de la Figure 5 affiche les en-têtes de colonne plutôt que la lettre de leur identifiant (Colonne A par exemple). Astuce Pour que les en-têtes de colonne soient automatiquement détectés, il faut que chaque case de la première ligne contienne un texte : pas de cellule vide ; de plus, si une cellule contient une valeur numérique, elle doit être formatée en texte. Normalement, le tri des données remplace les données existantes par les données nouvellement triées. La case Copier le résultat du tri à permet de conserver les données telles quelles et de créer une copie des données triées à un emplacement à spécifier. Vous pouvez soit saisir directement l'adresse cible (Feuille3.A1 par exemple) ou sélectionner une plage définie. Cochez Ordre de tri personnalisé pour effectuer un tri selon une liste de valeurs prédéfinie. Pour paramétrer vos propres listes, utilisez Outils > Options > LibreOffice Calc > Listes de tri et saisissez vos propres listes de tri. Les listes de tri prédéfinies sont utiles pour trier des données Tri 11 autrement que selon un ordre alphabétique ou numérique ; par exemple, pour trier les jours de la semaine selon leur nom. Figure 6 : Paramétrer les options de tri Attention Quand une cellule est déplacée au cours d'une opération de tri, les références externes à cette cellule ne sont pas mises à jour. Si une cellule qui contient une référence relative à une autre cellule est déplacée, la référence est relative à la nouvelle position une fois le tri terminé. Soyez conscient de ce comportement des références au cours d'un tri et ne soyez pas alarmé : cela correspond généralement à ce que vous voulez, parce que la référence se trouve souvent à droite ou à gauche dans la même ligne. Ce comportement est celui d'autres programmes de tableurs. Filtres Utilisez les filtres pour limiter les lignes visibles dans un classeur. Les filtres génériques, communs à toutes sortes de manipulations de données, sont fournis automatiquement par la fonctionnalité d'AutoFiltre. Vous pouvez également définir vos propres filtres. AutoFiltres Utilisez les AutoFiltres pour créer rapidement des filtres facilement accessibles et couramment utilisés dans différents types d'applications. Après la création d'un AutoFiltre pour une colonne particulière, une liste déroulante est ajoutée à cette colonne. Cette liste permet un accès rapide à chaque type d'AutoFiltre. ? L'AutoFiltre Tout rend visibles toutes les lignes. ? L'AutoFiltre Filtre standard ouvre la boîte de dialogue Filtre standard et est identique au filtre standard. Filtres 12 ? L'AutoFiltre Top 10 affiche les 10 lignes ayant les valeurs les plus fortes. Si la valeur 70 est dans les 10 plus fortes valeurs, toutes les lignes qui contiennent la valeur 70 dans la colonne filtrée sont alors affichées. Ceci peut avoir comme conséquence que plus de 10 lignes soient affichées. ? Une entrée d'AutoFiltre est créée pour chaque valeur unique de la colonne. Pour créer un AutoFiltre, sélectionnez tout d'abord les colonnes à filtrer. Par exemple, avec les données de la Figure 1, sélectionnez les données des colonnes B et C. Si vous ne sélectionnez pas la ligne de titres, Calc demande si la ligne de titres ou la ligne actuelle devrait être utilisée. Vous pouvez placer l'AutoFiltre sur n'importe quelle ligne, et seules les lignes en dessous de l'AutoFiltre seront filtrées. Utilisez Données > Filtres > AutoFiltre pour insérer la liste déroulante de l'AutoFiltre dans la cellule appropriée. Enfin, utilisez la flèche de la liste déroulante pour choisir l'AutoFiltre voulu (voir Figure 7). Figure 7 : Utiliser l'AutoFiltre de la colonne C Supprimez un AutoFiltre en répétant les étapes pour créer un AutoFiltre. En d'autres termes, l'option de menu agit comme un interrupteur pour activer ou non l'AutoFiltre. Quand un AutoFiltre est supprimé, la liste déroulante est enlevée de la cellule. La macro du Listing 4, page 10, illustre la création d'un AutoFiltre pour une plage. Filtres standard Utilisez Données > Filtres > Filtre standard pour ouvrir la boîte de dialogue Filtre standard (voir Figure 8) et limiter l'affichage de 1 à 8 conditions. Utilisez Données > Filtres > Supprimer le filtre pour désactiver le filtre. Filtres 13 Figure 8 : Utiliser le filtre standard La macro du Listing 5 crée un filtre simple dans la première feuille. Listing 5. Créer un filtre simple. Sub FiltreSimple() Dim oFeuille ' Feuille qui va contenir le filtre. Dim oFiltreDesc ' Descripteur de filtre. Dim oChamps(0) As New com.sun.star.sheet.TableFilterField oFeuille = ThisComponent.getSheets().getByIndex(0) REM Si l'argument est vrai, crée un descripteur de filtre REM vide. Si l'argument est faux, crée un descripteur REM avec les paramètres précédents. oFiltreDesc = oFeuille.createFilterDescriptor(True) With oChamps(0) REM Vous pourriez utiliser la propriété Connection pour REM indiquer la liaison avec le champ précédent. C'est le REM premier champ, ce n'est donc pas nécessaire. '.Connection = com.sun.star.sheet.FilterConnection.AND '.Connection = com.sun.star.sheet.FilterConnection.OR REM La propriété Field est le numéro de colonne, REM à partir de 0, à filtrer. Si vous avez la cellule, REM vous pouvez utiliser oCell.CellAddress.Column. .Field = 5 REM Comparer un nombre ou une chaîne ? .IsNumeric = True Filtres 14 REM La proriété NumericValue est utilisée REM à cause du .IsNumeric = True ci-dessus. .NumericValue = 80 REM Si IsNumeric était faux, la propriété REM StringValue serait alors utilisée. REM .StringValue = "test" REM Les opérateurs valides sont EMPTY, NOT_EMPTY, EQUAL, REM NOT_EQUAL, GREATER, GREATER_EQUAL, LESS, REM LESS_EQUAL, TOP_VALUES, TOP_PERCENT, REM BOTTOM_VALUES et BOTTOM_PERCENT .Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL End With REM Le descripteur de filtre comporte les propriétés suivantes : REM IsCaseSensitive, SkipDuplicates, UseRegularExpressions, REM SaveOutputPosition, Orientation, ContainsHeader, REM CopyOutputData, OutputPosition, and MaxFieldCount. oFiltreDesc.setFilterFields(oChamps()) oFiltreDesc.ContainsHeader = True oFeuille.filter(oFiltreDesc) End Sub Quand un filtre est appliqué à la feuille, il remplace tout filtre déjà existant dans cette feuille. Paramétrer un filtre vide dans la feuille revient à supprimer le filtre précédent (voir Listing 6). Listing 6. Supprimer le filtre de la feuille en cours. Sub SupprimerFiltre() Dim oFeuille ' Feuille à filtrer. Dim oFiltreDesc ' Descripteur de filtre. oFeuille = ThisComponent.getSheets().getByIndex(0) oFiltreDesc = oFeuille.createFilterDescriptor(True) oFeuille.filter(oFiltreDesc) End Sub Les techniques présentées ci-dessus appliquent ou suppriment un filtre à la feuille. Toutefois, dans la plupart des cas, il ne sera pas possible de procéder ainsi : ? La plage ne commence pas nécessairement en A1. ? La feuille peut comprendre autre chose que la plage à filtrer. ? L'utilisateur peut avoir déplacé la plage dans la feuille ou une autre feuille. Les plages de base de données abordées page 9 permettent de s'affranchir de ces limites, car elles peuvent être filtrées et elles « suivent » le déplacement de leur plage de référence. Le Listing 7 illustre cette technique. Il montre comment accéder à une plage de base de données puis « remonter » à la plage de référence pour appliquer un filtre plus avancé qui filtre deux colonnes et utilise des expressions régulières. Le programme se termine par l'application d'un filtre simple sur une autre plage, figurant ou non sur la même feuille. L'exemple de la Figure 9 pourrait compléter les données de la Figure 1 ; la plage Plage2 doit être définie par la commande Données > Définir la plage. Filtres 15 Listing 7. Filtre simple utilisant deux colonnes. Sub FiltreSimple_2() dim LibODataRange as object, LibOFiltre as object dim LibOChampFiltre1(1) As New com.sun.star.sheet.TableFilterField dim LibOChampFiltre2(0) As New com.sun.star.sheet.TableFilterField ' Accès à une plage de données par son nom LibODataRange = thiscomponent.DatabaseRanges.getByName("MonNom") ' Crée un descripteur de filtre vide sur la plage référencée LibOFiltre = LibODataRange.referredCells.createFilterDescriptor(true) with LibOFiltre 'Les paramètres généraux .ContainsHeader = true 'La première ligne = en-tête de colonnes '.CopyOutputData = true 'Copierait le résultat ailleurs 'Où voudrait-on le résultat '.OutputPosition=LibOFeuilleDest.getCellRangeByName("A3").CellAddress .UseRegularExpressions = true 'Utilise les expressions régulières end with 'Ci-dessous les paramètres par colonne (ici deux colonnes de filtre) ' Paramètre un champ pour afficher les élèves ' dont le nom commence par la lettre t. with LibOChampFiltre1(0) .Field = 0 'Filtre la colonne A .IsNumeric = false 'Utilise une chaîne et non un nombre. .Operator = com.sun.star.sheet.FilterOperator.EQUAL .StringValue = "t.*" 'Tout ce qui commence par t end with ' Paramètre le champ Moyenne qui a une valeur supérieure ou égale ' à 80 et qui réponde aux deux conditions. with LibOChampFiltre1(1) .Connection = com.sun.star.sheet.FilterConnection.AND .Field = 5 'Filtre la colonne F .IsNumeric = true 'Utilise un nombre .Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL Filtres 16 Figure 9: Deuxième plage à filtrer .NumericValue = 80 'Valeurs supérieures ou égales à 80 end with 'Passe les param. "colonnes" au filtre LibOFiltre.setFilterFields(LibOChampFiltre1()) LibODataRange.referredCells.filter(LibOFiltre) 'Applique le filtre ' Accès à une plage de données par son nom LibODataRange = thiscomponent.DatabaseRanges.getByName("Plage2") ' Crée un descripteur de filtre vide sur la plage référencée LibOFiltre = LibODataRange.referredCells.createFilterDescriptor(true) with LibOFiltre 'Les paramètres généraux .ContainsHeader = true 'La première ligne = en-tête de colonnes .UseRegularExpressions = false 'Pas d'expressions régulières end with 'Paramètres par colonne (ici une seule colonne de filtre) 'Filtre les élèves plus âgés que 25 ans with LibOChampFiltre2(0) .Field = 1 'Filtre colonne B .IsNumeric = true 'Utilise un nombre .Operator = com.sun.star.sheet.FilterOperator.GREATER .NumericValue = 25 'Valeurs supérieures à 25 end with 'Passe les param. "colonnes" au filtre LibOFiltre.setFilterFields(LibOChampFiltre2()) LibODataRange.referredCells.filter(LibOFiltre) 'Applique le filtre End Sub Filtres spéciaux Un filtre spécial supporte jusqu'à huit conditions, comme un filtre standard. Les critères d'un filtre spécial sont stockés dans la feuille. La première étape de la création d'un filtre spécial est de saisir le critère de filtre dans le classeur. 1) Sélectionnez un emplacement vide dans le document Calc. Cet emplacement peut se situer à n'importe quel endroit de n'importe quelle feuille du classeur. 2) Dupliquez les en-têtes de colonnes depuis la zone à filtrer vers la zone qui contiendra les critères de filtre. 3) Saisissez les critères de filtre en dessous des en-têtes de colonnes (voir Figure 10). Les critères de chaque colonne d'une même ligne sont liés entre eux par des ET. Les critères de chaque ligne sont liés entre eux par des OU. Figure 10 : Exemple de critères de filtre spécial Filtres 17 Astuce Définissez des plages nommées pour référencer vos critères de filtre spécial et la plage de destination pour les données filtrées (voir Figure 2). Chaque plage nommée définie est disponible dans les listes déroulantes de la boîte de dialogue Filtre spécial (voir Figure 11). Après avoir créé un ou plusieurs ensembles de critères de filtre, appliquez un filtre spécial comme ceci : 1) Sélectionnez la plage qui contient les données à filtrer (double-clic sur le nom de la plage dans le Navigateur ou Ctrl+*). 2) Utilisez Données > Filtre > Filtre spécial pour ouvrir la boîte de dialogue Filtre spécial (voir Figure 11). 3) Sélectionnez la plage qui contient les critères de filtre et choisissez les autres options. Cliquez sur OK. Figure 11 : Appliquer un filtre spécial Appliquer un filtre spécial en utilisant une macro est assez simple (voir Listing 8). La plage de cellules qui contient les critères de filtre est utilisée pour créer le descripteur de filtre qui est utilisé pour filtrer la plage contenant les données. Listing 8. Utiliser un filtre spécial. Sub MonFiltreSpecial() Dim oFeuille 'Une feuille du document Calc. Dim oPlages 'Propriété NamedRanges. Dim oCritPlage 'Plage qui contient les critères de filtre. Dim oDonnPlage 'Plage qui contient les données à filtrer. Dim oFiltDesc 'Descripteur de filtre. REM Plage qui contient les critères de filtre oFeuille = ThisComponent.getSheets().getByIndex(0) oCritPlage = oFeuille.getCellRangeByName("A23:F25") REM Vous pouvez également obtenir la plage contenant les critères REM de filtre à partir d'une plage nommée. REM oPlages = ThisComponent.NamedRanges REM oPlage = oPlages.getByName("Criteres80") REM oCritPlage = oPlage.getReferredCells() REM Données que vous voulez filtrer oFeuille = ThisComponent.getSheets().getByIndex(0) Filtres 18 oDonnPlage = oFeuille.getCellRangeByName("A1:F16") oFiltDesc = oCritPlage.createFilterDescriptorByObject(oDonnPlage) oDonnPlage.filter(oFiltDesc) End Sub Modifiez les propriétés du descripteur de filtre pour modifier le comportement du filtre (voir Tableau 3). Tableau 3. Propriétés du filtre spécial Propriété Commentaire ContainsHeader Booléen (vrai ou faux) qui indique si la première ligne (ou colonne) contient des en-têtes qui ne doivent pas être filtrés. CopyOutputData Booléen qui indique si les données filtrées doivent être copiées à un autre endroit du document. IsCaseSensitive Booléen qui indique si la casse des lettres doit être prise en compte lors de l'application des critères de filtre. Orientation Indique si les colonnes (com.sun.star.table.TableOrientation.COLUMNS) ou les lignes (com.sun.star.table.TableOrientation.ROWS) sont filtrées. OutputPosition Si CopyOutputData est vrai, indique l'adresse de la cellule où les données filtrées doivent être copiées. SaveOutputPosition Booléen qui indique si l'emplacement OutputPosition est enregistré pour des appels ultérieurs. SkipDuplicates Booléen qui indique si les valeurs en double sont enlevées du résultat. UseRegularExpression Booléen qui indique que les chaînes de filtre sont interprétées comme des expressions régulières. Le filtre créé dans le Listing 8 laisse les données filtrées à leur emplacement initial. Modifiez la propriété OutputPosition pour indiquer un emplacement de destination différent (voir Listing 9). Le descripteur de filtre doit être modifié avant l'application du filtre. Listing 9. Copier le résultat du filtre à un autre emplacement. REM Copier les données filtrées à un autre emplacement oFiltDesc.CopyOutputData = True REM Créer une CellAddress et la fixer dans Feuille2, REM Colonne B, Ligne 4 Dim x As New com.sun.star.table.CellAddress x.Sheet = 2 x.Column = 1 x.Row = 3 oFiltDesc.OutputPosition = x Manipuler des données filtrées Les données filtrées copiées à un autre emplacement peuvent être sélectionnées, modifiées et supprimées à volonté. Les données qui ne sont pas copiées nécessitent toutefois une attention spéciale, parce que les lignes qui ne correspondent pas aux critères de filtre sont simplement masquées. LibreOffice se comporte différemment selon la façon dont les cellules ont été masquées et selon l'opération effectuée. Filtres 19 Les cellules peuvent avoir été masquées par un regroupement, un filtre de données ou par la commande Masquer. Lorsque les données sont déplacées par un glisser-déposer ou par un copier-coller, toutes les cellules sont déplacées, y compris les cellules masquées. Cependant, lors de la copie des données, les données filtrées ne comprennent que les cellules visibles, alors que les données cachées par un regroupement ou la commande Masquer sont également copiées. Fonctions de Calc similaires à des fonctions de base de données Bien que chaque fonction de Calc puisse être utilisée pour manipuler des bases de données, les fonctions du Tableau 4 sont celles le plus souvent utilisées dans ce but. Certains noms de fonction ne diffèrent que par leur dernière lettre : MOYENNE et MOYENNEA par exemple. Les fonctions qui ne se terminent pas par la lettre A ne prennent en compte que les valeurs numériques et les cellules qui contiennent du texte ou qui sont vides sont ignorées. Les fonctions correspondantes qui se terminent par la lettre A considèrent les valeurs texte comme un nombre de valeur zéro ; les cellules vides sont toujours ignorées. Tableau 4. Fonctions fréquemment utilisées en tant que fonctions de base de données Fonction Description DECALER Renvoie la valeur d'une cellule décalée d'un certain nombre de lignes et de colonnes à partir d'un point de référence. ECARTYPE Estime l'écart-type à partir d'un échantillon. ECARTYPEA Estime l'écart-type à partir d'un échantillon. Les textes ont une valeur 0. ECARTYPEP Calcule l'écart-type à partir de la population entière. EQUIV Renvoie la position relative d'un élément dans une matrice, correspondant à une valeur spécifiée. INDEX Renvoie le contenu d'une cellule, spécifiée par le numéro de la ligne et de la colonne ou par un index de plage facultatif. INDIRECT Renvoie la référence spécifiée par une chaîne de texte. MAX Renvoie la valeur numérique maximum dans une liste d'arguments. MAXA Renvoie la valeur numérique maximum dans une liste d'arguments. Les textes ont une valeur 0. MEDIANE Renvoie la médiane d'un ensemble de nombres. MIN Renvoie la valeur numérique minimum dans une liste d'arguments. MINA Renvoie la valeur numérique minimum dans une liste d'arguments. Les textes ont une valeur 0. MODE Renvoie la valeur la plus fréquente dans un ensemble de données. S'il y a plusieurs valeurs avec la même fréquence, renvoie la plus petite de ces valeurs. Une erreur se produit si aucune valeur n'apparaît deux fois ou plus. MOYENNE Renvoie la moyenne. Ignore les cellules vides et celles qui contiennent du texte. MOYENNEA Renvoie la moyenne. Les textes ont une valeur 0. Ignore les cellules vides. NB Compte le nombre de valeurs numériques. Ignore les valeurs texte. NBVAL Compte le nombre de valeurs. Ignore les cellules vides. NB.SI Renvoie le nombre de cellules qui correspondent au critère de recherche. Fonctions de Calc similaires à des fonctions de base de données 20 Fonction Description NB.VIDE Renvoie le nombre de cellules vides. NBSIENS Renvoie le nombre de cellules qui correspondent à plusieurs critères de recherche dans plusieurs plages. PRODUIT Renvoie le produit des cellules. RECHERCHE Renvoie le contenu d'une cellule parmi une plage d'une colonne seule, d'une ligne seule ou d'une matrice. RECHERCHEH Recherche une valeur particulière parmi les colonnes de la première ligne d'une matrice. Renvoie la valeur d'une autre ligne dans cette colonne. RECHERCHEV Recherche une valeur particulière parmi les lignes de la première colonne d'une matrice. Renvoie la valeur d'une autre colonne dans cette ligne. SOMME Renvoie la somme. SOMME.SI Calcule la somme des cellules qui correspondent au critère de recherche. SOMMESIENS Calcule la somme des cellules qui correspondent à plusieurs critères de recherche dans plusieurs plages. SOUS.TOTAL Calcule un sous-total selon la fonction spécifiée. VAR Estime la variance à partir d'un échantillon. VARA Estime la variance à partir d'un échantillon. Les textes ont une valeur 0. VAR.P Calcule la variance à partir de la population entière. VAR.PA Calcule la variance à partir de la population entière. Les textes ont une valeur 0. La plupart des fonctions du Tableau 4 ne nécessitent pas d'explications, soit parce qu'elles sont facilement compréhensibles (SOMME par exemple), soit parce qu'elles correspondent à une notion que vous devez connaître avant de l'utiliser (ECARTYPE par exemple). Cependant, certaines fonctions sont peu utilisées parce qu'elles ne sont pas bien comprises. Comptage et somme selon une condition de recherche : NB.SI et SOMME.SI Les fonctions NB.SI et SOMME.SI calculent leur valeur selon un critère de recherche. Ce critère de recherche peut être un nombre, une expression, une chaîne de texte ou même une expression régulière (si Outils > Options > LibreOffice Calc > Calcul option Autoriser les caractères génériques dans les formules est cochée). Il peut se trouver dans une cellule référencée ou être inclus directement dans l'appel de la fonction. La fonction NB.SI compte le nombre de cellules d'une plage qui correspondent au critère de recherche. Le premier argument spécifie la plage et le second le critère de recherche. Le Tableau 5 illustre différents critères de recherche en utilisant la fonction NB.SI appliqué aux données de la Figure 1. Les deux premiers arguments de SOMME.SI ont le même but que ceux de NB.SI, la plage contenant les cellules à explorer et le critère de recherche. Le troisième et dernier argument spécifie la plage à sommer. Pour chaque cellule de la plage explorée qui correspond au critère de recherche, la valeur des cellules de la plage de somme est ajoutée dans le résultat final. Fonctions de Calc similaires à des fonctions de base de données 21 Tableau 5. Exemples de critères de recherche pour les fonctions NB.SI et SOMME.SI Type de critère Fonction Résultat Description Nombre =NB.SI(B1:C16;95) 3 Recherche la valeur numérique 95. Texte =NB.SI(B1:C16;"95") 3 Recherche la valeur numérique ou texte 95. Expression =NB.SI(B1:C16;">95") 6 Recherche les valeurs numériques supérieures à 95. Expression =NB.SI(B1:C16;2*45+5) 3 Recherche la valeur numérique 95. Expression régulière =NB.SI(B1:C16;"9.*") 12 Recherche les nombres ou textes commençant par 9 Référence de cellule =NB.SI(B1:C16;B3) 3 Recherche les cellules selon la valeur et le type de la cellule B3. Expression régulière =SOMME.SI(A1:A16;"C.*";B1:B16) 140 Somme la colonne B pour les noms de la colonne A qui commencent par la lettre C. Comptage et somme selon plusieurs conditions de recherche : NBSIENS et SOMMESIENS Les fonctions NBSIENS et SOMMESIENS calculent leur valeur selon plusieurs critères de recherche. Hormis cette différence, leur utilisation et leurs possibilités sont celles de leurs homologues mono-critère NB.SI et SOMME.SI, notamment en ce qui concerne la syntaxe des critères et la gestion des expressions régulières. Tableau 6. Exemples de critères de recherche pour les fonctions NBSIENS et SOMMESIENS Fonction Résultat Description =SOMMESIENS(B2:B16;A2:A16;"T.*";E2:E16;">65") 170 Somme la colonne B pour les noms de la colonne A qui commencent par T et pour les notes de la colonne E supérieures à 65. =NBSIENS(A2:A16;"T.*";E2:E16;">65") 2 Compte les noms de la colonne A qui commencent par T et les notes de la colonne E supérieures à 65. Ignorer les cellules filtrées avec SOUS.TOTAL La fonction SOUS.TOTAL applique une fonction d'agrégation (voir Tableau 7) à une plage de données, mais ignore les cellules masquées par un filtre et celles qui contiennent déjà un SOUS.TOTAL. Par exemple, =SOUS.TOTAL(2,"B2:B16") compte le nombre de cellules de B2:B16 qui ne sont pas masquées par un filtre. Fonctions de Calc similaires à des fonctions de base de données 22 Tableau 7. Index des fonctions pour la fonction SOUS.TOTAL Index de fonction Fonction 1 MOYENNE 2 NB 3 NBVAL 4 MAX 5 MIN 6 PRODUIT 7 ECARTYPE 8 ECARTYPEP 9 SOMME 10 VAR 11 VARP Astuce N'oubliez pas que la fonction SOUS.TOTAL ignore les cellules qui contiennent une fonction SOUS.TOTAL. Vous pouvez donc utiliser un sous-total sur la plage entière sans vous soucier des autres sous-totaux. Utiliser des formules pour trouver des données Calc dispose de plusieurs méthodes pour trouver des données dans une feuille. Par exemple, Édition > Rechercher & remplacer déplace le focus selon une recherche simple ou avancée. Utilisez Données > Filtre pour limiter ce qui est affiché plutôt que de déplacer simplement le focus. Calc dispose également de fonctions de recherche à utiliser dans les formules, par exemple une formule pour rechercher la note globale d'un étudiant selon ses évaluations. Rechercher un bloc de données en utilisant RECHERCHEV Utilisez RECHERCHEV pour effectuer une recherche dans la première colonne d'un bloc de données et renvoyer la valeur d'une autre colonne dans la même ligne. Par exemple, recherchez dans la première colonne le nom "Paul" et renvoyez ensuite la valeur de la cellule située deux colonnes à droite. RECHERCHEV supporte deux formats : RECHERCHEV(valeur_cherchée; plage_recherche; index_colonne) RECHERCHEV(valeur_cherchée; plage_recherche; index_colonne; ordre_tri) Le premier argument, valeur_cherchée, identifie la valeur à trouver. La valeur cherchée peut être un texte, un nombre ou une expression régulière. Par exemple, "Paul" va rechercher le texte Paul, 4 va rechercher le nombre 4, et "P.*" est l'expression régulière pour trouver ce qui commence par la lettre P. Le deuxième argument, plage_recherche, identifie les cellules où effectuer la recherche ; seule la première colonne sera utilisée pour cette recherche. Par exemple, B3:G10 effectue une recherche dans la feuille qui contient la fonction RECHERCHEV et Feuille2.B3:G10 effectue une recherche dans la plage B3:G10 de la feuille Feuille2. L'argument index_colonne identifie la colonne à renvoyer ; une valeur de 1 renvoie la première colonne de la plage. La formule =RECHERCHEV("Paul" ; A1:G16 ; 1) recherche la première ligne dans A1:G16 dont la première colonne contient le texte Paul, et renvoie la valeur de la première colonne. La première colonne est la colonne de recherche, et le texte Paul est donc Fonctions de Calc similaires à des fonctions de base de données 23 renvoyé. Si l'index de colonne est 2, la valeur de la cellule à la droite de Paul est renvoyée : colonne B. Le dernier argument, ordre_tri, est facultatif. La valeur par défaut est 1 ou VRAI, ce qui indique que la première colonne est triée dans l'ordre croissant. Une valeur de 0 ou FAUX indique que les données ne sont pas triées. Une liste non triée provoque une recherche séquentielle qui vérifie chaque cellule. Si aucune correspondance n'est trouvée, l'erreur #N/D est renvoyée. Si vous n'employez pas le dernier argument, ou si vous utilisez la valeur par défaut 1 ou VRAI, le programme suppose que les données de la première colonne sont triées par ordre croissant. Si une correspondance exacte existe, la valeur renvoyée est la même que pour une liste non triée, mais le processus est plus rapide. S'il n'y a pas de correspondance, la plus grande valeur inférieure ou égale à la valeur recherchée est renvoyée. Par exemple, la recherche de 7 dans (3, 5, 10) renvoie 5 parce que 7 se trouve entre 5 et 10. La recherche de 27 renvoie 10 et la recherche de 2 renvoie #N/D parce qu'il n'y a pas de correspondance, ni de valeur inférieure à 2. Si les données de la première colonne ne sont pas triées par ordre croissant, alors que le programme s'attend à ce qu'elles le soient, le résultat peut être erroné. Utilisez RECHERCHEV lorsque : ? Les enregistrements sont disposés en lignes et vous voulez renvoyer une donnée de la même ligne. Par exemple, les noms des étudiants et, à leur droite, leurs résultats. ? Vous voulez faire une recherche dans la première colonne d'une plage de données. Rechercher un bloc de données en utilisant RECHERCHEH Utilisez RECHERCHEH pour effectuer une recherche dans la première ligne d'un bloc de données et renvoyer la valeur d'une autre ligne dans la même colonne. RECHERCHEH dispose des mêmes formats et arguments que RECHERCHEV ; RECHERCHEH(valeur_cherchée; plage_recherche; index_ligne) RECHERCHEH(valeur_cherchée; plage_recherche; index_ligne; ordre_tri) Utilisez RECHERCHEH lorsque : ? Les données sont disposées en colonnes et vous voulez renvoyer une donnée de la même colonne. Par exemple, les noms des étudiants et, en dessous, leurs résultats. ? Vous voulez faire une recherche dans la première ligne d'une plage de données. Rechercher une ligne ou une colonne avec RECHERCHE RECHERCHE est identique à RECHERCHEH et RECHERCHEV. La plage de recherche pour la fonction RECHERCHE est une ligne ou une colonne individuelle et triée. RECHERCHE supporte deux formats : RECHERCHE(valeur_cherchée; plage_recherche) RECHERCHE(valeur_cherchée; plage_recherche; plage_renvoi) La valeur recherchée est la même que pour RECHERCHEH ou RECHERCHEV. La plage de recherche, cependant, doit tenir sur une seule ligne ou une seule colonne ; par exemple, A7:A12 (valeurs de la colonne A) ou C5:Q5 (valeurs de la ligne 5). Si plage_renvoi est omis, la valeur de correspondance est renvoyée. Utiliser RECHERCHE sans plage de renvoi est identique à utiliser RECHERCHEH ou RECHERCHEV avec un index de 1. La plage de renvoi doit tenir sur une seule ligne ou colonne et contenir le même nombre d'éléments que la plage de recherche. Si la valeur de recherche est trouvée dans la quatrième cellule de la plage de recherche, alors la valeur de la quatrième cellule de la plage de renvoi est renvoyée. La plage de renvoi peut avoir une orientation différente de la plage de recherche. En d'autres termes, la plage de recherche peut être en ligne et la plage de renvoi peut être en colonne. Fonctions de Calc similaires à des fonctions de base de données 24 Utilisez RECHERCHE lorsque : ? Les données recherchées sont triées par ordre croissant. ? Les données recherchées ne se trouvent pas dans la même ligne, la même colonne ou la même orientation que les données renvoyées. Utiliser EQUIV pour trouver l'index d'une valeur dans une plage Utilisez EQUIV pour effectuer une recherche dans une seule ligne ou colonne et renvoyer la position qui correspond à la valeur recherchée. EQUIV supporte les formats suivants : EQUIV(valeur_cherchée; plage_recherche) EQUIV(valeur_cherchée; plage_recherche; type_recherche) La valeur cherchée et la plage de recherche sont les mêmes que pour RECHERCHE. Le dernier argument, type de recherche, contrôle la façon dont la recherche est effectuée. ? Le type 1 (type par défaut) suppose que les données sont triées dans l'ordre croissant. L'index de la dernière valeur inférieure ou égale au critère de recherche est renvoyé. ? Le type -1 suppose que les données sont triées dans l'ordre décroissant. L'index de la dernière valeur supérieure ou égale au critère de recherche est renvoyé. ? Le type 0 peut fonctionner avec des données non triées. L'index de la première valeur égale au critère de recherche est renvoyé. Des expressions régulières peuvent être employées. Utilisez EQUIV lorsque : ? Vous avez besoin d'un index dans une plage plutôt qu'une valeur. ? Les données sont triées par ordre décroissant et la plage de données est grande : la fonction est alors plus rapide. Exemples Dans l'exemple de la Figure 1, les données de chaque étudiant sont stockées dans une seule ligne. Vous voulez écrire une formule pour obtenir la note moyenne de Paul. Le problème peut se formuler ainsi : chercher Paul dans la colonne A de la plage A1:G16 et renvoyer la valeur de la colonne F (F est la sixième colonne). La solution la plus simple est =RECHERCHEV("Paul";A2:G16;6). Vous pouvez également faire =RECHERCHE("Paul";A2:G16;F2:F16). Il est habituel que la première ligne contienne les en-têtes de colonne. Comment faire si l'en-tête de colonne Moyenne est connu, mais pas la colonne dans laquelle il se situe ? Recherchez la colonne qui contient Moyenne plutôt que de coder en dur la valeur 6. Vous pouvez modifier la formule et utiliser EQUIV pour trouver la colonne =RECHERCHEV("Paul";A2:G16;EQUIV("Moyenne";A1:G1;0)). Notez que les en-têtes ne sont pas triés. Pour terminer, vous voulez écrire une formule pour attribuer une note basée sur la moyenne des résultats d'un étudiant. Supposez qu'une moyenne inférieure à 51 est un F, inférieure à 61 est un E, inférieure à 71 est un D, inférieure à 81 est un C, inférieure à 91 est un B, et de 91 à 100 est un A. Vous pouvez stocker le tableau de la Figure 12 dans Feuille2. Fonctions de Calc similaires à des fonctions de base de données 25 Figure 12 : Association Moyenne - Note La formule =RECHERCHEV(83;$Feuille2.$A$2:$B$7;2) est une bonne solution. Des signes $ sont utilisés pour que la formule puisse être copiée et collée à différents endroits et qu'elle fasse référence aux mêmes valeurs de la Figure 12. Retourner une chaîne pour l'adresse de la cellule avec ADRESSE Utilisez ADRESSE pour renvoyer une représentation de l'adresse d'une cellule sous forme de texte, selon la ligne, la colonne et la feuille. ADRESSE est fréquemment utilisée avec EQUIV. ADRESSE supporte les formats suivants : ADRESSE(ligne; colonne) ADRESSE(ligne; colonne; abs) ADRESSE(ligne; colonne; abs; A1) ADRESSE(ligne; colonne; abs; A1; feuille) La ligne et la colonne sont des valeurs entières, où ADRESSE(1;1) renvoie $A$1. L'argument abs spécifie quelle portion est considérée comme absolue et quelle portion est considérée comme relative (voir Tableau 8). Une adresse absolue est spécifiée en utilisant le caractère $. A1 indique la syntaxe d?adresse, soit A1 (par défaut) si la valeur est absente ou différente de 0, soit L1C1 si la valeur vaut 0. La feuille ne fait partie de l'adresse que si l'argument feuille est utilisé ; cet argument est une chaîne de caractères entre guillemets. La formule =ADRESSE(EQUIV("Paul";A2:A16;0);2) avec les données de la Figure 1 va renvoyer $B$11. Tableau 8. Valeurs possibles de l'argument abs de la fonction ADRESSE Valeur Description 1 Utilise l'adressage absolu. C'est la valeur par défaut si l'argument est absent ou a une valeur incorrecte. ADRESSE(2;5;1) renvoie $E$2. 2 Utilise une référence absolue pour la ligne et une référence relative pour la colonne. ADRESSE(2;5;2) renvoie E$2. 3 Utilise une référence relative pour la ligne et une référence absolue pour la colonne. ADRESSE(2;5;3) renvoie $E2. 4 Utilise l'adressage relatif. ADRESSE(2;5;4) renvoie E2. Astuce Calc comporte de nombreuses fonctions qui ne sont pas développées ici. En particulier, les fonctions LIGNE, COLONNE, LIGNES et COLONNES ne sont pas abordées et peuvent intéresser les utilisateurs. Consultez l?assistant de fonctions et l?aide à ce sujet. Fonctions de Calc similaires à des fonctions de base de données 26 Convertir une chaîne en cellule ou en plage avec INDIRECT Utilisez INDIRECT pour convertir une représentation d'une adresse de cellule ou de plage sous forme de texte en une référence à cette cellule ou à cette plage. Le Tableau 9 contient des exemples à partir des données de la Figure 1. Tableau 9. Exemples utilisant INDIRECT Exemple Commentaire INDIRECT("A2") Renvoie le contenu de la cellule A2, c'est-à-dire Amandine. INDIRECT(H1) Si la cellule H1 contient le texte A2, renvoie le contenu de la cellule A2, c'est-à-dire Amandine. SOMME(INDIRECT("B2:B6")) Renvoie la somme de la plage B2:B6, c'est-à-dire 417. INDIRECT(ADRESSE(2;1)) Renvoie le contenu de la cellule $A$2, c'est-à-dire Amandine. La syntaxe à utiliser pour l'adresse de cellule ou de plage sous forme de texte dépend du paramètre Paramètres de calcul détaillés de Outils > Options > LibreOffice Calc > Formule. Renvoyer une cellule ou une plage par rapport à une autre avec DECALER Utilisez DECALER pour renvoyer une cellule ou une plage décalée d'un nombre déterminé de lignes ou de colonnes par rapport à un point de référence donné. Le premier argument spécifie le point de référence. Les deuxième et troisième arguments indiquent le nombre de lignes et de colonnes à déplacer depuis le point de référence ; en d'autres termes, où la nouvelle plage commence. La fonction DECALER supporte les formats suivants : DECALER(référence; lignes; colonnes) DECALER(référence; lignes; colonnes; hauteur) DECALER(référence; lignes; colonnes; hauteur; largeur) Si la hauteur ou la largeur sont omises, elles sont par défaut de 1. Si la largeur ou la hauteur sont indiquées, la fonction DECALER renvoie une plage plutôt qu'une référence de cellule. Astuce Le premier argument de DECALER peut être une plage. Vous pouvez donc utiliser un nom de plage défini. Voici comment obtenir les résultats des tests de l'étudiant Paul avec la fonction DECALER, à partir des données de la Figure 1 : =SOMME(DECALER(INDIRECT(ADRESSE(EQUIV("Paul";A1:A16; 0); 4)); 0; 0; 1; 2)) Cette formule est complexe et difficile à comprendre. Voici sa décomposition : Fonction Description EQUIV("Paul";A1:A16; 0) Renvoie 12 parce que Paul est la 12e valeur de la colonne A. ADRESSE(12; 4) Renvoie $D$12. INDIRECT("$D$12") Convertit $D$12 en une référence absolue à la cellule D12. DECALER($D$12; 0; 0; 1; 2) Renvoie la plage D12:E12. SOMME(D12:E12) Renvoie la somme des résultats des tests de Paul. Fonctions de Calc similaires à des fonctions de base de données 27 Bien que cette formule fonctionne comme attendu, elle peut facilement se dérégler et de manière inattendue. Supposez que, par exemple, vous modifiiez la plage en A2:A16. EQUIV renvoie un index dans la plage fournie, et EQUIV("Paul";A2:A16; 0) renvoie 11 à la place de 12. ADRESSE(11; 4) renvoie $D$11 à la place $D$12 et les résultats d'Olivier sont renvoyés à la place des résultats de Paul. La formule suivante utilise une méthode légèrement différente pour obtenir les résultats des tests de l'étudiant Paul : =SOMME(DECALER(A1; EQUIV("Paul"; A1:A16; 0)-1; 3; 1; 2)) Vous pouvez remplacer A1 par A2 aux deux endroits de la formule où A1 est employé, et vous pourrez constater que vous obtenez toujours les résultats de Paul. Voici la décomposition de la formule : Fonction Description EQUIV("Paul";A1:A16; 0)-1 Renvoie 11 parce que Paul est la 12e valeur de la colonne A. DECALER(A1; 11; 3; 1; 2) Renvoie la plage D12:E12. SOMME(D12:E12) Renvoie la somme des résultats des tests de Paul. Astuce Les exemples ci-dessus permettent d'illustrer les possibilités des fonctions EQUIV et DECALER ; en l'occurrence, le résultat peut être obtenu plus simplement par une formule du type =SOMMEPROD((A1:A16="Paul")*(D1:E16)) Renvoyer une cellule à l'intérieur d'une plage avec INDEX Utilisez INDEX pour renvoyer des cellules spécifiées par un numéro de ligne et de colonne. Les numéros de ligne et de colonne sont relatifs par rapport au coin supérieur gauche de la plage spécifiée. Par exemple, =INDEX(B2:D3 ; 1 ; 2) renvoie la cellule C2. Voici les différents formats possibles que supporte la fonction INDEX : Format Description INDEX(référence) Renvoie la plage entière. INDEX(référence ; ligne) Renvoie la ligne indiquée dans la plage. INDEX(référence ; ligne ; colonne) Renvoie la cellule correspondant au numéro de ligne et de colonne. La ligne 1 et la colonne 1 correspondent au coin supérieur gauche de la plage. INDEX(référence ; ligne ; colonne ; plage) Une référence peut contenir plusieurs plages. Le dernier argument précise quelle plage utiliser. Fonctions de Calc similaires à des fonctions de base de données 28 La fonction INDEX peut renvoyer une plage, une ligne, une colonne ou une simple cellule. Sa capacité d'index à partir du début d'une plage référencée permet certaines utilisations intéressantes. Voici comment obtenir les résultats des tests de l'étudiant Paul avec la fonction INDEX, à partir des données de la Figure 1 : =SOMME(DECALER(INDEX(A1:G16; EQUIV("Paul"; A1:A16; 0)); 0; 3; 1; 2)) Voici la décomposition de la formule : Fonction Description EQUIV("Paul";A1:A16; 0) Renvoie 12 parce que Paul est la 12e valeur de la colonne A. INDEX(A1:G16; 12) Renvoie A12:G12, la ligne qui contient les résultats de Paul. DECALER(A12:G12; 0; 3; 1; 2) Renvoie la plage D12:E12. SOMME(D12:E12) Renvoie la somme des résultats des tests de Paul. Astuce Une plage simple contient une zone rectangulaire et contiguë de cellules. Il est possible de définir une plage multiple qui contient plusieurs plages simples. Si la référence est une plage multiple, vous devez entourer cette référence ou son nom avec des parenthèses. Dans le cas d'une plage multiple, l'argument plage définit quelle plage simple utiliser (voir Tableau 10). Tableau 10. Utiliser INDEX avec une plage multiple Fonction Retour =INDEX(B2:G2; 1; 2) 93 =INDEX(B5:G5; 1; 2) 65 =INDEX((B2:G2;B5:G5); 1; 2) 93 =INDEX((B2:G2;B5:G5); 1; 2; 1) 93 =INDEX((B2:G2;B5:G5); 1; 2; 2) 65 Fonctions particulières aux plages de données Bien que chaque fonction de Calc puisse être utilisée pour manipuler des bases de données, les fonctions du Tableau 11 sont spécialement conçues pour être utilisées avec des bases de données. Les descriptions de ce tableau utilisent les mots suivants de manière interchangeable : ligne et enregistrement, cellule et champ, base de données et toutes les lignes. Tableau 11. Fonctions base de données de Calc Fonction Description BDECARTYPE Calcule l'écart-type en utilisant les champs qui correspondent au critère de recherche. Les champs sont considérés comme un échantillon. BDECARTYPEP Calcule l'écart-type en utilisant les champs qui correspondent au critère de recherche. Les champs sont considérés comme la population entière. BDLIRE Renvoie le contenu d'un champ qui correspond au critère de recherche. BDMAX Renvoie le contenu maximum d'un champ qui correspond au critère de recherche. Fonctions particulières aux plages de données 29 Fonction Description BDMIN Renvoie le contenu minimum d'un champ qui correspond au critère de recherche. BDMOYENNE Renvoie la moyenne de tous les champs qui correspondent au critère de recherche. BDNB Compte le nombre d'enregistrements qui correspondent au critère de recherche. BDNBVAL Compte le nombre d'enregistrements non vides qui correspondent au critère de recherche. BDPRODUIT Renvoie le produit des champs qui correspondent au critère de recherche. BDSOMME Renvoie la somme de tous les champs qui correspondent au critère de recherche. BDVAR Calcule la variance en utilisant les champs qui correspondent au critère de recherche. Les champs sont considérés comme un échantillon. BDVARP Calcule la variance en utilisant les champs qui correspondent au critère de recherche. Les champs sont considérés comme la population entière. Le format des fonctions base de données est identique : BDNB(base_de_données; champ; critère_de_recherche) L'argument base_de_données est la plage de cellules qui définit la base de données. Cette plage devrait contenir les étiquettes de colonnes. L'exemple suivant est basé sur le fait que les données de la Figure 1 sont placées dans Feuille1 et le critère de recherche dans Feuille3. =BDNB(A1:G16; "Test 2"; Feuille3.A1:F3) L'argument champ indique la colonne sur laquelle la fonction va opérer après l'application du critère de recherche et la sélection des lignes de données. Il peut être constitué du nom de l'en- tête de colonne ou d'un entier. Dans le cas d'un entier, 0 indique la plage de données en entier, 1 la première colonne, 2 la deuxième colonne, et ainsi de suite. Les deux formules ci-dessous sont identiques : =BDMOYENNE(A1:G16; "Test 2"; Feuille3.A1:F3) =BDMOYENNE(A1:G16; 5; Feuille3.A1:F3) Le dernier argument est la plage de cellules qui contient le critère de recherche. Ce critère fonctionne de manière identique à un filtre spécial ; les critères sur la même ligne sont liés par ET et ceux sur des lignes différentes sont liés par OU. Conclusion Calc dispose de fonctionnalités de base de données qui peuvent suffire à certains utilisateurs. Des fonctions de base de données peu utilisées, comme DECALER, EQUIV et INDEX, valent la peine d'être approfondies et peuvent vous faire gagner du temps sur le long terme. Cependant, dès lors qu'une base de données devient complexe, fait intervenir des relations entre plusieurs tables, ou est largement utilisée dans une organisation, il est préférable de se tourner vers LibreOffice Base. Conclusion 30

PARTAGER SUR

Envoyer le lien par email
1002
READS
11
DOWN
0
FOLLOW
4
EMBED
DOCUMENT # TAGS
#libre office  #calc 

Licence Publique Générale GNU


DOCUMENT # INDEX
Informatique 
img

Partagé par  mercad.jenny

 Suivre

Auteur:
Source:Non communiquée