trouver les chiffres manquant d'une liste

thehaker42

XLDnaute Nouveau
Bonjour à tous,

j'ai réussi a trouver un bout de code VBA
(qui marche sur une liste sur la colonne A)

mais sur mon tableau le VBA marche pas
ou alors il me trouve les inconnus et continu jusqu'en bas du tableur(65000)
ou alors une erreur sur une ligne du VBA: " Cells(p, 16) = n "

Sub recup_place_dispo()

' Supprimer les anciennes valeurs pour
' une liste sans les anciens résultats
'Range("Z2:Z450").Select
'Selection.ClearContents

' Initialisation des variables
p = 2
fin = Val([H500])
n = [H2]
i = 2

' placement des chiffres trouvés sur la
' 16° colonne (O)
' incrémentation de la valeur précédente
' … afin de détecter les places dispo.

Do While n < fin
If n <> Val(Cells(i, 8)) Then
Cells(p, 16) = n
p = p + 1
n = n + 1
Else
i = i + 1
If Val(Cells(i, 8)) <> Val(Cells(i - 1, 8)) Then n = n + 1
End If
Loop

End Sub

Ce programme me sert pour trouver les casiers libres du magasin
Merci
 

Pièces jointes

  • test.xls
    48.5 KB · Affichages: 115
  • test.xls
    48.5 KB · Affichages: 118
  • test.xls
    48.5 KB · Affichages: 121

Odesta

XLDnaute Impliqué
Re : trouver les chiffres manquant d'une liste

Bonjour et bienvenue

Premierement, il faut mettre à la place de "fin = Val([H500])" le nombre de casier que vous avez :
Si c'est 150 : fin = 150

Lancer le programme, il écrira en colonne P la liste des casiers manquants de entre 1 et 150.

Mais le programme n'est pas forcement adapté si la liste des casier n'est pas trié au préalable.

Quel est votre besoin exactement ? Que représente un caiser ? Qui remplis l'imformation qu'un casier est libre ou non ? A quel fréquences ? Quel est le but de connaître les casiers vide ? Le nombre de casier est-il stable dans le temps (sur une échelle longue par rapport à la fréquence de rensieignement des données) ?

Cdt
Olivier
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : trouver les chiffres manquant d'une liste

Bonjour le fil, bonjour le forum,

Peut-être comme ça :
Code:
Sub Macro1()
Dim pl As Range 'déclare la varialbe pl (PLage)
Dim x As Integer 'déclare la varialbe x (incrément)
Dim c As String 'déclare la variable c (casier)
 
Set pl = Range("H2:H" & Range("H65536").End(xlUp).Row) 'définit la plage pl
 
'boucle sur toutes les valeurs comprises entre la valeur de H2 et la valeur de la dernière cellule éditée dans la colonne H
For x = Range("H2") To Range("H65536").End(xlUp).Value - 1
    If pl.Find(x + 1, , xlValues, xlWhole) Is Nothing Then 'condition : si la valeur de x+1 n'existe pas adsn la plage
        c = c & x + 1 & Chr(13) 'définit c
    End If 'fin de la condition
Next x 'prochaien valeur de la boucle
 
MsgBox c 'message affichant c
End Sub
 

thehaker42

XLDnaute Nouveau
Re : trouver les chiffres manquant d'une liste

Bonjour et bienvenue

Premierement, il faut mettre à la place de "fin = Val([H500])" le nombre de casier que vous avez :
Si c'est 150 : fin = 150

Lancer le programme, il écrira en colonne P la liste des casiers manquants de entre 1 et 150.

Mais le programme n'est pas forcement adapté si la liste des casier n'est pas trié au préalable.

Quel est votre besoin exactement ? Que représente un caiser ? Qui remplis l'imformation qu'un casier est libre ou non ? A quel fréquences ? Quel est le but de connaître les casiers vide ? Le nombre de casier est-il stable dans le temps (sur une échelle longue par rapport à la fréquence de rensieignement des données) ?

Cdt
Olivier

En faite un opérateur ajoutera dans le fichier excel une nouvelle référence outil, j'ai laissé le maxi a 500 casiers ( fin = 500). Le but de savoir les casiers vide est de proposer un casier libre pour l'opérateur (question ergonomie). Je ne sais pas a quel fréquences les casiers sont libre ou pas et encore moins si le nombre est stable d'où le choix de prendre 500 casier au total (il y a deja 360 casiers utilisés)

J'ai réussi a faire marcher mon code VBA
Code:
Sub essai()
             
             ' Supprimer les anciennes valeurs pour
             ' une liste propre
    Columns("P:P").Select
    Selection.Delete Shift:=xlToLeft
              
              ' Initialisation des variables
p = 2
fin = [H500].End(xlUp)
n = Val([H2])
i = 2

            ' placement des chiffres trouvés sur la
            ' 16° colonne (P)
            ' incrémentation de la valeur précédente
            ' … afin de détecter les places dispo.
Do While n < fin
    If n <> Val(Cells(i, 8)) Then
     Cells(p, 16) = n
     p = p + 1
     n = n + 1
    Else
     i = i + 1
     If Val(Cells(i, 8)) <> Val(Cells(i - 1, 8)) Then n = n + 1
    End If
Loop
End Sub

Edit:
Merci Robert
je regarde ce que sa donne
:)
Edit:
Merci Robert mais le but etait de récupérer une liste (colonne P) afin d'avoir une liste a proposer lorsque l'opérateur entre une nouvelle réf.
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : trouver les chiffres manquant d'une liste

Bonsoir le fil, bonsoirle forum,

Désolé je n'avais pas pris le temps de tout lire... Pour une liste en P il y avait si peu à modifier...
Code:
Sub Macro1()
Dim pl As Range 'déclare la varialbe pl (PLage)
Dim x As Integer 'déclare la varialbe x (incrément)
Dim dest As Range 'déclare la variable dest (DESTination)
 
Set pl = Range("H2:H" & Range("H65536").End(xlUp).Row) 'définit la plage pl
 
'boucle sur toutes les valeurs comprises entre la valeur de H2 et la valeur de la dernière cellule éditée dans la colonne H
For x = Range("H2") To Range("H65536").End(xlUp).Value - 1
    If pl.Find(x + 1, , xlValues, xlWhole) Is Nothing Then 'condition : si la valeur de x+1 n'existe pas dasn la plage pl
        Set dest = Range("P65536").End(xlUp).Offset(1, 0) 'définit la cellule de destination
        dest.Value = x + 1 'place la valeur x+1 dans la cellule de destination
    End If 'fin de la condition
Next x 'prochaien valeur de la boucle
End Sub
En pièce jointe ton fichier :
 

Pièces jointes

  • Thehaker_v01.xls
    45 KB · Affichages: 154

sand13

XLDnaute Occasionnel
Re : trouver les chiffres manquant d'une liste

bonjour robert, ce code m'intéresse mais puis-je vous demander comment faire pour que lorsque je relance la macro, la précédente liste s'efface au profit de la nouvelle ?

car à présent les données s'ajoutent à la suite.

cordialement,
 

Discussions similaires

Réponses
6
Affichages
202

Statistiques des forums

Discussions
311 725
Messages
2 081 949
Membres
101 852
dernier inscrit
dthi16088