Problème avec IsEmpty
Bonjour à tous,
Contexte : j'ai créé un programme afin qu'il complète automatiquement la couverture d'engins. Un engin est couvert si le nombre de pièce qu'il faut pour le construire est présent dans les stocks. Ainsi, en fonction de l'état d'une pièce (en stock, en transfert, etc) le programme complète automatiquement les couvertures des engins.
Problème : une ligne ne fonctionne pas telle que je le souhaiterais. En effet, j'aimerai que si deux cases sont vides, alors la requête se met en marche. Cependant, excel ne comprend pas ma demande, sûrement me suis-je mal exprimé.
Merci d'avance pour votre aide.
Voici le code avec la ligne défectueuse surlignée :
Sub cover()
'Entrée des variables
Dim ligne1 As Long
Dim ligne2 As Long
Dim i As Long
Dim dernligne2 As Long
Dim qty1 As Byte
Dim qty2 As Byte
Dim acc As String
Dim pn1 As String
Dim pn2 As String
Dim derncolonne1 As Byte
Dim reste As Byte
Dim addition As Byte
'Attribution des variables
dernligne2 = Sheets("Parts Fallow").Range("A" & Rows.Count).End(xlUp).Row
dernligne1 = Range("A" & Rows.Count).End(xlUp).Row
'Requête afin de traiter les pièces arrivées ou en transfert
For ligne2 = 2 To dernligne2
qty2 = Sheets("Parts Fallow").Cells(ligne2, 5).Value
pn2 = Sheets("Parts Fallow").Cells(ligne2, 1).Value
acc = Sheets("Parts Fallow").Cells(ligne2, 6).Value
If IsEmpty(acc) And IsEmpty(Cells(ligne2, 7) Then
For ligne1 = 3 To dernligne1
derncolonne1 = Cells(ligne1, Columns.Count).End(xlToLeft).Column
Sheets("Parts Fallow").Cells(ligne2, 6).Value = "YES"
qty1 = Cells(ligne1, 4)
pn1 = Cells(ligne1, 1)
addition = qty2 + Cells(ligne1, derncolonne1)
If pn1 Like pn2 Then
Cells(ligne1, 5) = Cells(ligne1, 5) - qty2
If addition < qty1 Then
Cells(ligne1, derncolonne1) = Cells(ligne1, derncolonne1) + qty2
ElseIf addition > qty1 Then
Do While addition > qty1
reste = addition - qty1
Cells(ligne1, derncolonne1 + 1) = reste
Cells(ligne1, derncolonne1).Interior.ColorIndex = 4
Cells(ligne1, derncolonne1) = qty1
derncolonne1 = Cells(ligne1, Columns.Count).End(xlToLeft).Column
dernligne1 = Range("A" & Rows.Count).End(xlUp).Row
addition = Cells(ligne1, derncolonne1)
Loop
ElseIf addition = qty1 Then
Cells(ligne1, derncolonne1) = addition
Cells(ligne1, derncolonne1).Interior.ColorIndex = 4
End If
End If
Next ligne1
ElseIf acc = "ITX" Then
Sheets("Parts Fallow").Cells(ligne2, 6).Value = ""
For ligne1 = 3 To dernligne1
pn1 = Cells(ligne1, 1)
If pn1 Like pn2 Then
Cells(ligne1, 5) = Cells(ligne1, 5) + qty2
End If
Next ligne1
End If
Next ligne2
End SubBonjour,
une proposition (voire 2)
1 - tu mets le fichier ici et on y regarde
2 - if acc = "" and Cells(ligne2, 7) = "" then
P.
Bonjour,
Seule une variable de type Variant peut prendre la valeur Empty, de même que seule une variable objet peut prendre la valeur Nothing...
Cordialement.
Merci pour vos réponses.
MFerrand, merci ca me sera utilie à l'avenir.
Patrick, t'as réponse me fait remarquer que je me suis trompé dans l'énoncé de mon problème ... Je veux que acc soit vide mais que cells(ligne2, 7) ne soit pas vide.
J'ai donc écrit :
If acc = "" And Cells(ligne2, 7) <> "" Then Le résultat est tel que c'est comme si la deuxieme instruction n'était pas prise en compte.
Voilà mon fichier afin que vous puissiez m'aider plus facilement.
Le module 4 est celui qui nous intéresse.
Dans la colonne Acc de "Parts Fallow" lorsque l'on met :
- "ITX" -> la pièce commence son transfert (le nombre de pièce s'ajoute dans la colonne "IT" de la feuille "Cover")
- "" -> la pièce est en transfert
- "" + "qqchose ds la colonne REC'D" -> la pièce est arrivée
- "YES" la pièce est dans le stock
Merci de votre aide
C'était tout bête, j'avais simplement oublié d'activer une feuille pour traiter des valeurs ...
Alex0uille a écrit :C'était tout bête, j'avais simplement oublié d'activer une feuille pour traiter des valeurs ...
Bonjour, j'allais te suggérer déjà qq chose comme ceci:
Dim Ws1, Ws2 As Worksheet
Set Ws1 = Sheets("Cover"): Set Ws2 = Sheets("Parts Fallow")
et puis mettre à chaque fois sur quelle feuillel tu travailles:
qty2 = Ws2.Cells(ligne2, 5).Value
If Not Ws2.Cells(ligne2, 7) = "" And Ws2.Cells(ligne2, 6) = "" Then
P.
Bonjour,
Si tu mets une centaine de procédures dans un seul module, ça fonctionnera tout aussi bien (et peut-être mieux) que les disperser et n'en mettre qu'une par module...
Et j'appuie fortement la suggestion de Patrick consistant à doter tes expressions de qualificateurs d'objets... C'est là la bonne manière de programmer (et non d'activer...)
Cordialement.
Je prends note des conseils. Merci pour votre aide !