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

Excel Discussion :

Fonction Excel ALEA.ENTRE.BORNES avec chiffres exclus [XL-2016]


Sujet :

Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2018
    Messages : 7
    Par défaut Fonction Excel ALEA.ENTRE.BORNES avec chiffres exclus
    Bonjour,

    Dans le cadre d'un projet d'étude, sur Excel, je souhaite obtenir tous les nombres compris entre 1111111111 et 5555555555 en excluant les chiffres 0 - 6 - 7 - 8 et 9.

    J'ai pensé à la fonction ALEA.ENTRE.BORNES pour générer toutes les possibilités (soit 5^10 = 9 765 625).
    Mais je ne vois pas comment mettre les conditions ci-dessus dans la formule...
    Si vous avez d'autre piste n'hésitez pas.

    Un grand merci à vous si vous me trouvez une solution.

    Bien cdt
    VBA1987
      0  0

  2. #2
    Membre éprouvé
    Inscrit en
    Juin 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 93
    Par défaut
    Bonjour
    Pour orienter la réponse
    • Que veux tu faire avec les valeurs récupérées ? (une par cellule, toutes dans la même, n'en prendre qu'une,...)
    • est ce que c'est un "one shot" ou tu veux ré-effectuer le calcul plusieurs fois. (pour savoir à quel point il faut optimiser la recherche)


    Note que ALEA ne fonctionnera pas puisqu'il renvoie une valeur aléatoire entre tes bornes. Toi, tu veux toutes les valeurs

    Nekko
      1  0

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Tu fais 10 colonnes.
    Dans chacune, tu mets une fonctions ALEA.ENTRE.BORNES pour obtenir un nombre entre 1 et 5.
    Dans une 11è colonne, tu concatènes les 10 autres.

    Citation Envoyé par VBA1987 Voir le message
    Dans le cadre d'un projet d'étude, sur Excel, je souhaite obtenir tous les nombres compris entre 1111111111 et 5555555555 en excluant les chiffres 0 - 6 - 7 - 8 et 9.
    J'ai pensé à la fonction ALEA.ENTRE.BORNES pour générer toutes les possibilités (soit 5^10 = 9 765 625).
    La fonction ALEA n'est pas adaptée à cet usage. Elle renvoie UNE valeur aléatoirement, elle ne fait pas la liste de toutes les valeurs.

    L'expérience à montré que ce type de demande était une erreur de conception.
    Déjà, tu ne pourras ma mettre plus d'un million de lignes dans Excel.
    Ensuite, même si tu obtient cette suite, elle sera ingérable "à la main".
    Il est donc inutile de perdre du temps à essayer d'obtenir cette suite. Il serait plus constructif de savoir ce que tu comptes en faire pour t'expliquer comment faire le traitement.
    Il y a de grandes chances que ça suppose un passage par VBA.
      1  1

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2018
    Messages : 7
    Par défaut
    Merci à vous pour vos réponses et à vos remarques pertinentes, j'adore ce site.

    Concrètement je cherche le moyen de générer toutes les combinaisons pour k = 10 et n = {1-2-3-4-5} // plus simplement tous les nombres compris entre 1111111111 et 5555555555 composés des chiffres 1-2-3-4-5.
    idéalement 5^10, soit 9 765 625 possibilités
    à la rigueur 4^10, soit 1 048 576 possibilités
    au pire 3^10, soit 59 049 possibilités.

    effectivement la fonction ALEA.ENTRE.BORNES à ses limites, c'est peut être une fausse bonne idée.

    Et oui une macro Excel VBA serait l'idéale pour générer toutes les combinaisons serait top, mais il me semble que c'est pas si simple, non?

    Encore merci à vous !
      0  0

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    5^10 > le nombre de lignes d'une feuille Excel...

    La fonction suivante, à la brutale, génèrera le tableau souhaité. Dans la mesure où tu as 4 444 444 444 boucles à réaliser, j'espère que tu as autre chose à faire pendant que ça tourne (+/- 111 minutes)... (EDIT: Fonction corrigée)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Function getTable()
      Dim Regexp As Object
        Dim t(1 To 9765625)
      Dim i As Double, Value As Double
      Dim Counter As Long
     
      Set Regexp = CreateObject("VBScript.RegExp")
      Regexp.Pattern = "[^06789]{10}"
     
      Counter = 1
      For i = 1 To 4444444444#
        Value = 1111111110 + i
        If Regexp.test(Value) Then
          t(Counter) = Value
          Counter = Counter + 1
        End If
      Next
      getTable = t
    End Function
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      1  0

  6. #6
    Membre éprouvé
    Inscrit en
    Juin 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 93
    Par défaut
    Bonjour
    Ce que tu demandes me fait penser à une base sénaire (base 6), auquel on enlève le "0". Je ne sais pas si Excel est capable de le gérer.... (c'est pas courant).
    Sinon, sans VBA, peut être qu'on peut appliquer les mêmes types de formules de conversion que le décimal vers l'hexadécimal mais honnêtement, c'est un peu loin tout ça et il faudrait que je cherche un peu.
    La solution de Pierre Fauconnier à l'avantage d'être prête à l'emploi

    Nekko
      1  0

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par VBA1987 Voir le message
    Concrètement je cherche le moyen de générer toutes les combinaisons pour k = 10 et n = {1-2-3-4-5} // plus simplement tous les nombres compris entre 1111111111 et 5555555555 composés des chiffres 1-2-3-4-5.
    Ca, on l'a compris.
    Ce qu'on te demande c'est "dans quel but ?".
    Ca n'est sûrement pas pour le plaisir de les regarder, n'est-ce pas ?
    Donc, comme c'est vraisemblablement pour un traitement ultérieur, il est probable que la méthode pour réaliser ce traitement inclue la génération de ces combinaisons et rende caduque la nécessité de les générer dans des cellules.

    Donc, tant que tu n'en auras pas dit plus, il sera impossible d'apporter une solution utilisable.

    effectivement la fonction ALEA.ENTRE.BORNES à ses limites, c'est peut être une fausse bonne idée.
    Ca n'est pas une question de "limite", c'est seulement que ce n'est pas l'outil approprié : tu veux une suite ordonnée, pas une série aléatoire.

    Et oui une macro Excel VBA serait l'idéale pour générer toutes les combinaisons serait top, mais il me semble que c'est pas si simple, non?
    Générer ces données pourrait se faire par des fonctions Excel.
    C'est le traitement de ces données qui nécessitera sans doute du VBA et qui rendra donc inutile le fait de l'avoir fait avec des fonctions.
    On en revient donc à ma remarque précédente : POUR QUOI FAIRE ?
      1  1

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Pour info (et bien que je sois persuadé que c'est complètement inutile), voici comment obtenir ce que tu souhaites.
    Mets 1 en A1 et B1.
    En A2, mets la formule =MOD(A1;5)+1 .
    En B2, mets la formule =SI(ET(A2=1;A1<>1);MOD(B1;5)+1;B1) .
    Tu copies la colonne B dans les colonnes C à J.
    Tu copies la ligne 2 dans les 9 millions de lignes du dessous (sauf que Excel est limitée à 1 million).
      1  1

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 38
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Pour info (et bien que je sois persuadé que c'est complètement inutile), voici comment obtenir ce que tu souhaites.
    Mets 1 en A1 et B1.
    En A2, mets la formule =MOD(A1;5)+1 .
    En B2, mets la formule =SI(ET(A2=1;A1<>1);MOD(B1;5)+1;B1) .
    Tu copies la colonne B dans les colonnes C à J.
    Tu copies la ligne 2 dans les 9 millions de lignes du dessous (sauf que Excel est limitée à 1 million).
    Bonjour,

    une macro VBA avec ces mêmes calculs pourrait envoyer le résultat dans un fichier texte. Inexploitable bien sûr avec Excel, mais si le traitement ultérieur se passe ailleurs…
      1  0

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Toutes tes réponses ne font qu'éluder la vraie question, à savoir :
    - Que comptes-tu faire (très exactement) d'une telle "liste". Et ce : où que tu la stockes (cellules, fichier texte, base de données ou autre) ????
    Tu ne comptes tout de même pas en exploiter chaque élément, non ?
    Et alors : pourquoi stocker tous ces éléments ?
    Tout cela me parait pour le moins cocasse (et je pèse mes termes).
      1  1

  11. #11
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2018
    Messages : 7
    Par défaut
    Re-bonjour,
    @Pierre, (omg un responsable Excel est venu dans mon forum ), merci merci, mais oui trop long..
    @Menhir, ta méthode (=MOD(A1;5)+1)etc.. est vraiment pas mal, et oui 5^10 c’est beaucoup trop, mais 4^10 c’est gérable, merci merci !

    Merci aux autres également, et oui, vous être très perspicaces , mon vrai problème est ailleurs, donc je me lance, voici ma problématique, c’est simple à comprendre mais à mettre en application sur Excel… moins évidents.
    Enoncé : J’ai un tableau de 4 colonnes,

    - En colonne A j’ai le Nom des produits (tous uniques), environ 500.
    - En colonne B j’ai leur Prix (peuvent être identique) compris entre 60 et 600 €.
    - En colonne C j’ai la Catégorie des produits, soit A, B ou C.
    - En colonne D j’ai le nom des Sociétés qui vendent ces produits, 15 environ.

    Je dois acheter 10 produits.
    Je suis limité à 3 produits max par Société.
    Pour mes 10 produits au total, j’ai un budget limité à 3 000€.

    Donc le but du jeu serait qu’Excel me ressorte toutes les listes possibles en respectant ces critères, et que mon prix total se situe entre 2 900€ et 3 000€ max.
    On part également du principe que plus le produit est cher, mieux il est.
    Mathématiquement c’est pas bien compliqué de retrouver les possibilités, mais ce que je ne sais pas faire c’est une solution qui m’affiche la liste avec le nom des produits.

    (D’où ma première question, toutes les combinaisons possibles entre 1111111111 et 4444444444, comme ça à l’aide de fonction je classe mes produits par société, par catégorie, ensuite je tire la liste de toutes les combinaisons possible, et je garde celle qui ont un total < à 3 000€, un peu long et fastidieux..)

    Voilà, encore merci à vous pour votre aide.
    c'est top
      0  0

  12. #12
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    C'est bien ce que je pensais : cette gymnastique combinatoire était COMPLETEMENT inutile pour résoudre ce problème.
      1  0

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/01/2018, 17h27
  2. [Toutes versions] ALEA.ENTRE.BORNES - Générer des noms, prénoms et dates aléatoires
    Par Philippe Tulliez dans le forum Contribuez
    Réponses: 0
    Dernier message: 26/05/2013, 19h00
  3. [XL-2007] ALEA.ENTRE.BORNE() avec des mots en résultats : Est ce possible ?
    Par kenycolasdu43 dans le forum Excel
    Réponses: 2
    Dernier message: 31/03/2011, 14h22
  4. Réponses: 2
    Dernier message: 22/05/2009, 23h00
  5. ALEA.ENTRE.BORNE() Comment faire ?
    Par Jimy6000 dans le forum Excel
    Réponses: 28
    Dernier message: 23/01/2008, 07h09

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