IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

NB.SI.ENS avec condition complexe, possible ?


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 51
    Points : 19
    Points
    19
    Par défaut NB.SI.ENS avec condition complexe, possible ?
    Bonjour,

    J'utilise la formule NB.SI.ENS habituellement et tout se passe bien mais elle ne semble pas fonctionner dès que la condition est plus complexe.
    Par exemple, dans mon fichier test, cela ne fonctionne pas du tout.
    En fait, je ne veux surtout pas passer par un sommeprod, bien trop coûteux en temps processeur, mon fichier de travail présentant 100000 observations sur 5 onglets, ça prend des heures ...
    J'expliuqe ici mais ça sera plus simple dans mon fichier test :

    variable
    1AAAAAA
    1AAAAAA
    2BBBBBB
    3CCCCCC
    3CCCCCC
    4DDDDDD
    5EEEEEE
    4DDDDDD
    1AAAAAA
    6AAAAAA

    Je veux compter le nombre de lignes différentes dont les 6 derniers caractères de ma variable sont "AAAAAA", "BBBBBB", "CCCCCC", etc.
    Soit pour AAAAAA : 2, BBBBBB : 1, CCCCCC : 1

    Merci pour votre aide.

    Cordialement.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé
    Homme Profil pro
    utilisateur
    Inscrit en
    Janvier 2017
    Messages
    669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : utilisateur
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2017
    Messages : 669
    Points : 1 109
    Points
    1 109
    Par défaut
    Bonjour alucard_xs,

    Testez avec la formule ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI($Feuille2.$A$2:$A$10;"*"&$A2)
    alucard_xs-test.ods
    LibreOffice 7.5.9.2.M1 (x64) FR-YT 05/12/23
    OS : Windows 11.0

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 51
    Points : 19
    Points
    19
    Par défaut
    Merci pour votre répondre mais hélas ça ne fonctionne pas comme je le voudrais.
    avec votre formule, pour le cas "AAAAAA", ça m'indique 4 au lieu de 2 (dans l'exemple de mon post).

  4. #4
    Membre éprouvé
    Homme Profil pro
    utilisateur
    Inscrit en
    Janvier 2017
    Messages
    669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : utilisateur
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2017
    Messages : 669
    Points : 1 109
    Points
    1 109
    Par défaut
    Personnellement j'en voie bien 4, les deux premiers et les deux derniers
    variable
    1AAAAAA
    1AAAAAA
    2BBBBBB
    3CCCCCC
    3CCCCCC
    4DDDDDD
    5EEEEEE
    4DDDDDD
    1AAAAAA
    6AAAAAA
    LibreOffice 7.5.9.2.M1 (x64) FR-YT 05/12/23
    OS : Windows 11.0

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 51
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par njhub Voir le message
    Personnellement j'en voie bien 4, les deux premiers et les deux derniers

    "Je veux compter le nombre de lignes différentes dont les 6 derniers caractères de ma variable sont "AAAAAA", "BBBBBB", "CCCCCC", etc."

    1AAAAAA
    1AAAAAA
    1AAAAAA
    6AAAAAA

    Soit que deux types de lignes différentes.

  6. #6
    Membre éprouvé
    Homme Profil pro
    utilisateur
    Inscrit en
    Janvier 2017
    Messages
    669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : utilisateur
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2017
    Messages : 669
    Points : 1 109
    Points
    1 109
    Par défaut
    Bonjour alucard_xs,

    Testez avec la formule ci-dessous dans une colonne supplémentaire en A:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTNUM(EQUIV(Feuille2.A2;Feuille2.A$1:Feuille2.A1;0));"";Feuille2.A2)
    en B votre liste
    en C :
    comptage
    AAAAAA 2
    BBBBBB 1
    CCCCCC 1
    DDDDDD 1
    EEEEEE 1
    LibreOffice 7.5.9.2.M1 (x64) FR-YT 05/12/23
    OS : Windows 11.0

  7. #7
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 26
    Points : 41
    Points
    41
    Par défaut
    Bonjour
    Citation Envoyé par alucard_xs Voir le message
    J'utilise la formule NB.SI.ENS habituellement.
    Dans ce cas, tu dois savoir que NB.SI.ENS() prolonge NB.SI dans le cas où il y a plusieurs plages à tester : elle renvoie le nombre de cas qui satisfont toutes les conditions (comme un ET). Or dans l'exemple de ton fichier joint, tu utilises un nombre impair d'arguments pour NB.SI.ENS() qui doit toujours avoir un nombre pair (plage; critère; plage; critère;etc.) ce qui explique l'erreur 511, ce n'est pas dû à la complexité de ce que tu lui demandes.
    Par exemple, en B2 de la feuille Comptage, au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI.ENS($Feuille2.$A$2:$A$10;DROITE($Feuille2.$A$2:$A$10;6);$A2)
    tu aurais dû mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI.ENS(DROITE($Feuille2.$A$2:$A$10;6);$A2)
    Seulement, comme tu utilises la fonction DROITE(), qui n'est pas naturellement matricielle, tu dois valider la formule en matriciel, par Ctrl+Maj+Entrée. Je comprends que tu puisses vouloir utiliser la fonction DROITE() si tu ne veux pas utiliser les expressions régulières dans les formules (par exemple si tu as des chaînes de texte avec des caractères spéciaux) mais si ça n'est pas le cas, tu aurais tout intérêt à utiliser la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI.ENS($Feuille2.$A$2:$A$10;".?"&$A2)
    qui elle ne nécessite pas de validation matricielle. Et, tant qu'on y est, puisqu'il n'y as qu'une seule plage testée par formule, tu peux oublier NB.SI.ENS et revenir à NB.SI , que ce soit en matriciel avec DROITE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI(DROITE($Feuille2.$A$2:$A$10;6);$A2)
    ou sans matriciel avec les expressions régulières :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI($Feuille2.$A$2:$A$10;".?"&$A2)
    Cordialement,
    Pekoe

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 51
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup pour l'ensemble de vos réponses.
    La dernière va au-delà de ce que j'attendais, et je constate que je ne maîtrise pas si bien que cela cette fonction.
    Par contre, testé avec mon fichier et on m'affiche 0.

    Merci
    Fichiers attachés Fichiers attachés

  9. #9
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 26
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Pekoe
    avec les expressions régulières
    Outils > Options >LibreOffice Calc > Calcul > cocher Autoriser les expressions régulières dans les formules.
    Cordialement

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 51
    Points : 19
    Points
    19
    Par défaut
    merci, je ne connaissais pas non plus cela.
    Mais le comptage n'est toujours pas le bon avec l'expression régulière.

    en entrée :

    1AAAAAA
    1AAAAAA
    2BBBBBB
    3CCCCCC
    3CCCCCC
    4DDDDDD
    5EEEEEE
    4DDDDDD
    1AAAAAA

    comptage
    AAAAAA 3 (au lieu de 1 car j'ai 3 fois la même ligne et moi je veux le nombre de lignes distinctes par code "AAAAAA","BBBBBB", etc.

  11. #11
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 26
    Points : 41
    Points
    41
    Par défaut
    Bonjour,
    Désolé, je n'avais pas compris que tu voulais faire un comptage sans doublon.
    Une solution en B2 du fichier joint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME(1/NB.SI(SI(DROITE($Feuille2.$A$2:$A$10;6)=$A2;$Feuille2.$A$2:$A$10;1);SI(DROITE($Feuille2.$A$2:$A$10;6)=$A2;$Feuille2.$A$2:$A$10;1)))-1
    matricielle.
    Remarques : à tester en fonction du temps de calcul, dès qu'il s'agit de tout balayer pour rechercher les doublons... c'est long !
    J'ai mis 1 dans la fonction SI() pour éviter une division par zéro dans la partie 1/NB.SI(), comme ce 1 est une nouvelle valeur, je décrémente en fin de formule avec -1.
    test_Pk01.ods
    Cordialement,

  12. #12
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello,
    au cas où l'utilisation d'une macro n'est pas rédhibitoire, il y a possibilité avec des tableaux d'utiliser la puissance du python en passant par l'extension EasyDev
    Dans ce cas pas la peine d'utiliser une feuille intermédiaire.

    Nom : CompterJP.gif
Affichages : 1978
Taille : 93,0 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 51
    Points : 19
    Points
    19
    Par défaut
    Merci, par contre, question bête, comment vous faites pour faire incrémenter automatiquement la variable A2 du la partie, par exemple, de la formule :

    DROITE($Feuille2.$A$2:$A$20;6)=$A2 ?

    En descendant la formule, elle reste figée à A2 et ne passe jamais, à A3, A4, etc.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 51
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    au cas où l'utilisation d'une macro n'est pas rédhibitoire, il y a possibilité avec des tableaux d'utiliser la puissance du python en passant par l'extension EasyDev
    Dans ce cas pas la peine d'utiliser une feuille intermédiaire.

    Nom : CompterJP.gif
Affichages : 1978
Taille : 93,0 Ko

    Ami calmant, J.P
    Bonjour et merci au passage !!!

  15. #15
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 26
    Points : 41
    Points
    41
    Par défaut
    Bonjour,
    Citation Envoyé par alucard_xs Voir le message
    comment vous faites pour faire incrémenter automatiquement la variable A2 du la partie, par exemple, de la formule :
    DROITE($Feuille2.$A$2:$A$20;6)=$A2 ? En descendant la formule, elle reste figée à A2 et ne passe jamais, à A3, A4, etc.
    Pour copier une formule matricielle vers le bas, il suffit de mettre le pointeur de la souris sur le coin inférieur droit de la cellule (le pointeur prend la forme d'une croix) et de copier-glisser vers le bas en maintenant la touche Ctrl enfoncée. Une autre solution consiste à copier la cellule d'origine, à sélectionner les autres cellules et à coller.
    Cordialement,

Discussions similaires

  1. [XL-365] Probleme Nb.si.ens avec conditions d'encadrement
    Par Jeremy.fuego dans le forum Excel
    Réponses: 2
    Dernier message: 24/12/2019, 08h28
  2. Somme.si.ens avec condition d'occurrences
    Par kanye64 dans le forum Excel
    Réponses: 3
    Dernier message: 09/11/2018, 19h01
  3. NB.SI.ENS avec condition date
    Par Killian7 dans le forum Excel
    Réponses: 6
    Dernier message: 18/05/2018, 12h16
  4. [AC-2007] Conception d'une base de controle complexe avec conditions
    Par Edios51 dans le forum Modélisation
    Réponses: 2
    Dernier message: 29/06/2010, 17h30
  5. [Vxi] Jointure complex avec condition 'IF'
    Par gillou13 dans le forum Designer
    Réponses: 4
    Dernier message: 23/04/2010, 17h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo