Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[Résolu] Fonction Cancel dans Inputbox et boucle

Lebonetletruand

XLDnaute Occasionnel
Bonsoir,

J'ai un petit souci avec la formule ci-dessous. J'ai deux colonnes de taux. L'objectif et que si l'on décide de compléter la première, on doit compléter la seconde, sinon, la première valeur est effacée. J'ai donc créé le code ci-dessous. Seulement, il me propose deux fois l'inputbox que je j'y inscrive quelquechose ou que j'annule. J'ai trituré la syntaxe dans tous les sens en vain. Pourriez vous me venir en aide.
Le résultat souhaité serait :
Clic ok sur msgbox => ouverture de l'inputbox
Clic annuler sur msgbox =>première valeur saisie effacée
Clic sur ok inputbox=>la valeur est saisie en deuxième colonne. Fin.
Clic sur annuler inputbox =>la première valeur saisie est effacée. Fin.

Merci par avance.

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

For i = 8 To 127
If Cells(i, 5).Value <> "" Then
If Not Cells(i, 6).Value <> "" Then
Msg = "Les colonnes relatives aux taux de concentration ne sont à utiliser que lorsque le taux de matière active proposé par le fournisseur diffère du taux théorique prévu dans le listing de prévision de commande proposé aux adhérents à la commande groupée." & Chr(13) & Chr(13) & " La saisie d'une information dans la colonne ' Taux de concentration matière active proposé par le fournisseur ' exige le renseignement de la colonne ' Taux de concentration théorique de la matière active ' pour un même produit"
Style = vbOKCancel + vbExclamation
Title = "Erreur d'information de la base"
Response = MsgBox(Msg, Style, Title)

If Response = vbOK Then ActiveSheet.Cells(i, 6).Value = InputBox("Veuillez saisir le taux de concentration théorique pour ce produit") Else Cells(i, 5).Value = Null: Exit Sub


If InputBox("Veuillez saisir le taux de concentration annoncé par le fournisseur pour ce produit") = "" Then Cells(i, 5).Value = Null

End If
End If

Next i
 
Dernière édition:

kjin

XLDnaute Barbatruc
Re : Fonction Cancel dans Inputbox et boucle

Bonsoir,
Si tu boucles sur toutes ces lignes à chaque click....
Avec le peu que j'ai compris
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Cells(Target.Row, 5).Value <> "" And Cells(Target.Row, 6).Value = "" Then
    Msg = "Les colonnes relatives aux taux de concentration ne sont à utiliser que lorsque le taux de matière active proposé par le fournisseur diffère du taux théorique prévu dans le listing de prévision de commande proposé aux adhérents à la commande groupée." & Chr(13) & Chr(13) & " La saisie d'une information dans la colonne ' Taux de concentration matière active proposé par le fournisseur ' exige le renseignement de la colonne ' Taux de concentration théorique de la matière active ' pour un même produit"
    Style = vbOKCancel + vbExclamation
    Title = "Erreur d'information de la base"
    Response = MsgBox(Msg, Style, Title)
    If Response = vbOK Then
        Q1 = InputBox("Veuillez saisir le taux de concentration théorique pour ce produit")
        If Q1 = "" Then Exit Sub
        Q2 = InputBox("Veuillez saisir le taux de concentration annoncé par le fournisseur pour ce produit")
        If Q2 = "" Then Exit Sub
        Cells(Target.Row, 6).Value = Q1
        Cells(Target.Row, 5).Value = Q2
    End If
End If

End Sub
A+
kjin
 

Lebonetletruand

XLDnaute Occasionnel
Re : Fonction Cancel dans Inputbox et boucle

Merci Kjin,

Mais désolé, ça ne fonctionne pas. Si l'opérateur saisit une valeur en colonne 5, rien ne se passe sauf s'il va sur la colonne 6 de la même ligne. De plus, s'il décide d'annuler l'opération suite à la msgbox, la première valeur saisie en colonne 5 ne s'efface pas.

En tout cas, je vais m'inspirer de ton code pour essayer de faire évoluer le code que j'ai créé.

L'objectif est le suivant : Dès que l'opérateur décide de saisir une valeur en colonne 5, la msgbox doit l'avertir, s'il annule, la saisie préalable en colonne 5 est annulée. S'il clique sur ok, l'inputbox s'ouvre et lui demande la valeur à saisir en colonne 6, s'il saisit une valeur, elle s'inscrit en colonne 6, s'il annule, la macro supprime la valeur préalablement saisie en colonne 5.
C'est également la raison pour laquelle j'ai créé une Private Sub SelectionChange
Ton code ne sécurise pas assez l'opération et génèrera des soucis dans la suite de mon application.

Merci quand même
 
Dernière édition:

Lebonetletruand

XLDnaute Occasionnel
Re : Fonction Cancel dans Inputbox et boucle

Bon, c'est ok, j'ai continué de bidouiller et ça a porté ses fruits

Voici la solution qui fonctionne (dans les deux sens, que l'on complète la colonne 5 ou 6 en premier):

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

For i = 8 To 127
If Cells(i, 5).Value <> "" Then
If Not Cells(i, 6).Value <> "" Then
Msg = "Les colonnes relatives aux taux de concentration ne sont à utiliser que lorsque le taux de matière active proposé par le fournisseur diffère du taux théorique prévu dans le listing de prévision de commande proposé aux adhérents à la commande groupée." & Chr(13) & Chr(13) & " La saisie d'une information dans la colonne ' Taux de concentration matière active proposé par le fournisseur ' exige le renseignement de la colonne ' Taux de concentration théorique de la matière active ' pour un même produit"
Style = vbOKCancel + vbExclamation
Title = "Erreur d'information de la base"
Response = MsgBox(Msg, Style, Title)

If Response = vbOK Then
Reponse = InputBox("Veuillez saisir le taux de concentration de matière active annoncé par le fournisseur pour ce produit")
If Reponse = "" Then Cells(i, 5).Value = Null Else ActiveSheet.Cells(i, 6).Value = Reponse

' Lorsque l'on clique sur Cancel ou si l'on clique sur ok de l'inputBox sans indiquer de valeur, le code considère Reponse = ""

Else
Cells(i, 5).Value = Null
End If
End If
End If
Next i


For i = 8 To 127
If Cells(i, 6).Value <> "" Then
If Not Cells(i, 5).Value <> "" Then


Msg = "Les colonnes relatives aux taux de concentration ne sont à utiliser que lorsque le taux de matière active proposé par le fournisseur diffère du taux théorique prévu dans le listing de prévision de commande proposé aux adhérents à la commande groupée." & Chr(13) & Chr(13) & " La saisie d'une information dans la colonne ' Taux de concentration théorique de la matière active ' exige le renseignement de la colonne ' Taux de concentration matière active proposé par le fournisseur ' pour un même produit"
Style = vbOKCancel + vbExclamation
Title = "Erreur d'information de la base"
Response = MsgBox(Msg, Style, Title)

If Response = vbOK Then
Reponse2 = InputBox("Veuillez saisir le taux de concentration de matière active théorique pour ce produit")
If Reponse2 = "" Then Cells(i, 6).Value = Null Else ActiveSheet.Cells(i, 5).Value = Reponse2

' Lorsque l'on clique sur Cancel ou si l'on clique sur ok de l'inputBox sans indiquer de valeur, le code considère Reponse = ""

Else
Cells(i, 6).Value = Null

End If
End If
End If
Next i

End Sub
 
Dernière édition:

kjin

XLDnaute Barbatruc
Re : Fonction Cancel dans Inputbox et boucle

Bonsoir,
Ton code ne sécurise pas assez l'opération et génèrera des soucis dans la suite de mon application.
Ca m'étonnerait puisque les valeurs ne sont écrites que si les 2 msgbox sont validées !!!
Pourquoi vouloir inscrire la valeur en colonne 5 avant d'avoir validé la colonne 6 comme le fait ma macro ????
C'est également la raison pour laquelle j'ai créé une Private Sub SelectionChange
La question n'est pas là !
La question est pourquoi boucler sur toutes les cellules à chaque click ???
Ma macro se réfère à la ligne de la cellule recevant la click; tu peux éventuellement limiter la plage de fonctionnement à la colonne 5
En outre, tu ne donnes aucune explication sur ceci
Code:
If Cells(i, 5).Value <> "" Then
If Not Cells(i, 6).Value <> "" Then
A+
kjin
 

Lebonetletruand

XLDnaute Occasionnel
Re : Fonction Cancel dans Inputbox et boucle

Kjin,

Essaye ma macro et essaye la tienne, tu verras tout de suite la différence de procédure de traitement

Ca m'étonnerait puisque les valeurs ne sont écrites que si les 2 msgbox sont validées !!!

Les msgbox ne s'ouvrent pas au bon moment. Si quelqu'un décide d'inscrire une valeur en colonne 5 et ne va pas en colonne 6 de la même ligne, tes box ne s'ouvrent pas, donc il reste une valeur isolée en colonne 5 et de ce fait le reste de l'application (non fournie ici) ne fonctionnera pas correctement.
=> pas assez strict

Pourquoi vouloir inscrire la valeur en colonne 5 avant d'avoir validé la colonne 6 comme le fait ma macro ????

Parce que premièrement c'est une décision de l'opérateur, c'est lui qui décide de renseigner ces colonnes ou pas, et ensuite, c'est l'évènement déclencheur de la macro. Si l'opérateur a déjà saisi sa valeur dans l'une des colonnes, je ne vais lui demander de la ressaisir dans une box, c'est inutile, donc j'utilise sa valeur comme déclencheur.
=> Gain de temps

La question n'est pas là !
La question est pourquoi boucler sur toutes les cellules à chaque click ???
Parce que je veux que dès qu'une cellule est complétée dans l'une des colonnes, la macro se mette en place. C'est ce que ta macro ne fait pas justement. Ensuite, ce n'est pas à chaque click mais à chaque changement de cellule. Pour cette raison, s'il entre une valeur dans l'une des colonnes, ensuite, il tape "entrée" pour la valider => hop, déclenchement de la macro.


Si je me souviens bien, dans ton premier message, tu me disais "avec le peu que j'ai compris", si tu relis les messages précédents, celui ci, que tu essayes ta macro et la dernière que j'ai postée hier, tu cerneras mieux l'objectif de ma requète.

Ce que j'ai posté hier soir fonctionne et répond à mes attentes. Je ne prétends pas avoir une rédaction de macro très efficace et suis ouvert à l'apprentissage mais il faut que l'objectif soit réalisé, sinon, le reste de l'application plante.
Merci quand même pour ton aide. Je vais essayer de réduire un peu la taille de ma macro en utilisant tes conseils et remarques.

A+
 
Dernière édition:

kjin

XLDnaute Barbatruc
Re : Fonction Cancel dans Inputbox et boucle

Bonjour,
Quelque chose m'échappe, la vieillesse sans doute....
Une dernière pour la route et je vais vite ressortir mes vieux bouquins
Code:
Private Sub [COLOR="Blue"][B]Worksheet_Change[/B][/COLOR](ByVal Target As Range)
If Not [COLOR="Blue"][B]Intersect(Target, Range("E8:E127")) Is Nothing[/B][/COLOR] And Target.Count = 1 Then
    If Target <> "" Then
        Msg = "Les colonnes relatives aux taux de concentration ne sont à utiliser que " & _
               "lorsque le taux de matière active proposé par le fournisseur diffère du " & _
               "tauxthéorique prévu dans le listing de prévision de commande proposé aux " & _
               "adhérents à la commande groupée." & Chr(13) & Chr(13) & " La saisie d'une " & _
               "information dans la colonne ' Taux de concentration matière active proposé " & _
               "par le fournisseur ' exige le renseignement de la colonne ' Taux de " & _
               "concentration théorique de la matière active ' pour un même produit"
        Style = vbOKCancel + vbExclamation
        Title = "Erreur d'information de la base"
        Q1 = MsgBox(Msg, Style, Title)
        If Q1 = vbOK Then
            Q2 = InputBox("Veuillez saisir le taux de concentration " & _
                        "de matière active théorique pour ce produit")
        End If
        If Q1 = vbCancel Or Q2 = "" Then
                Application.EnableEvents = False
                Application.Undo
                Application.EnableEvents = True
        Else
            Target.Offset(, 1) = Q2
        End If
    End If
End If

End Sub
A+
kjin
 

Lebonetletruand

XLDnaute Occasionnel
Re : Fonction Cancel dans Inputbox et boucle

Salut Kjin,

Eh non, ce n'est pas encore la bonne. Sourire
Essaye la macro écrite plus haut, tu verras ce à quoi je veux arriver. Les macros que tu m'indiques ne se déclenchent pas assez vite. Elles laissent trop de liberté à l'opérateur.
Imagine que l'opérateur ne soit pas attentif ou concentré ou scrupuleux des consignes.

Bon dimanche, ne passe pas trop de temps la dessus puisque j'ai la solution.

Merci pour ta disponibilité. A+
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…