Rechercher une valeur ds intervals de valeur

Résolu
Martin -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Voici mon probleme :
J'ai des "codes" et des "types de codes"
les types de codes sont identifiés par des plages (un code se trouve forcément dans une plage et a donc forcément un type de code):

Codes de 600000 à 799999

Types de codes :

Type de code1
de à
600000 619999
700000 749999
760000 789999

Type de code2
de à
620000 649999
750000 759999

Type de code3
de à
650000 699999
790000 799999

La j'ai simplifié parce que en réalité chaque type de code correspond à environ 10 plages différentes.

Je cherche une facon d'obtenir, en tapant le code dans une cellule, le type de code auquel il correspond (dans une autre cellule)
Quelque chose du genre :
si je met en 3 colonnes : "de" ; "à" ; "type de code"

-> "dans les colonnes de, à, type de code,
si code>de et code<à
alors ma cellule = type de code

Remarques :
il n'est pas possible d'utiliser des "si(...)" imbriqués car il y en aurait trop
je ne peux pas faire une liste exhaustive de tous les codes les uns en dessous des autres, il y en aurait trop (200 000)

Merci beaucoup d'avance pour votre aide!
Martin
martindh@hotmail.com si nécessaire

10 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    heuuu oui, c'est que j'ai oublié de joindre le fichier :-)
    merci, je corrige
    http://www.cijoint.fr/cij19034132428847.xls
    Pour la version formule il faut recopier les cellules F13 à I13 vers le bas pour corriger le calcul....
    eric
    1
    1. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
       
      Bonsoir eriiic,
      Merci infiniment, c'est maintenant tout clair et très instructif.
      Bonne fin de soirée.
      0
  2. giheller
     
    Je suppose que c'est dans excel. Voir si l'écriture d'une macro qui se lancerait à l'open du fichier ne pourrait pas résoudre le pb.
    0
  3. Martin
     
    oui j'ai oublié de préciser c'est bien dans Excel...
    Pour la macro...elle ferait comment?
    Je n'ai pas de préférence macro ou formule, tant que j'arrive à trouver mon résultat
    sachant qu'une formule serait mieux car je voudrais dans un fichier contenant plein de code dans une colonne, mettre le type de code dans la cellule d'à coté...

    Merci d'avance!
    0
  4. giheller
     
    outils macro

    puis on écrit en VB

    exemple pour donner une valeur à une cellule

    range("A3").value = quelquechose qui peut être le résultat d'un calcul ou de plein de chose;

    Pour boucler on peut faire un truc du genre :

    for i = 1 to 100
    range("A"+Cstr(i)).value )= i
    next i

    quand on est dans outils macro, il y a une aide en ligne pour Visual basic
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Martin
     
    Merci Giheller
    en revanche je ne suis pas un pro des macros, que pensais tu obtenir avec ce genre d'itération?
    J'ai un peu de mal à comprendre ou tu veux en venir...?

    Pour préciser ma demande :
    https://www.cjoint.com/?kqqkMt7ON2
    Comment obtenir les résultats de la colonne F ?

    Une formule à recopier serait idéale...
    0
  7. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Ci joint une solution par formule sans vba
    http://www.cijoint.fr/cij58617924028818.xls

    J'ai modifié ta présentation de ta liste de code, triée par 'DE' et espaces supprimés.
    Je t'ai décomposé la formule en 4 formules que tu puisses suivre le raisonnement et ne pas avoir un truc illisible

    Teste et dis si ça te convient sinon on pourra faire une fonction personnalisée qui te ramera directement la valeur

    eric
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      PS:
      une petite erreur c'est glissée sur la feuille pendant les tests.
      Recopie la formule I13 sur I14:I17
      eric
      0
  8. giheller
     
    La solution d'Eric esr sans doute plus simple que la mienne, surtout si tu ne connais pas la façon de coder et de faire des macros. Désolé c'était une idée complexe.
    Jean-Luc
    0
  9. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Re,

    Nouvelle feuille avec la variante fonction personnalisée.
    Utilisation :
    tu sélectionnes ta cellule de destination
    menu "insertion / fonction..." rubrique 'personnalisées'
    tu choisis TypeCode ou Martin.xls!TypeCode si tu es dans un autre classeur.
    Tu cliques sur la cellule contenant la reference à contrôler, et tu as ta réponse

    Si tu travaille dans un autre classeur il faudra ouvrir celui-ci pour disposer de la fonction. A la limite une fois saisie ta liste tu peux le mettre en masqué pour ne pas gener, la fonction ser accessible.
    eric
    0
    1. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
       
      Bonsoir eriiic,
      C'est par hasard que j'ai regardé ce poste et j'ai admiré la manière de faire.
      Par contre je n'arrive pas à comprendre ce dernier poste 8 ..... pouvez-vous éclairer ma lanterne...
      Merci
      0
  10. Martin
     
    Bonjour,
    Alors vraiment un grand merci à tous.
    Je pensais pas avoir une aussi grande réactivité.
    Ca répond exactement à ce que je cherchais.
    Eric ta solution est parfaite, d'autant que je ne connaissais pas la fonction personnalisée.
    Juste une petite question : comment définir une fonction personnalisée?
    Merci
    Martin
    0
  11. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    une fonction personnalisée n'est rien d'autre qu'un programme en vba déclaré en tant que fonction... Bien sûr il faut connaitre un peu vba.
    Fait un clic droit sur l'onglet de ta feuille et choisi 'visualiser le code', tu double-cliques sur le module 1 et tu peux lire la déclaration de la fonction :
    Function TypeCode(Ref As Range) As String
        Dim c As Range, rep As String
        For Each c In Range("TypesCodes")
            If c.Offset(0, 1).Value <= Ref.Value And c.Offset(0, 2).Value >= Ref.Value Then
                rep = c.Value
                Exit For
            Else
                rep = "inconnu"
            End If
        Next c
        TypeCode = rep
    End Function


    Mainenant tu peux essayer d'en créer des simples pour découvrir, ensuite tu pourras souvent te simplifier tes pb. N'hésites pas à utiliser l'aide d'excel qui est très bien faite.

    Si ça te parait complet n'oublie pas de mettre en résolu ici (en passant par 'voir mes interventions')
    eric
    0