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 Sub

Bonjour,

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 !

Rechercher des sujets similaires à "probleme isempty"