Trucs et astuces pour Calc

Discussions à propos du tableur Calc.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5732
Inscription : 03 janv. 2009 00:56

Tri alphabétique automatique de données

Message par Jean-Louis Cadeillan »

Pour trier une colonne de valeurs texte par ordre alphabétique, rien de plus simple, me direz-vous, on clique sur A>Z et hop !
Mais si l'on désire avoir, dans une colonne voisine, les mêmes données qui se ré-agencent en ordre alphabétique automatiquement, au fur et à mesure qu'on rajoute des données dans la première, alors là, c'est plus ardu ==> la fonction RANG() est très bien pour cela, mais elle ne fonctionne qu'avec les nombres.
Je vous propose donc le procédé suivant, dont voici le cœur :

Code : Tout sélectionner

SOMMEPROD($A1>liste)
A1 contenant le mot dont on veut connaître le rang alphabétique dans la liste de mots ; liste étant bien sûr la plage de cellules contenant cette liste de mots.
Comment ça fonctionne ?
  • Ne pas oublier d'abord que SOMMEPROD() est une fonction matricielle, même si la validation se fait par Entrée :
    • A1 est comparé au premier mot de la liste, s'il est supérieur (ce qui veut dire après, alphabétiquement), alors la comparaison retourne un 1 (=VRAI), sinon 0
    • puis A1 est comparé au deuxième mot de la liste, la comparaison là aussi retourne 0 ou 1
    • etc.
    • SOMMEPROD() fera la somme de ces 0 et 1 ==> plus le mot dans A1 sera élevé alphabétiquement (plus proche de la fin du dictionnaire), plus la somme sera élevée : nous avons trouvé un indice de classement alphabétique, qui va de 0 à n.
  • Nous avons utilisé la remarquable propriété le l'opérateur > qui accepte du texte aussi bien que des nombres !
Bien sûr, nous pouvons remplacer SOMMEPROD par SOMME, mais, dans ce cas, avec validation matricielle (Ctrl+Maj+Entrée).
Si, dans la liste de mots, il y a des doublons, il faudra aussi ajouter à l'indice une valeur de distinction (par exemple le n° de ligne/100).
Une mise en œuvre dans le fichier joint. Une autre récente.
 Ajout : J'ai mis à jour le fichier en ajoutant deux autres méthodes, avec une gestion des vides et des doublons, données par gerard24 => merci Gérard :super:
Les explications sont dans le fichier. 
Cordialement
Jean-Louis
Pièces jointes
TriAlphaAuto_02.ods
Tri alphabétique automatique
(25.35 Kio) Téléchargé 1237 fois
Dernière modification par Jean-Louis Cadeillan le 23 août 2011 00:47, modifié 1 fois.
LibO 7.6.5.2 (x64 avec Java 1.8.0_401) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
Jeff
GourOOu
GourOOu
Messages : 9608
Inscription : 18 sept. 2006 11:40
Localisation : France

Calcul sur les jours ouvrés

Message par Jeff »

Dans le classeur ci-joint, pour une date saisie en B1, voici les formules nécessaires pour trouver le :
  • Premier jour du mois
  • Dernier jour du mois
  • Dernier jour ouvré du mois
  • Premier jour ouvré du mois
Si en plus vous renseignez un décalage (positif ou négatif) en nombre de jours en cellule B8, vous trouverez le :
  • Décalage en jours ouvrés
  • Décalage en jours ouvrés + fin du mois ouvré
  • Décalage en jours ouvrés + fin du mois
  • Décalage en jours
  • Décalage en jours + jours ouvré actuel ou précédent
  • Décalage en jours + jours ouvré suivant
  • Décalage en jours ouvrés + début du mois ouvré
  • Décalage en jours ouvrés + début du mois
un aperçu :
Cliquer sur l'image pour zoomer
Cliquer sur l'image pour zoomer
N.B. : renseignez une plage pour les jours fériés, si vous souhaitez en tenir compte :)

.
Pièces jointes
Jours_ouvrés.ods
(9.78 Kio) Téléchargé 808 fois
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5732
Inscription : 03 janv. 2009 00:56

Formule de détection de lignes masquées par autofiltre

Message par Jean-Louis Cadeillan »

Bonsoir,
Peut-être cette astuce est-elle déjà référencée, mais je ne l'ai pas repérée...
Si par exemple la ligne 2 d'une plage de données est masquée par l'application d'un autofiltre, il suffit de mettre dans une cellule quelconque la formule :

Code : Tout sélectionner

=SOUS.TOTAL(2;A1:A1)
Celle-ci retourne 1 si la cellule n'est pas masquée, 0 sinon. Cela ne concerne que le masquage par autofiltre. La formule ne détecte pas le masquage par Format > Ligne > Masquer.
L'argument 2 se réfère à la fonction NB, qui convient pour une valeur numérique. Si la cellule A1 contient une valeur textuelle ou numérique, il faudra utiliser NBVAL ==> code 3

Code : Tout sélectionner

=SOUS.TOTAL(3;A1:A1)
Pour une application, voir : Cette détection peut servir dans une MFC, dans des liste de données, dans la combinaison d'autofiltres avec des tris croisés, etc.
Cordialement
Jean-Louis
LibO 7.6.5.2 (x64 avec Java 1.8.0_401) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 01 mai 2011 01:08
Localisation : Casablanca (Maroc)

Affichage des degrés, minutes, secondes d'angles/arcs

Message par alhazred »

Bonjour à tous,

Étant sexagénaire, j'ai gardé l'habitude de travailler avec des degrés sexagésimaux; par exemple, 44° 12' 18'' N -- la latitude d'Agen, ma ville natale, dixit Wikipedia -- me parle plus que son équivalent décimal 44,205° N. Heureusement, le format des heures (qui restera sexagésimal pendant encore un bon moment, on l'espère!) permet de faire une conversion facile dans Calc:

Dans A1, tapez

Code : Tout sélectionner

44,205
Dans A2, tapez

Code : Tout sélectionner

=A1/24
Enfin appliquez à A2 le format

Code : Tout sélectionner

[H]° MM' SS"
On peut aussi, sans formater A2, taper

Code : Tout sélectionner

=TEXTE(A1/24;"[H]° MM' SS""")
Attention à la répétition des guillemets doubles à l'intérieur de la chaîne

Explication de la division par 24: le nombre de degrés est interprété comme nombre d'heures exprimé en jours...

On peut bien sûr adapter les formats.
Pour une latitude:

Code : Tout sélectionner

[H]° MM' SS" N;[H]° MM' SS" \S;0°
(L'antislash indiquant que S n'indique pas un chiffre des secondes)
Pour une longitude:

Code : Tout sélectionner

[H]° MM' SS" E;[H]° MM' SS" O;0°
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 01 mai 2011 01:08
Localisation : Casablanca (Maroc)

Maintien à jour des plages dans les formules

Message par alhazred »

Bonjour,

Votre feuille de calcul contient une zone utilisée dans les formules, par un nom ou directement par sa référence.

Le problème, c'est que si vous désirez étendre cette zone par ajout de lignes (ou de colonnes), l'ancienne référence n'est pas modifiée et ne couvre donc pas les nouvelles cellules. Bien sûr, si la zone est nommée, on peut toujours (menu Insertion > Noms > Gérer...) modifier la référence représentée par le nom, mais si la référence est directe, il faudra modifier les formules une à une.

On peut aussi utiliser des plages "géantes", couvrant tous les besoins envisagés, éventuellement avec des colonnes ou ligne entières.

Une autre solution est d'inclure dans la zone une dernière ligne/colonne vide "de garde" et de l'utiliser pour insérer les lignes ou colonnes nécessaires. Les références correspondantes seront alors mises à jour automatiquement.
Pour l'insertion, sélectionner la zone à ajouter, puis clic droit > Insérer... et choisir le déplacement voulu.
Pièces jointes
Agrandir une zone.PNG
Agrandir une zone.PNG (9.21 Kio) Consulté 32105 fois
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Avatar de l’utilisateur
gerard24
ManitOOu
ManitOOu
Messages : 3160
Inscription : 06 juil. 2008 19:08
Localisation : dans le Périgord

Borner le résultat d'une formule

Message par gerard24 »

Bonjour,

On veut parfois limiter le résultat d'une formule de calcul à un certain nombre.
Pour la suite la formule de calcul sera nommée du nom original de ma_formule
  1. Limite à la hausse :
    Je souhaite limiter mon résultat à un maximum de 50 (c'est à dire que ma_formule affichera le résultat du calcul s'il est inférieur à 50 et 50 s'il est supérieur)
    On utilise la fonction MIN.

    Code : Tout sélectionner

    =MIN(ma_formule;50)
  2. Limite à la baisse :
    Je souhaite limiter mon résultat à un minimum de 10 (c'est à dire que ma_formule affichera le résultat du calcul s'il est supérieur à 10 et 10 s'il est inférieur)
    On utilise alors la fonction MAX.

    Code : Tout sélectionner

    =MAX(ma_formule;10)
  3. Double limite, à la hausse et à la baisse :
    Je souhaite limiter mon résultat à un minimum de 10 et un maximum de 50 (on aura alors le résultat de ma_formule s'il est compris entre 10 et 50, 10 s'il est inférieur et 50 s'il est supérieur)
    On combine les 2 fonctions précédentes.

    Code : Tout sélectionner

    =MIN(MAX(ma_formule;10);50)
    ou en inversant

    Code : Tout sélectionner

    =MAX(MIN(ma_formule;50);10)
    Mais comme ce n'est pas toujours facile de se rappeler que l'on "associe" le plafond à MIN et le plancher à MAX (sans réfléchir on aurait tendance à faire l'inverse),
    voici une autre formule avec une seule fonction et donc sans risque de se tromper.

    Code : Tout sélectionner

    =MEDIANE(ma_formule;10;50)
    On utilise ici MEDIANE avec 3 arguments, donc la fonction renverra toujours la seconde de ces valeurs ordonnées. (qui correspond à la valeur souhaitée)
A+
Dernière modification par gerard24 le 30 déc. 2014 09:37, modifié 1 fois.
OOodidacte
LibreOffice 6.4.5 sous Windows 10.
pour télécharger LibreOffice
rosaguy
Membre cOOnverti
Membre cOOnverti
Messages : 311
Inscription : 11 déc. 2012 11:08
Localisation : Vallée du Grésivaudan

Calendrier des lundis et vendredis d'une année

Message par rosaguy »

Bonjour,

J'ai eu besoin de produire un calendrier en extrayant uniquement les lundi(s) et vendredi(s), pour prise de rendez-vous.

Pour l'année il suffit de rentrer le premier jour de celle-ci dans la cellule adéquate.

Cela peu éventuellement servir pour d'autres usages voire d'autres jours à extraire (à adapter).

Je joint le classeur.

Bon usage et A+
Pièces jointes
Calendrier Lundi & vendredi..ods
(24.99 Kio) Téléchargé 700 fois
OpenOffice 4.1.1 LibO 4.3.6
Windows 7 Familiale premium 64 bits

"Si cela va sans le dire, ça va toujours mieux en le disant et en le montrant" Joindre un fichier
Vous avez la solution : Baliser [Résolu]
Jeff
GourOOu
GourOOu
Messages : 9608
Inscription : 18 sept. 2006 11:40
Localisation : France

Déplacer ou copier un diagramme vers une autre feuille

Message par Jeff »

L'issue 122897 concernant la perte de la plage de données en cas de copie ou déplacement d'un diagramme vers une autre feuille est relativement complexe à résoudre, car elle remet en cause l'issue 118840.

:arrow: Pour copier un diagramme sur une même feuille
  • Pour copier un diagramme sur la même feuille, ne pas copier/coller, car le diagramme perds ses plages de données, au (mauvais) profit de la table de données ; il n'y a donc plus d'interaction entre données et diagramme.

    Un des contournements déjà expliqué sur le forum est de presser la touche Ctrl tout en faisant un glisser-déposer, contournement qui fonctionne sans problème

:arrow: Pour déplacer ou copier un diagramme sur une autre feuille
  1. Pour déplacer un diagramme sur une autre feuille
    • Cliquer sur le diagramme à déplacer, sans bouger le curseur de la souris pendant une seconde
    • Le pointeur change de forme, déplacez l'objet sur un nouveau nom d'onglet pendant une seconde (...et ne pas tenir compte du signal "stationnement interdit"), la feuille sélectionnée s'affiche, placez l'objet dessus ; la plage de données est toujours active.
  2. Pour copier un diagramme sur une autre feuille
    • Affichez le navigateur, le diagramme est dans les "Objets OLE"
    • Déployez la liste des objets OLE
      (si vous avez cliquez-droit sur votre diagramme > Nom, c'est le nom "en clair" qui est affiché dans la liste des objets OLE, ce qui est nettement plus pratique)
    • Cliquez-droit sur l'objet OLE voulu, et vérifiez que l'option Mode glisser > Insérer comme copie soit précédé d'une coche.
    • Il suffit alors de faire un glisser-déposer de l'objet depuis le navigateur sur la feuille
Il est probable que comme 2 issues sont en "concurrences", les contournements ci-dessus soit adoptés comme des comportements voulus.

Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 15:31

Trouver la dernière valeur d'une ligne ou colonne

Message par OOotremer971 »

Bonjour,

Il faut que l'option d'utilisation des caractères génériques dans les formules soit cochée (menu :Outils>Options>Calc>Calcul) pour l'utilisation de cette formule.

Elle permet de trouver la dernière valeur saisie dans une plage, ligne ou colonne, dont on ignore l'emplacement et le contenu. Lorsque je dis "dernière valeur saisie dans une plage" je ne parle pas de chronologie dans le temps, mais de position en partant de la première cellule de la plage, ligne ou colonne. Notez qu'il est impératif d'avoir au minimum une valeur au format texte sur cette ligne pour que la formule affiche un résultat cohérent, de préférence au début de la plage.
La recherche peut s'étendre à une plage de plusieurs lignes et colonnes, mais avec les particularités et limitations suivantes :
  • La recherche dans une plage se limite à la dernière ligne de la plage.
    • 1) uniquement si la première ligne contient une valeur, quelque soit sa position sur la ligne mais dans la limite de la plage.
      2) uniquement la valeur de la dernière ligne se trouvant dans la même colonne que la dernière valeur contenue dans la première ligne
    Ainsi pour une recherche dans la plage A1:G4 :
    • Si rien n'est saisi ligne 1, #N/D est retourné
      ce qui est saisi ligne un deux et trois, n'est pas trouvé.
      Si la dernière cellule non vide de la ligne 1 est en colonne D, seule la valeur contenu en colonne D de la dernière ligne sera trouvée. Les valeurs suivantes sont ignorées
Utilité pour le formatage conditionnel :
  • Lorsque la valeur saisie correspond au nom du style à appliquer.

    Code : Tout sélectionner

    STYLE(RECHERCHE(".*";$A1:A1))

    Le style s'applique alors à toute la ligne, jusqu'à ce qu'un autre soit saisi. Pratique pour les plannings.
A+
Dernière modification par OOotremer971 le 10 avr. 2015 13:35, modifié 1 fois.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 19:25

Formule barre de progression

Message par zeguedon »

Bonjour,

Une astuce pour créer des barres de progression à partir d'une simple formule.
C'est la valeur numérique d'une cellule adjacente, ou non, qui détermine sa longueur.
Barres.png
La formule :

Code : Tout sélectionner

=REPT("█";A1)
La couleur de la barre sera la couleur donnée au caractère de la cellule ; par défaut elle est donc noire.

Si vous voulez que la barre change de couleur lors de sa progression
  • vous pouvez utiliser le formatage conditionnel pour changer la couleur de la police en fonction de la valeur de A1
    ou
    ajoutez à la formule, avec le signe de concaténation esperluette (&), une autre formule qui utilise la fonction STYLE()
    il faudra créer autant de styles personnalisés, que vous voudrez de couleurs différentes.

    Code : Tout sélectionner

    =REPT("█";A1)&[Formule qui applique un style selon un critère]
  • Par exemple :

    Diviser la valeur de la cellule A1 par 25 retournera 1,2,3, ou 4 selon que nous sommes entre (0 et 25), (25 et 50), (50 et 75), (75 et 100).
    divisé par 50 retournera 1 ou 2 et divisé par 30 : 1, 2, 3 etc etc...
    Avec cette méthode vous pouvez utiliser la fonction CHOISIR() :

    Code : Tout sélectionner

    CHOISIR(ARRONDI.SUP(A1/25);T(STYLE("rouge"));T(STYLE("orange"));T(STYLE("bleu"));T(STYLE("vert")))
    ce qui donne comme formule finale :

    Code : Tout sélectionner

    =REPT("█";A1)&CHOISIR(ARRONDI.SUP(A1/25);T(STYLE("rouge"));T(STYLE("orange"));T(STYLE("bleu"));T(STYLE("vert")))
  • Avec la fonction SI(), vous saisissez directement la valeur de changement de couleur dans la formule.

    Code : Tout sélectionner

    SI(A1<25;T(STYLE("ROUGE"));SI(A1<50;T(STYLE("ORANGE");etc etc))
Si par manque de place vous devez réduire la longueur des barres, sans modifier le pourcentage affiché en A1, il suffit de diviser la valeur de A1 par la valeur de réduction souhaitée.
Par exemple pour une barre 2 fois moins longue qui affichera toujours 100%, la valeur de A1 est divisée par 2

Code : Tout sélectionner

=REPT("█";A1/2)

Pour modifier l'aspect des barres, jouez avec le style de police de caractère, le soulignage, le gras, le contour etc

Le fichier en question :
FormuleBarreDeProgression.ods
Pratique pour mettre en évidence une valeur sans l'utilisation d'un graphique
(43.45 Kio) Téléchargé 580 fois
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Avatar de l’utilisateur
Zelada
InconditiOOnnel
InconditiOOnnel
Messages : 930
Inscription : 27 févr. 2013 15:55

Raccourcis clavier - correspondance Excel /Calc

Message par Zelada »

Bonjour

Ayant vu plusieurs sujets dans lesquels des personnes cherchent la correspondance d'un raccourci clavier qu'ils avaient l'habitude d'utiliser dans Excel, je vous propose ce tableau :
raccourcis_clavier_excel_calc.jpg

Et pour connaître tous les raccourcis clavier dans LibreOffice

- Raccourcis clavier spécifiques à Calc

- Raccourcis clavier généraux dans LibreOffice

A+

P.S. Peut-être que ce message pourrait être "épinglé"
LibreOffice 3.6.5.2 (version imposée) sous Windows XP SP3 au bureau
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 19:25

Écrire une somme en toute lettre

Message par zeguedon »

Bonjour,

J'ignore si cette formule existe déjà. Elle permet d'écrire en toutes lettres une somme de 0,00 euro à 999999,99 euros selon le rapport de 1990 sur les rectifications orthographiques. Je n'ai pas pu tester toutes les possibilités, mais seulement les cas particuliers de chaque tranche. Si vous apercevez une faute d'orthographe, merci de le signaler pour qu'elle soit corrigée.

Dans le fichier joint, une proposition pour AOO constituée de huit cellules fusionnées qu'il suffit de copier vers votre classeur. Il faudra nommer la cellule qui contient la somme en chiffre : ACR.
SommeEnLettre.png
SommeEnLettre.png (7.09 Kio) Consulté 27509 fois
Une autre formule pour Libo qui tient dans une seule cellule, mais qui ne fonctionne pas sous AOO car elle contient trop de caractère (5114).

Code : Tout sélectionner

=CHOISIR(CNUM(GAUCHE(TEXTE(ENT(ACR);"000000");1))+1;"";"cent-";"deux";"trois";"quatre";"cinq";"six";"sept";"huit";"neuf")&SI(CNUM(GAUCHE(TEXTE(ENT(ACR);"000000");1))>=2;"-cent-";"")&CHOISIR(SI(OU(ET(CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2))>=71;CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2))<=79);ET(CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2))>=91;CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2))<=99));PLANCHER(CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2));10)/10;(PLANCHER(CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2));10)/10)+1);"";"";"vingt";"trente";"quarante";"cinquante";"soixante";"soixante-dix";"quatre-vingt";"quatre-vingt-dix")&SI(CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2))=71;"-et-";SI(CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2))>=20;"-";""))&SI(CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);3))=1;"";CHOISIR(SI(OU(CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2))=1;CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2))=81);21;SI(OU(ET(CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2))>=10;CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2))<=19);ET(CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2))>=71;CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2))<=79);ET(CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2))>=91;CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);2))<=99));CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);1)+11);CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);1)+1)));"";"et-un";"deux";"trois";"quatre";"cinq";"six";"sept";"huit";"neuf";"dix";"onze";"douze";"treize";"quatorze";"quinze";"seize";"dix-sept";"dix-huit";"dix-neuf";"un")&SI(CNUM(DROITE(GAUCHE(TEXTE(ENT(ACR);"000000");3);3))>=1;"-";""))&SI(ET(CNUM(DROITE(TEXTE(ENT(ACR);"000000");3))=0;CNUM(GAUCHE(TEXTE(ENT(ACR);"000000");3))>0);"mille";SI(CNUM(GAUCHE(TEXTE(ENT(ACR);"000000");3))>0;"mille-";""))&CHOISIR(CNUM(GAUCHE(DROITE(TEXTE(ENT(ACR);"000000");3);1))+1;"";"cent";"deux-cent";"trois-cent";"quatre-cent";"cinq-cent";"six-cent";"sept-cent";"huit-cent";"neuf-cent")&SI(ET(CNUM(GAUCHE(DROITE(TEXTE(ENT(ACR);"000000");3);1))>0;CNUM(DROITE(DROITE(TEXTE(ENT(ACR);"000000");3);2))>0);"-";SI(CNUM(GAUCHE(DROITE(TEXTE(ENT(ACR);"000000");3);1))>1;"s";""))&CHOISIR(SI(OU(ET(CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))>=71;CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))<=79);ET(CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))>=91;CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))<=99));PLANCHER(CNUM(DROITE(TEXTE(ENT(ACR);"000000");2));10)/10;(PLANCHER(CNUM(DROITE(TEXTE(ENT(ACR);"000000");2));10)/10)+1);"";"";"vingt";"trente";"quarante";"cinquante";"soixante";"soixante-dix";"quatre-vingt";"quatre-vingt-dix")&SI(CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))=71;"-et-";SI(CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))=80;"s";""))&SI(ET(ET(CNUM(DROITE(TEXTE(ENT(ACR);"000000");1))>0;CNUM(GAUCHE(DROITE(TEXTE(ENT(ACR);"000000");2);1))>0);OU(CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))<10;CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))>19));"-";"")&CHOISIR(SI(OU(CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))=1;CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))=81);21;SI(OU(ET(CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))>=10;CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))<=19);ET(CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))>=71;CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))<=79);ET(CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))>=91;CNUM(DROITE(TEXTE(ENT(ACR);"000000");2))<=99));CNUM(DROITE(TEXTE(ENT(ACR);"000000");1)+11);CNUM(DROITE(TEXTE(ENT(ACR);"000000");1)+1)));"";"et-un";"deux";"trois";"quatre";"cinq";"six";"sept";"huit";"neuf";"dix";"onze";"douze";"treize";"quatorze";"quinze";"seize";"dix-sept";"dix-huit";"dix-neuf";"un")&SI(CNUM(TEXTE(ENT(ACR);"000000"))=0;" zéro virgule ";" virgule ")&CHOISIR(SI(OU(ET(CNUM(DROITE(TEXTE(ACR;"000000,00");2))>=71;CNUM(DROITE(TEXTE(ACR;"000000,00");2))<=79);ET(CNUM(DROITE(TEXTE(ACR;"000000,00");2))>=91;CNUM(DROITE(TEXTE(ACR;"000000,00");2))<=99));PLANCHER(CNUM(DROITE(TEXTE(ACR;"000000,00");2));10)/10;(PLANCHER(CNUM(DROITE(TEXTE(ACR;"000000,00");2));10)/10)+1);"";"";"vingt";"trente";"quarante";"cinquante";"soixante";"soixante-dix";"quatre-vingt";"quatre-vingt-dix")&SI(CNUM(DROITE(TEXTE(ACR;"000000,00");2))=71;"-et-";SI(CNUM(DROITE(TEXTE(ACR;"000000,00");2))=80;"s";""))&SI(ET(ET(CNUM(DROITE(TEXTE(ACR;"000000,00");1))>0;CNUM(GAUCHE(DROITE(TEXTE(ACR;"000000,00");2);1))>0);OU(CNUM(DROITE(TEXTE(ACR;"000000,00");2))<10;CNUM(DROITE(TEXTE(ACR;"000000,00");2))>19));"-";"")&CHOISIR(SI(OU(CNUM(DROITE(TEXTE(ACR;"000000,00");2))=1;CNUM(DROITE(TEXTE(ACR;"000000,00");2))=81);21;SI(OU(ET(CNUM(DROITE(TEXTE(ACR;"000000,00");2))>=10;CNUM(DROITE(TEXTE(ACR;"000000,00");2))<=19);ET(CNUM(DROITE(TEXTE(ACR;"000000,00");2))>=71;CNUM(DROITE(TEXTE(ACR;"000000,00");2))<=79);ET(CNUM(DROITE(TEXTE(ACR;"000000,00");2))>=91;CNUM(DROITE(TEXTE(ACR;"000000,00");2))<=99));CNUM(DROITE(TEXTE(ACR;"000000,00");1)+11);CNUM(DROITE(TEXTE(ACR;"000000,00");1)+1)));"";"et-un";"deux";"trois";"quatre";"cinq";"six";"sept";"huit";"neuf";"dix";"onze";"douze";"treize";"quatorze";"quinze";"seize";"dix-sept";"dix-huit";"dix-neuf";"un")&SI(CNUM(TEXTE(ACR;"000000,00"))=0;"zéro euro";SI(CNUM(DROITE(TEXTE(ACR;"000000,00");2))=0;"zéro euros";" euros"))
Attention, si le classeur est ouvert ne serait-ce qu'une seule fois avec AOO, la formule pour Libo disparait.
Pour AOO, lors de la fusion des cellules, il faut cliquer sur "Non" à la demande : "Déplacer le contenu des cellules cachées dans la première cellule ?"

et le fichier qui va avec :
Pièces jointes
EcrireSommeEntouteLettre.ods
(17.68 Kio) Téléchargé 514 fois
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 19:25

Tirage aléatoire - Tri et dédoublonnage -

Message par zeguedon »

Bonjour,

Un petit utilitaire de tirage aléatoire avec formules de tri croissant et décroissant ainsi que dédoublonnage:
Pièces jointes
TirageAleatoire.ods
(16.49 Kio) Téléchargé 469 fois
TirageAleatoire.png
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 15:31

Utilitaire de calcul d'angles et distances

Message par OOotremer971 »

Bonjour à tous :)

Un petit utilitaire pour calculer des angles et des distances à partir de valeurs connues :
UtilitaireCalculAngles.png
Pièces jointes
UtilitaireACalculAngles.ods
(17.95 Kio) Téléchargé 490 fois
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Jeff
GourOOu
GourOOu
Messages : 9608
Inscription : 18 sept. 2006 11:40
Localisation : France

Tracer un cintre selon une corde et une flèche

Message par Jeff »

Bonjour à tous,

Sortit des limbes archivées de mon disque dur, ce petit utilitaire (qui n’a rien à voir avec Guillaume Tell ou Robin des Bois, malgré le titre du post), sert à tracer le cintre en calculant le rayon, selon la corde (largeur) et la flèche (hauteur) que l’on veut donner à, par exemple, une ouverture :
Cliquer sur l’image pour zoomer
Cliquer sur l’image pour zoomer
Une case à cocher permet de supprimer les traits de construction pour une meilleure appréciation visuelle :
Cliquer sur l’image pour zoomer
Cliquer sur l’image pour zoomer

calcul_cintre.ods
(39.14 Kio) Téléchargé 466 fois
Jeff
GourOOu
GourOOu
Messages : 9608
Inscription : 18 sept. 2006 11:40
Localisation : France

Compter plusieurs styles de cellule différents simultanément

Message par Jeff »

Bonjour à tous,

Grâce à l'extension COUNTSTYLE (voir ce fil), Hubert Lambert nous offre deux fonctions supplémentaires :
  1. La fonction STYLE.CELLULE, qui renvoie le style de cellule appliqué
  2. La fonction COMPTE.STYLE, qui compte les cellules du style fourni en paramètre, et permet grâce à un paramètre optionnel :
    • 0 : compter simplement les cellules du style donné
      1 : calcule la somme des cellules du style donné
      2 : compte les cellules non vides du style donné
      3 : calcule la moyenne du style donné
      4 : renvoie la valeur maximale du style donné
      5 : renvoie la valeur minimale du style donné
      6 : compte les valeurs numériques du style donné
Pour un usage classique, qui consiste à fournir un seul style à la fonction, consulter directement le premier message du projet.

Il est cependant possible de fournir plusieurs styles à COMPTE.STYLE en respectant la démarche suivante :
  • Les spécifications initiales doivent être respectées :
    • le nom du style (sensible à la casse)
    • ce nom doit être entre guillemets
  • utilisation du caractère | pour les séparer les différents styles
  • l’ensemble des styles doit être entre accolades
  • la formule finale est validée matriciellement par Ctrl +Maj + Entrer

    La syntaxe finale pour deux styles est donc du type :

    Code : Tout sélectionner

    =COMPTE.STYLE(plage;{"style1"|"style2"}[;paramètre]) 
En exemple, la plage suivante mélange plusieurs styles, et la cellule A10 contient un texte :
Capture d’écran du 2019-11-05 11-34-50.png
Méthode 1 :
La formule :

Code : Tout sélectionner

=COMPTE.STYLE(A1:A10;{"Résultat"|"Résultat2"}) 
Validée matriciellement va retourner la matrice :
  • 5
    1
Pour 5 cellules dénombrées avec le style "Résultat", et 1 cellule dénombrée avec le style "Résultat2".

Dans la plupart des cas, il va donc suffire de sommer cette matrice, ce qui peut être réalisé directement en incluant COMPTE.STYLE dans une fonction SOMMEPROD.
Bien garder à l'esprit qu'une plage de résultat est retournée par ce biais, de ce fait, le calcul de la moyenne est plus ardue ; il s'agira alors de calculer le nombre de cellules appartenant aux styles renseignés, puis de diviser par le nombre de cellules appartenant aux styles renseignés et contenant une valeur numérique.

Un exemple de ce qui peut être obtenu par validation matricielle avec 2 styles de cellule passés en paramètre :
Cliquer sur l'image pour zoomer
Cliquer sur l'image pour zoomer
Méthode 2 :
La formule peut comporter un nom, par exemple en définissant le nom MesStyles et en assignant ce nom à {"Résultat"|"Résultat2"} :
Capture d’écran du 2019-11-14 16-31-53.png
La formule de base devient :

Code : Tout sélectionner

=COMPTE.STYLE(A1:A10;MesStyles)
Formule à valider matriciellement par Ctrl + Maj + Entrer

Méthode 3 :
Enfin, on peut également récupérer les résultats de STYLE.CELLULE, dans l'exemple ci-dessus, les noms des styles sont récupérés en B1 et B2 :

Code : Tout sélectionner

=SOMMEPROD(COMPTE.STYLE($A$1:$A$10;$B$1:$B$2))
Formule à valider matriciellement par Ctrl + Maj + Entrer

  • En complément :

    Le caractère | sert à retourner/renvoyer une matrice en colonne.
    Il est également possible de retourner/renvoyer une matrice en ligne, en utilisant le caractère ;

    Code : Tout sélectionner

    =COMPTE.STYLE($A$1:$A$10;{"Résultat";"Résultat2"};0)
    Formule à valider matriciellement par Ctrl + Maj + Entrer
Classeur-exemple à la suite, pour toute question, merci de poster en section Tableur
Pièces jointes
CountStyle.ods
Installer l'extension COUNTSTYLE au préalable
(34.73 Kio) Téléchargé 364 fois
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 19:25

Maximum de cellules vides contiguës comptées dans une plage

Message par zeguedon »

Pour simplifier la formule, il est convenu que la plage pour laquelle nous voulons compter le nombre maximum de cellules vides contiguës qu'elle contient, doit impérativement commencer et finir par une cellule pleine (volontairement remplie par un X pour la circonstance) :

Pour la plage A1:A100 à l’aide de la fonction MAX() et d'une validation matricielle, on extrait dans une seule cellule la plus grande des valeurs obtenues par les formule suivantes.

Code : Tout sélectionner

{=MAX(GRANDE.VALEUR(ESTVIDE(A1:A100)*NON(ESTVIDE(A2:A100))*LIGNE(A1:A100);LIGNE(INDIRECT("A1:A"&NB(A1:A100))))-GRANDE.VALEUR(NON(ESTVIDE(A1:A100))*ESTVIDE(A2:A100)*LIGNE(A1:A100);LIGNE(INDIRECT("A1:A"&NB(A1:A100)))))}
L'idée est de marquer par son numéro de ligne, le début d'une zone vide :

Code : Tout sélectionner

{=NON(ESTVIDE(A1:A100))*ESTVIDE(A2:A100)*LIGNE(A1:A100)}
puis la fin de cette même zone :

Code : Tout sélectionner

{=ESTVIDE(A1:A100)*NON(ESTVIDE(A2:A100))*LIGNE(A1:A100)}
MarquageZonesVides.png
Par différence des valeurs de fin et de début de même rang extraites au choix par une des deux fonctions GRANDE.VALEUR() ou PETITE.VALEUR(), on obtient une liste du nombre de cellules vides contiguës :

Code : Tout sélectionner

{=GRANDE.VALEUR(ESTVIDE(A1:A100)*NON(ESTVIDE(A2:A100))*LIGNE(A1:A100);LIGNE(INDIRECT("A1:A"&NB(A1:A100))))-GRANDE.VALEUR(NON(ESTVIDE(A1:A100))*ESTVIDE(A2:A100)*LIGNE(A1:A100);LIGNE(INDIRECT("A1:A"&NB(A1:A100))))}
ZoneVides.png
Pièces jointes
MaxCellulesVidesContigues.ods
(10.42 Kio) Téléchargé 203 fois
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Répondre