Trouver la valeur la plus petite non utilisée dans une plage

Bonjour,

Je cherche simplement via une formule ou une macro, à trouver la valeur la plus petite non utilisée dans une plage (avec ou sans chiffres après la virgule).

Avez vous une idée??

Merci à vous!!

Bonjour,

Me concernant, valeur la plus petite ça a du sens, mais pour non utilisée je ne vois pas !

Merci Pedro22,

Je te joint un fichier exemple. La plage A1:E20 sera vouée a être une plage dynamique avec un ajout de ligne et de nouvelles valeurs. L'ajout des valeurs sera fait en fonction des valeurs existantes et évitant de créer des doublons.

Pour l'exemple ci joint j'ai créée une plage simple de A1:E20. Dans la case I3 j'aimerai que soit affiché le chiffre entier de 0 à 999, qui soit le plus petit des chiffres non existant de la plage.

Le résultat dans l'exemple serait "004". Si on ajoute la valeur 004 le résultat sera 006 car 005 est existant etc...

J'espère être plus claire

16testdispo.xlsx (9.43 Ko)

C'est plus clair !!

Une proposition avec fonction personnalisée VBA :

Public Function CodeMinDispo(ByVal Plage As Range) As Long

Dim Nb As Long, Cel As Range, Existe As Boolean

Do
    Nb = Nb + 1
    For Each Cel In Plage
        If Cel.Value = Nb Then Existe = True: Exit For
        Existe = False
    Next Cel
Loop While Existe = True
CodeMinDispo = Nb

End Function

Le code est à coller dans un module standard de l'éditeur VBA (alt + F11 pour y accéder), le fichier est à enregistrer au format .xlsm.

Ensuite, la fonction s'utilise comme une fonction Excel classique :

=CodeMinDispo(A1:E20)

Merci Perdro22 c'est parfait. Je vais essayer de l'adapter à mon code mais c'est exactement ce qu'il me fallait.

Merci beaucoup!!

Bonjour,

Merci du retour et pour la validation !

Bonne journée.

Bonjour,

J'aimerai ajouter une donnée, si possible. J'aimerai avoir la même formule mais avec un minimum dans la recherche des plus petite valeur.

Exemple : Dans la plage, il faut trouver la plus petite valeur à partir de 300.

As tu une idée de code?

Public Function CodeMinDispo(ByVal Plage As Range, ByVal Mini As Range)

Dim Nb As Long, Cel As Range, Existe As Boolean

Do
    Nb = Nb + 1
    For Each Cel In Plage
        If Cel.Value = Nb + Mini Then Existe = True: Exit For
        Existe = False
    Next Cel
Loop While Existe = True
CodeMinDispo = Nb + Mini

End Function

J'ai trouvé!!

Bonjour,

Ravi que tu es trouvé une réponse, j'ai écrit pour l'exercice çà, alors je partage moi aussi

Public Function CodeMinDispo(ByVal Plage As Range, Optional start As Long) As Long

Dim Nb As Long, Cel As Range, Existe As Boolean

Do
    Nb = Nb + start + 1
    For Each Cel In Plage
        If Cel.Value = Nb Then Existe = True: Exit For
        Existe = False
    Next Cel
Loop While Existe = True
CodeMinDispo = Nb

End Function

Le fait de mettre optionnel l'argument du départ me paraissait une option à tester ?

Leakim

Oui exact ça fonctionne !

Re,

Merci pour ta confirmation, c'est sympa

Leakim

Bonjour tout le monde !

Je ramène mon grain de sel, mais à mon avis aucune des 2 propositions ne fonctionne... Dans la première, avec CodeMinDispo = Nb + Mini tu obtiens potentiellement un nombre déjà existant, et très certainement pas le plus petit. Dans la seconde avec Nb = Nb + start + 1, on ajoute la valeur start à nb à chaque tour de boucle... Donc au lieu d'augmenter de 1 en 1, nb va augmenter de start + 1 ! Autre suggestion :

Public Function CodeMinDispo(ByVal Plage As Range, Optional Start As Long) As Long

Dim Nb As Long, Cel As Range, Existe As Boolean

Nb = Start
Do
    Nb = Nb + 1
    For Each Cel In Plage
        If Cel.Value = Nb Then Existe = True: Exit For
        Existe = False
    Next Cel
Loop While Existe 
CodeMinDispo = Nb

End Function

Bonjour,

Je me doutais bien que c'était si fonctionnel, mais pas loin dans la logique alors je suis

Merci Pedro22

Leakim

Rechercher des sujets similaires à "trouver valeur petite utilisee plage"