Formule de vérification des valeurs sur deux tableaux
Bonjour à tous,
Je travaille sur un document Excel ayant pour finalité une meilleure organisation de l'inventaire dans l'enteprise ou je suis. Un rapport est communiqué tous les matins avec plusieurs quantités que j'ai retranscri dans un autre tableau avec plus de références.
Ce dernier tableau est mis à jour par macro, les filtres sont activés et les produits sont classés par services (Bar, Restaurant, Plage,...).
Tout fonctionne à merveille (merci à gmb), cependant je souhaiterai ajouter une formule de vérification pour m'assurer que tous les produits sont bien mis à jour dans le tableau, pour cela j'ai choisi de soustraire le montant total de tous les services au montant d'un service dans le rapport quotidien puis de retrancher le total des quantités de mon tableau et enfin soustraire à nouveau le total du service :
=(RECHERCHEV(Q2,A9:C681,2,FAUX))-(RECHERCHEV(Q3,$A$8:$C$681,2,FAUX))-(SOUS.TOTAL(9,$R$4:$R$526)-(RECHERCHEV(Q3,$A$9:$C$681,2,FAUX)))
Vous l'aurez compris, c'est assez long mais surtout cette formule ne permet pas la vérification lorsque le tableau est filtré.
Donc ma question est : Est-il possible de fixer les formules sur le filtre des services pour que le résultat soit une vérification sûre ?
Le document est confidentiel et je ne pourrais pas le poster sur le forum, cependant si vous avez besoin de quelque information supplémentaire je me tiens à votre disposition.
Par avance, merci !
Edit : J'aimerai pouvoir faire le sous total d'un service filtré puis y soustraire la quantité inscrite dans le rapport, ainsi si c'est un 0 on sait que c'est bon, mais je n'arrive pas à fixer mon calcul au filtre...
Bonjour
Je ne comprends pas ton souci.
Tu n'as pas confiance dans le travail que te fait la macro ?
Bye !
Bonjour !
En fait la macro supprime les valeurs sans référence, le but est simplement de voir si un produit n'a pas de référence et ce rapidement.
C'est pourquoi je souhaite obtenir une formule indiquant 0 lorsque tous les produits sont affichés (et donc référencés) et une différence si un ou plusieurs produits ne le sont pas.
Le soucis étant que lorsque j'applique la formule en filtrant selon un service, des que je retire le filtre la valeur change puisqu'elle prend en compte tous les services...
Cordialement.
Le problème, c'est que les macros, ça va encore.
Mais les formules tarabiscotées, ce n'est pas ma tasse de thé.
Il te faudrait un champion du genre comme Tulipe4....
Moi, de ce point de vue je serais plutôt gmbZéro
Délolé !
Bye !
merci mon cher GMB
en matiere de tarsbicotage ; je suis nettement battu par R@chid , OOOiste et........ notre maitre Amadeus
bien cordialement
il reste quand meme la possibilté de "bricoler" une piece jointe (qques valeurs; le filtre ;eventuellement une petite macro pour supprimer qques lignes ) histoire de tester
code de la macro
range(".......") . clearcontents >>> un bouton et hop
Bonjour Tulipe4,
Voila le fichier (sans données confidentielles puisqu'elles sont aléatoires). Je t'écris le code dans le message même si tu l'auras dans le fichier, on ne sait jamais !
A plus !
Dim sce, ln, lgn, i, col
Sub Synthétiser()
ActiveSheet.Unprotect
ActiveSheet.ShowAllData
Range("F4").CurrentRegion.Offset(1, 0).ClearContents
ln = 10
While Cells(ln, "A") <> ""
If Range("A" & ln) = "BAR PLAGE/0011" Or Range("A" & ln) = "Mini Bar" _
Or Range("A" & ln) = "PALME D OR/0011" Or Range("A" & ln) = "RELAIS MARTINEZ/0011" _
Or Range("A" & ln) = "RESTAURANT PLAGE/0011" Or Range("A" & ln) = "Room Service" Then
sce = Range("A" & ln)
i = 0
Else
i = i + 1
col = i Mod 3
lgn = Range("F" & Rows.Count).End(xlUp)(2).Row
Range("F" & lgn) = Worksheets("MyMicrosDD").Range("B5")
Range("G" & lgn) = sce
Range("I" & lgn) = Range("A" & ln + 1)
Range("J" & lgn) = Range("A" & ln)
Range("O" & lgn) = Range("A" & ln).Offset(0, 1)
Range("Q" & lgn) = Range("A" & ln).Offset(0, 1)
ln = ln + 1
End If
ln = ln + 1
Wend
For i = 3 To Range("O" & Rows.Count).End(xlUp).Row
If Range("I" & i) = "" Or Range("L" & i) = "" Then
Range("O" & i).ClearContents
End If
Next i
ActiveWorkbook.Worksheets("MyMicrosDD").AutoFilter.Sort.SortFields.Add Key:= _
Range("K2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("MyMicrosDD").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveSheet.Protect AllowFiltering:=True
MsgBox "Quantités mises à jour"
End Sub
Bonjour à tous,
C'est bon j'ai trouvé comment faire, j'ai utilisé la fonction coller les valeurs, ce qui permet de garder la valeur même après le changement de filtre.
ActiveSheet.Unprotect
ActiveSheet.Range("$F$3:$Q$163").AutoFilter Field:=2, Criteria1:= _
"BAR PLAGE/0011"
Range("U5").Select
Selection.Copy
Range("R6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Range("$F$3:$Q$163").AutoFilter Field:=2, Criteria1:="Mini Bar"
Range("U28").Select
Selection.Copy
Range("R26").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Range("$F$3:$Q$163").AutoFilter Field:=2, Criteria1:="PALME D OR/0011"
Range("U42").Select
Selection.Copy
Range("R40").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Range("$F$3:$Q$163").AutoFilter Field:=2, Criteria1:= _
"RELAIS MARTINEZ/0011"
Range("U52").Select
Selection.Copy
Range("R50").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Range("$F$3:$Q$163").AutoFilter Field:=2, Criteria1:= _
"RESTAURANT PLAGE/0011"
Range("U74").Select
Selection.Copy
Range("R72").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Range("$F$3:$Q$163").AutoFilter Field:=2, Criteria1:= _
"Room Service"
Range("U94").Select
Selection.Copy
Range("R92").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.ShowAllData
ActiveSheet.Protect AllowFiltering:=True
End Sub
Voilà, il existe sûrement plus efficace comme méthode mais celle-ci fonctionne bien !
Merci à tous pour votre attention,
Cordialement.