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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.