Manquants Variable

Shpountz

XLDnaute Occasionnel
Bonjour à tous

J'ai un soucis dans le cas de manquants variables dans une liste
Lorsque le nombre de participants est différents je ne sais pas comment modifier mon code...
Code:
Function MANQUE() As String
Dim tablo, ref As Range, plage As Range, i As Byte
Application.Volatile
tablo = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
Set ref = Application.Caller
Set plage = Cells(ref.Row, 1).Resize(, ref.Column - 1)
For i = 0 To UBound(tablo)
If IsError(Application.Match(tablo(i), plage, 0)) Then MANQUE = MANQUE & ", " & tablo(i)
Next
MANQUE = IIf(MANQUE = "", "Complet", "Manque :" & Mid(MANQUE, 2, 999))
End Function

Comment faire pour que je puisse avoir le bon résultat que le nombre de participants soit 13, 14, 15, 16, 17, 18, 19 ou 20 ?
Je pense que je dois ajouter une cellule avec le nombre de participant et y faire référence dans le code..

Et si possible que cela ce déclenche par macro

Merci à tous pour votre aide
François
 

Pièces jointes

  • Manquant Variable.xlsm
    14.1 KB · Affichages: 18

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Manquants Variable

Bonsoir
ta fonction , tu l'appelles comment ? pas vu de référence dans ta feuille ? , le résultat va ou ?? c'est là que ta fonction doit être appelée , ensuite chez moi Application.caller donne erreur , je ne maitrise pas mais ne faut-il pas d'arguments sup comme :

Application.Caller.Worksheet.Name

pour ne plus planter j'ai dû modifier :
Code:
Function MANQUE() As String
On Error Resume Next
Dim tablo, ref As Range, plage As Range, i As Byte
Application.Volatile
tablo = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
Set ref = Application.Caller
If ref Is Nothing Then
    Debug.Print "Called By VBA"
Else
    Debug.Print "Called By Worksheet"
End If
Set plage = Cells(ref.Row, 1).Resize(, ref.Column - 1)
For i = 0 To UBound(tablo)
If IsError(Application.Match(tablo(i), plage, 0)) Then MANQUE = MANQUE & ", " & tablo(i)
Next
MANQUE = IIf(MANQUE = "", "Complet", "Manque :" & Mid(MANQUE, 2, 999))
MsgBox "total = " & MANQUE
End Function
mais je ne vois pas ou tu veux en venir ? en affichant MANQUE à la fin .... je pige pas le résultat ?
 

Shpountz

XLDnaute Occasionnel
Re : Manquants Variable

Oui effectivement pas tres clair de ma part...

Non je voudrais afficher les nombres manquants dans chaque ligne et ce en bout de chaque ligne concernée
Mais en fait il doit manquer une cellule de référence sur laquelle doit s'appuyer le calcul
 

Shpountz

XLDnaute Occasionnel
Re : Manquants Variable

Bonjour Hervé

Ma série est bornée à 20 au maximum (de 1 à 20)
mais il y a des jours ou elle est bornée à 13 ou 14 ou 15 ou 16 ou 17 ou 18 ou 19

Ce matin j'ai modifié ma feuille pour simplifier les choses
En fait j'ai juste besoin de connaitre les manquants sur la première ligne plus sur les autres
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Manquants Variable

Bonsoir
Je n'ai pas eu le temps d'avancer , c'est un cas un peu connu sauf que le tien ....il est pas standard !!!!
J'avais une solution simple en Excel juste pour un Seul manquant dans une série bien limitée ( ex : de 1 à 16 mais pas avec une autre de 1 à 20 dans le même tableau)
Là je tente de passer par la création de tableau dimensionné en Vba et ensuite de tout "triturer" , cela ne semble pas simple mais faisable
 

Shpountz

XLDnaute Occasionnel
Re : Manquants Variable

Merci de te pencher sur mon cas
Le code suivant
Code:
Function MANQUE() As String
On Error Resume Next
Dim tablo, ref As Range, plage As Range, i As Byte
Application.Volatile
tablo = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
Set ref = Application.Caller
If ref Is Nothing Then
    Debug.Print "Called By VBA"
Else
    Debug.Print "Called By Worksheet"
End If
Set plage = Cells(ref.Row, 1).Resize(, ref.Column - 1)
For i = 0 To UBound(tablo)
If IsError(Application.Match(tablo(i), plage, 0)) Then MANQUE = MANQUE & ", " & tablo(i)
Next
MANQUE = IIf(MANQUE = "", "Complet", "Manque :" & Mid(MANQUE, 2, 999))
MsgBox "total = " & MANQUE
End Function
fonctionne pour plusieurs manquants mais il ne fonctionne que si la zone est bornée (dans ce cas à 20) mais il est vrai que mon souhait est qu'il puisse fonctionner (sur une seule ligne) avec des variables de bornes
 

Discussions similaires

Réponses
7
Affichages
405

Statistiques des forums

Discussions
312 492
Messages
2 088 938
Membres
103 988
dernier inscrit
Feonix