Formule de recherche
f
Bonjour a tous
Dans ma colonne A j'ai une suite de facture dans la quel j'ai des manquant
exemple :1-2-3-4-5-6- 10, la il manque la facture de 7 a 9
je recherche la formule afin de trouver dans ma colonne a: les manquant
merci pour votre aide
ci joint mon fichier
A
Bonjour le fil, bonjour le forum,
Une proposition par macro au cas où... (je te conseille quand même l'utilisation de la formule d'Amadéus)
le code :
Sub Macro1()
Dim TV As Variant 'déclare la variable TV (Tableau des valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Long 'déclare la variable I (Incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim J As Integer 'déclare la variable J (incrément)
Dim TN() As Variant 'déclare la variable TN (Tableau des Nombres)
Dim K As Long 'déclare la variable K (incrément)
Dim L As Long 'déclare la variable L (incrément)
Dim MSG As String 'déclare la variable MSG (MeSsaGe)
TV = Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) - 1 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde jusqu'à l'avant dernière)
D(Split(TV(I, 1), "/")(0)) = "" 'alimente le dictionnaire D avec le nombre avant le slash ('xx'/) de la ligne I du tableau des valeurs TV
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tabelau temporaire TMP la liste des éléments du dictionnaire D sans doublons (les nombres avant le slash)
For J = 0 To UBound(TMP) 'boucle 1 sur tous les éléments du tableau temporaire TMP
Erase TN 'vide le tableau des lignes TN
K = 0 'initialise la variable K
For I = 2 To UBound(TV, 1) - 1 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde jusqu'à l'avant dernière)
If Split(TV(I, 1), "/")(0) = TMP(J) Then 'condition : si le nombre devant le slash ('xx'/) est égal à TMP(J)
ReDim Preserve TN(K) 'redimensionne le tableau des lignes TN
TN(K) = CInt(Split(TV(I, 1), "/")(1)) 'récupère dans la ligne K du tableau des nombres TN le nombre après le slash
K = K + 1 'incrémente K
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 2
For L = 1 To UBound(TN) 'boucle 3 : sur tous les valeurs du tableau des nombres TN (en partant de la seconde)
If TN(L) <> TN(L - 1) + 1 Then 'condition si la valeur est différente de la valeur juste avant elle plus 1
'définit le message MSG (nombre avant le slash, suivi d'un slash,suivi du nombre après le slash au format "00000", suivi d'un saut de ligne)
MSG = IIf(MSG = "", TMP(J) & "/" & Format(TN(L) - 1, "00000") & Chr(13), MSG & TMP(J) & "/" & Format(TN(L) - 1, "00000") & Chr(13))
End If 'fin de la condition
Next L 'prochain nombre de la boucle 3
Next J 'prochain élément de la boucle 1
MsgBox MSG 'message affichant MSG
End Sub