Macro de comparaison "en live"
Bonjour,
Débutant en vba je voudrai améliorer la macro que j'ai faite.
J'ai un fichier excel contenant 4 feuilles,
Une feuille d'accueil qui reprend quelques boutons de déclenchement de macro,
Une feuille de synthèse, qui reprend les données suite à l'exécution d'une macro
Une feuille extraction, qui récupère les données d'un autre fichier
Une feuille douchette qui récupère en "discontinu" des données d'une douchette pour scanner des gencod.
J'ai rédigé un début de macro pour faire une comparaison des données de douchette avec extraction pour vérifier si les données pratiques (douchette) correspondent bien aux données théoriques (extraction)
Voici le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
Sub Comparaison()
Dim ean1 As String
Dim ligne As Integer 'ligne dans douchette
Dim Erreur As Boolean 'vrai ou faux
Dim Quantité As Byte 'en espérant qu'il n'y ait pas plus de 255 références sur une palette !!!!
Dim Différence As Integer 'Différence entre le nbre de pdt attendu et le nbr de pdt présent
Dim Nombre As Integer 'insertion d'une fonction pour
'éviter l'erreur du fait que les ean sont stockés sous forme de texte et non de nombre
Dim ligne2 As Integer 'Ligne feuille de contrôle
Dim ligne3 As Integer 'ligne pour feuille extraction
Dim NombreErreur As Byte 'En espérant qu'il n'y ait pas plus de 255 erreurs ??!!! :OO
Dim Total As Integer 'Colis total
Total = 0
ligne = 2
ligne2 = 10
NombreErreur = 0
Sheets("Douchette").Select
Cells(2, 1).Select
While Sheets("Douchette").Cells(ligne, 1).Value <> "" 'condition égal rien
ean1 = Sheets("Douchette").Cells(ligne, 1).Value
ligne3 = 1
Erreur = True 'on démarre avec une erreur qu'on enlève si le pdt est bien présent/attendu
'On démarre une boucle pour voir si les gencod sont bien dans extraction cia flu
While Sheets("Extraction cia flu").Cells(ligne3, 1).Value <> "" And Erreur = True
ligne3 = ligne3 + 1
If Sheets("Extraction cia flu").Cells(ligne3, 1).Value = ean1 Then
Erreur = False 'si il le trouve, il n'y a pas d'erreur
End If
'On termine la boucle quand on a la réponse
Wend
'On va demander la quantité que le gencod soit manquant ou non pour comptabiliser dans le tableau feuille de contrôle
Quantité = InputBox("Quelle quantité?", "Produit" & ean1)
Sheets("Douchette").Cells(ligne, 6).Value = Quantité
'si il n'y a pas d'erreur alors on fait la différence entre la quantité entrée et la quantité attendue
If Erreur = False Then
Nombre = Sheets("Extraction cia flu").Cells(ligne3, 6).Value
Différence = Quantité - Nombre
'Si la différence n'est pas égale à zéro on mets une alerte
If Différence = 0 Then
'Insertion du numéro de palette
Sheets("Feuille de contrôle").Cells(ligne2, 2).Value = Sheets("Extraction cia flu").Cells(2, 11)
Sheets("Feuille de contrôle").Cells(ligne2, 3).Value = Sheets("Extraction cia flu").Cells(2, 12)
MsgBox ("Yeah Man")
Else: MsgBox ("T'es Nul, Trop nul")
End If
Else: NombreErreur = NombreErreur + 1
MsgBox (" Produit manquant : " & ean1 & "T'es nul !")
End If
Total = Total + Quantité
'Sheets("Feuille de contrôle").Cells (ligne2)
ligne = ligne + 1
Wend
MsgBox ("Total" & Total)
MsgBox ("Nombre d'erreur" & NombreErreur)
End Sub |
Le problème avec cette macro c'est que je la déclenche par un bouton et qu'elle me fait la comparaison d'une plage de lignes avec valeurs, un bloc.
J'aimerai que ma macro se déclenche dès qu'une cellule est remplie mais qu'elle garde en mémoire les valeurs (Total, Différence, Nombre d'erreur ..) et qu'elle continue sur une colonne pour avoir à la fin un état global, mais tout en gardant toutes les informations données par la macro donnée ici à chaque vérification de ligne.
Je voudrai à la fin de mon contrôle, remplir une feuille qui reprend l'état global de ce qu'il s'est passé tout au long de mes comparaisons
Merci d'avance !
Edaine.