Bonjour,
Je débute en programmation VBA et en programmation tout court d’ailleurs aussi.
J'essais de créer un programme Excel permettant de me créer des listes de pièces à expédier correspondant à une nomenclature selon leur lieu de stockage.
Je vous joint une extrait de mon fichier sur lequel je bloque.
Voici mon problème :
J'ai une première feuille nommée LISTE qui correspond à une liste de pièces à servir. J'ai crée sur cette feuille un bouton "Nettoyage" qui doit ne me laisser dans cette liste que les références de pièces présentent dans la feuille DATA, puis SUPPRIMER les références présentent dans la feuille DB SITE.
Je crois avoir trouvé le problème de la macro associé au bouton "NETTOYAGE" :
toutes les références sont supprimées car dans tous les cas, même si ma condition est remplie une fois dans la boucle, elle sera ensuite fausse plus tard donc la ligne sera supprimée.
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 Private Sub CommandButton_nettoyage_Click() Application.ScreenUpdating = False ' selection des pièces présentent sur site Dim X As Integer Dim Y As Integer 'Je remonte de la derniere ligne jusqu'a la ligne 10 For X = Sheets("LISTE").Range("A1000").End(xlUp).Row To 10 Step -1 For Y = Sheets("DATA").Range("A1000").End(xlUp).Row To 1 Step -1 'si les valeurs sont différentes If Sheets("LISTE").Range("A" & X) <> Sheets("DATA").Range("A" & Y) Then 'Je supprime la ligne entière Rows(X).EntireRow.Delete End If Next Y Next X '''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''Effacement des pièces en DB sur le site d'intervention'' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim I As Integer Dim J As Integer 'Je remonte de la derniere ligne jusqu'a la ligne 1 For I = Sheets("LISTE").Range("A1000").End(xlUp).Row To 10 Step -1 For J = Sheets("DB SITE").Range("A1000").End(xlUp).Row To 1 Step -1 'si dans la cellule A il y a la valeur que je cherche If Sheets("LISTE").Range("A" & I) = Sheets("DB SITE").Range("A" & J) Then 'Je supprime la ligne entière Rows(I).EntireRow.Delete End If Next J Next I Application.ScreenUpdating = True MsgBox "Nettoyage effectué !", _ vbExclamation, "FELICITATION !" End Sub
J'ai essayé d'utiliser une condition Booléenne dans une macro associée au bouton "NETTOYAGE 2", mais je ne sais pas du tout comment écrire cette macro...
Peut être auriez vous une solution à mon problème ?
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 Private Sub CommandButton_nettoyage2_Click() Dim condition As Boolean condition = True Or False Dim X, Y As Integer 'Je remonte de la derniere ligne jusqu'a la ligne 10 For X = Sheets("LISTE").Range("A1000").End(xlUp).Row To 10 Step -1 For Y = Sheets("DATA").Range("A1000").End(xlUp).Row To 1 Step -1 'si les valeurs sont différentes condition = Sheets("LISTE").Range("A" & X) = Sheets("DATA").Range("A" & Y) If condition = False Then: Rows(X).EntireRows.Delete End If Next Y Next X End Sub
Je vous remercie,
Julien
Partager