Mode non modal pour un userform dans une boucle Do while

Bonjour,

Je suis nouveau sur ce site et j'espère y trouver de l'aide.

Je comme le vba et je rencontre actuellement un problème...

J'ai une macro qui utilise un userform afin de calculer un prix. Je voudrais que mon userform s'ouvre en mode non modal sans modifier ma boucle do while. Je ne sais pas si c'est possible. Ci-joint quelques photos du code

image image

Quand je le passe en mode non modal cela casse mon code, le userform commence à la ligne 34 au lieu de 32 et après avoir rentrée une valeur il se ferme alors qu'il est censé continue jusqu'à la fin

image image

J'espère que vous pouvez m'aider à résoudre mon problème

Merci par avance

Bonsoir,

j'ai essayé, mais impossible de sortir la commande Show de la boucle... Ha ben oui ! c'est normal ! Ce sont des photos !

Un simple copier /coller de votre code aurait suffit sans oublier d'utiliser les balises de mise en forme "</>".
Sinon votre USF étant non modal qui je crois veux dire "n'empêche pas l'utilisation de la feuille Excel", je crois que vous devriez l'afficher avant la boucle Do While, plutôt que de le lancer dans la boucle.

@ bientôt

LouReeD

Bonsoir LouReeD,

je joint mon fichier si cela peut aider

j'ai essayé de le mettre entre le else et do while mais ca ne marche pas

Bonjour LouReed, Goat

Pas bien compris, mais on appelle l'UsF comme ceci

F_Marge.Show (1)

Et dans l'UsF Marge ne pas faire un Hide mais un Unload

Private Sub FB_OK_Click()
  Dim Z_MargeOk As Double
  Z_MargeOk = (Replace(FC_Marge, "%", "") * 1) / 100
  Z_MargeOk = 1 - Z_MargeOk
  'Z_MargeOk = 1 + Z_MargeOk

  If Cells(FC_Lig, 14).Value = "" Then
    Cells(FC_Lig, 14).Value = Cells(FC_Lig, 10).Value
  End If
  Cells(FC_Lig, 10).Value = Cells(FC_Lig, 14).Value / Z_MargeOk
  ' Cells(Z_Lig, 10).Value = Cells(Z_Lig, 14).Value * Z_MargeOk (permet de calculer la marge)
  ' PA = PA * marge en %

  Unload Me
End Sub

@+

Bonjour BrunoM45,

J'ai essayé ta solution, malheureusement elle ne règle pas mon problème, je cherche juste à faire en sorte de toujours utiliser ma feuille de calcul quand mon userform F_marge est ouvert mais qu'il marche toujours de la même manière. Or quand je le passe en mode non modal F_marge. Show 0,il me fait n'importe quoi.. Voir photo ci-dessus

Merci par avance.

Re,

Il faut alors nous expliquer votre mode de fonctionnement, étape par étape

La boucle dans l'UsF Marge fait en sorte que toutes les lignes sont parcourues,
donc quel est l'intérêt de toujours le laisser actif ?

@+

en gros la boucle permet d'appliquer une marge ligne par ligne.

j'ai deux choix soit j'applique la même marge sur mes produits soit j'applique une marge suivant la ligne.

Ca c'est mon code de l'userform F_Marge :

Private Sub FB_OK_Click()

Dim Z_MargeOk As Double

Z_MargeOk = (Replace(FC_Marge, "%", "") * 1) / 100
Z_MargeOk = 1 - Z_MargeOk
If
Cells(FC_Lig, 14).Value = "" Then
Cells(FC_Lig, 14).Value = Cells(FC_Lig, 10).Value
End If
Cells(FC_Lig, 10).Value = Cells(FC_Lig, 14).Value / Z_MargeOk

F_Marge.Hide
End Sub

Ca c'est le code de quand je réponds non à la question initial :

Do While Cells(Z_Lig, 11).Value <> ""
ZG_Lig = Z_Lig
F_Marge.FC_Lig = ZG_Lig
F_Marge.Show
Z_Lig = Z_Lig + 1
Loop


End If

End Sub

image

Pour faire simple quand je fait non mon code prend en référence la colonne quantité pour determiner les lignes auxquelles je peux appliquer une réduction.

si je prends l'exemple de la photo ci-dessus, mon code (userform) va me demander ma marge pour la ligne 32, ensuite il va se réouvrir pour me demander ma marge pour ma ligne 33 et se fermer car sur la ligne quantité 34 je n'ai aucune valeur donc il sait qu'il n'y a pas de produit pour appliquer une marge.

J'aimerais le passer en mode non modal pour pouvoir descendre et suivre les lignes auxquelles j'applique ma réduction. J'ai souvent des devis de 15 ou 20 lignes donc vu que le fichier excel est statique je ne sais pas forcément quel produit est à la ligne 55 par exemple.

Re,

Désolé, mais je n'avais pas testé et fait attention au code qui est mal construit en fait

Il faut tester la fin du devis et non la valeur de la cellule, sinon on sort
J'ai ajouté un select pour suivre la ligne sur laquelle on se trouve

Private Sub Marge_Click()
  Dim Z_result As String
  Dim Z_Marge As String
  Dim Z_MargeOk As Double
  Dim Z_Lig As Long, Z_Fin As Long
  ' Premièr eligne à traiter
  Z_Lig = 32
  ' Dernière ligne
  Z_Fin = Range("L" & Rows.Count).End(xlUp).Row - 3
  ' Question
  Z_result = MsgBox("Voulez vous appliquer la même marge pour toutes les lignes", vbYesNo)
  If Z_result = vbYes Then
    Z_Marge = InputBox("Marge :", Marge)
    Z_MargeOk = (Replace(Z_Marge, "%", "") * 1) / 100
    Z_MargeOk = 1 - Z_MargeOk
    ' Z_MargeOk = 1 + Z_MargeOk
    Do While Z_Lig <= Z_Fin
      If Cells(Z_Lig, 11).Value <> "" Then
        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
      End If
      ' Cells(Z_Lig, 10).Value = Cells(Z_Lig, 14).Value * Z_MargeOk (permet de calculer la marge)
      ' PA = PA * marge en %
      Z_Lig = Z_Lig + 1

    Loop
  Else
    Do While Z_Lig <= Z_Fin
      If Cells(Z_Lig, 11).Value <> "" Then
        Cells(Z_Lig, 11).Select
        ZG_Lig = Z_Lig
        F_Marge.FC_Lig = ZG_Lig
        F_Marge.Show
      End If
      Z_Lig = Z_Lig + 1
    Loop
  End If
End Sub

@+

Merci pour ta réponse BrunoM45,

Ta solution est pas mal mais j'ai un soucis : quand je prends une ligne style 40 alors que le Userform est sur la ligne 32, le cursus va descendre sur la ligne d'après et non sur la ligne ou j'ai modifié la marge.

C'est pour ca que je souhaitais le mettre en mode non modal comme ca je peux descendre et suivre en direct la ligne touchée

enfin c'est possible de faire sortir l'userform avec un bouton fermé ? car en gros quand je veux modifier la marge de une ligne et qu'il y en a 10 par exemple, il va me demander la marge pour chacune des lignes, j'aimerais pouvoir sortir de la boucle avec un bouton fermer

@Merci par avance :)

Re,

Il faut ajouter un bouton fermer sur l'USF de marge et tester un Flag de fermeture

Pour ma part, j'en resterais là

Bonsoir,

un essai en mettant la boucle dans le USF Marge :

Attention ! il n'y a aucune vérification de données ! Comme par exemple si vous valider alors qu'il n'y a pas de valeur de marge cela "plante" !

@ bientôt

LouReeD

Bonjour LouReeD,

j'ai essayé avec ton fichier Excel et tout plante, le UserForm F_Marge est en mode Modal etc

Rechercher des sujets similaires à "mode modal userform boucle while"