VBA Problème sur un code If

Bonjour,

je rencontre un problème dans mon code et je ne sais pas d'où vient l'erreur. J'ai un code VBA qui me permet de calculer la marge de mes produits. J'ai deux options :

- soit j'applique la même marge à tous mes produits quand je clique sur oui à la question : Voulez-vous appliquer la même marge pour toutes les lignes

- soit j'applique une marge différent à chaque ligne quand je clique sur non à la question : Voulez-vous appliquer la même marge pour toutes les lignes

mon code ce base sur la colonne 11 (la colonne quantité) et la ligne 32. Si dans la colonne quantité il y a un chiffre mon code est actif.

Mon problème est le suivant : j'essaye de mettre ce message "Merci de saisir une valeur" quand je réponds non à la question : Voulez-vous appliquer la même marge pour toutes les lignes et que je rentre aucune valeur avant de faire valider. Actuellement avec mon code, le message "Merci de saisir une valeur" apparait même si je rentre une valeur différente de 0 or j'aimerais que quand je rentre une valeur différente de 0, il me calcul ma marge.

image

ci-dessous mes 2 codes : une pour mon Userform (Gestion devis) général et l'autre pour l'Userform (Marge) quand je réponds non à la question

Code UserForm (Gestion Devis)

Private Sub Marge_Click()

Dim Z_result As String
Dim Z_Marge As String
Dim Z_MargeOk As Double
Dim Z_Lig As Integer

Z_Lig = 32

Z_result = MsgBox("Voulez-vous appliquer la même marge pour toutes les lignes", vbYesNo)
If Z_result = vbYes Then
    Z_Marge = InputBox("Marge :", "Gestion Marge")
    If Z_Marge = "" Then
    MsgBox ("Merci de saisir une quantitée et un taux de marge")
        Else
    Z_MargeOk = (Replace(Z_Marge, "%", "") * 1) / 100
    Z_MargeOk = 1 - Z_MargeOk
    End If

    Do While Cells(Z_Lig, 11).Value <> "" And Z_MargeOk <> 0
        If Cells(Z_Lig, 14).Value = "" Or Cells(Z_Lig, 14).Value = 0 Then
        Cells(Z_Lig, 14).Value = Cells(Z_Lig, 10).Value
        End If
        Cells(Z_Lig, 10).Value = Cells(Z_Lig, 14).Value / Z_MargeOk
        Z_Lig = Z_Lig + 1
    Loop

Else:

    Do While Cells(Z_Lig, 11).Value <> ""
        ZG_Lig = Z_Lig
        F_Marge.FC_Lig = ZG_Lig
        continue = True
        F_Marge.Show 0
        Do While continue = True
            DoEvents
        Loop
        If sortie = True Then
            sortie = False
            Exit Sub
        End If
        Z_Lig = Z_Lig + 1
    Loop
End If

End Sub

Code UserForm (Marge)

Private Sub Fermer_Click()
sortie = True
continue = False
Unload F_Marge
End Sub

Private Sub FB_OK_Click()

Dim Z_MargeOk As String

If Z_MargeOk = "" Then
MsgBox ("Merci de saisir une valeur")
Else
Z_MargeOk = (Replace(FC_Marge, "%", "") * 1) / 100
Z_MargeOk = 1 - Z_MargeOk
End If

If Cells(FC_Lig, 14).Value = "" Then
        Cells(FC_Lig, 14).Value = Cells(FC_Lig, 10).Value
        End If

If Z_MargeOk <> "" Then
Cells(FC_Lig, 10).Value = Cells(FC_Lig, 14).Value / Z_MargeOk
End If

continue = False
Unload F_Marge

End Sub

Je remercie par avance toutes les personnes qui vont m'apporter leurs aides :)

Goat

Bonjour Goat,

J'ai testé ton code 'Marge_Click()' et il semble fonctionner comme tu le désires. Peux-tu préciser ?

Bonjour GVIALLES,

Mon code Marge_Click() fonctionne bien, c'est mon FB_OK_Click () qui fait pas ce que je souhaite. Pour faire simple quand je réponds non à la question "Voulez-vous appliquer la même marge pour toutes les lignes" j'ai mon UserForm Marge qui ce lance afin d'appliquer une marge spécifique suivant la ligne.

ce que j'aimerais c'est que quand je ne rentre pas de valeur dans la cellule en jaune (voir ci-dessous)

image

j'aimerais un message "Merci de saisir une valeur"

le problème c'est que actuellement même si je rentre une valeur différente de 0 par exemple 10, ba le message s'affiche

Goat

Goat,

OK. Dans ton userform, quel est le nom de la textbox en jaune ?

GVIALLES,

L'userform en jaune est FC_Marge

image

C'est de nom de la textbox dont j'ai besoin (et non celui de la userform)

image

GVIALLES,

Le nom de mon textBox en jaune c'est bien FC_Marge_Change

image

Dans ta macro, tu ne testes pas la valeur contenue dans la textbox mais la valeur de la variable qui n'est pas initialisée donc toujours vide.

Je te suggère soit de tester la valeur de la textbox 'FC_Marge' :

Private Sub FB_OK_Click()

Dim Z_MargeOk As String

If FC_Marge.Value = "" Then
MsgBox ("Merci de saisir une valeur")
Else

GVIALLES,

Punaise je galère depuis ce matin pour un truc aussi bateau ...

je te remercie, ca marche nickel

Cordialement

Goat

Rechercher des sujets similaires à "vba probleme code"