Formule excel

Résolu
abn279 Messages postés 20 Statut Membre -  
abn279 Messages postés 20 Statut Membre -
Bonjour à tous!
En colonne A j'ai des nombres compris entre 001 et 999 .Exemple
584
10
592
401
etc.
Pour savoir les nombres qui manquent je dois trier et compter. Par exemple si 1 est suivi de 4 je saurai que c'est 2 et 3 qui manquent; mais cette démarche ne me semble pas pratique et ça me prend beaucoup de temps. Ainsi est ce que je pourrais avoir en colonne B une formule qui me permet d'afficher les nombres manquant en colonne A?
Cordialement.

3 réponses

  1. Raymond PENTIER Messages postés 58211 Date d'inscription   Statut Contributeur Dernière intervention   17 480
     
    Non ; ce n'est pas évident !
    Si tu expliquais le contexte, afin qu'on sache de quoi il s'agit, on pourrait te suggérer d'autres approches ...
    0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    Les numéros de ta colonne A sont ils toujours regroupés et triés dans l'ordre croissant (ou décroissant) ?
    Pourquoi commencer par zéro alors que tu demandes entre 1 et 999 ?
     Michel
    0
    1. abn279 Messages postés 20 Statut Membre
       
      bonjour,
      Ils sont triés dans l'ordre croissant ; C'est que je les ai extraites sur une base de donnée. Mais ce sont les no compris entre 001 à 999 qui m’intéresse. Excuse je devais les enlever.
      0
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > abn279 Messages postés 20 Statut Membre
         
        avec une macro (durée instantanée): sur 30000 lignes ,bonjour par formules, qui + est apparemment matricielles !

        Option Explicit
        '-----------------------------------
        Sub numéros_manquants()
        Dim Derlig As Long, T_colA, T_colB, Cpta As Long, Cptb As Integer, Diff As Integer, Inc As Integer

        Application.ScreenUpdating = False
        Derlig = Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
        T_colA = Application.Transpose(Range("A2:A" & Derlig))
        Range("B2:B1000000").Clear
        ReDim T_colB(1 To UBound(T_colA))

        For Cpta = 2 To UBound(T_colA)
        If T_colA(Cpta) - T_colA(Cpta - 1) > 1 Then
        Diff = T_colA(Cpta) - T_colA(Cpta - 1)
        For Inc = 1 To Diff - 1
        Cptb = Cptb + 1
        T_colB(Cptb) = T_colA(Cpta - 1) + Inc
        Next
        End If
        Next
        Range("B2").Resize(UBound(T_colB), 1) = Application.Transpose(T_colB)
        End Sub


        ton classeur en retour
        http://www.cjoint.com/c/FChjNxLK2oN
        0
      2. abn279 Messages postés 20 Statut Membre > michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention  
         
        merci michel-m ça marche même si je ne sais comment car je ne connais pas grand chose en vba.
        encore merci !!
        0
  3. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    Bonsoir à tous,

    de ce que j'ai compris :

    si tes données sont en $A$3:$A$1500 (je suppose qu'il y a des répétitions donc).
    si en $C$2 tu calcules le nombre de valeurs non trouvées avec la formule
    =999-SOMMEPROD(1/NB.SI($A$3:$A$1500;$A$3:$A$1500))


    alors, en $B$3 tu saisis :
    =SI(LIGNE()-2<=C$2;PETITE.VALEUR(SI(ESTERREUR(EQUIV(LIGNE($1:$999);$A$3:$A$1500;0));LIGNE($1:$999);9^9);LIGNE()-2);"")
    que tu valides par CTRL+MAJ+ENTER.
    tu recopies ensuite cette formule jusqu'en $B$1001 (pour le cas où tu aurais 999 valeurs manquantes)

    j'ai mis une cellule intermédiaire en $C$2 pour accélérer le calcul.

    cordialement
    -1
    1. abn279 Messages postés 20 Statut Membre
       
      Bonsoir à tous!
      je pense que je me suis mal exprimé; je vais envoyé fichier Cjoint comme exemple: https://www.cjoint.com/c/FCewVVoJIlM
      Voilà !!
      0