Résolu Comment arrêter la macro en attendant un choix?

Dim.Reichart

XLDnaute Occasionnel
Bonjour,
Je refais un post, car celui-ci n'a plus grand chose à voir avec ma demande.

Comme dit là-bas, une userform n'est visiblement pas de mon niveau actuel, donc je me suis orienté sur la solution conseillée par @Ikito pour mes choix, à savoir, faire apparaître autant de formes que de choix possibles, enregistrer la forme cliquée, puis continuer.
Voici le code, présent dans le module 2 du fichier exercice joint:
VB:
Option Explicit
Sub Test()
Dim SR As Long, Q As String, MsgValue
Ligne1:
Q = ""

'Afficher les choix cliquables
For SR = 1 To 2 Step 1
ActiveSheet.Shapes.Range(Array("Choix" & SR)).Visible = True
Next SR

'Enregistrer le choix sélectionné
    If Q <> "" Then
    MsgValue = MsgBox("Confirmer le " & Q, vbYesNoCancel)
        If MsgValue = vbCancel Then
        Exit Sub
        ElseIf MsgValue = vbNo Then
        GoTo Ligne1
        ElseIf MsgValue = vbYes Then
        Range("a1") = Q
        'Cacher les choix
        For SR = 1 To 2 Step 1
        Worksheets("kpi").Shapes.Range(Array("Choix" & SR)).Visible = False
        Next SR
        End If
    End If
End Sub
Sub Choix1(Q)
Q = "Choix A"
End Sub
Sub Choix2(Q)
Q = "Choix B"
End Sub
Le problème que j'ai c'est que la macro se termine avant qu'un choix ne soit éffectué.
If Q<>"" est ignoré puisque la condition est fausse, et la macro passe à traavers pour aller directement à End Sub.
Comment puis-je faire pour geler son déroulement jusqu'à ce qu'un choix soit sélectionné?

J'ai essayé avec un Else Loop, mais cela donne une boucle infinie et le choix est impossible à faire.
Merci d'avance.
 

Fichiers joints

Dim.Reichart

XLDnaute Occasionnel
Frangy, excuse moi mais je ne parviens pas à transposer ta méthode dans mon fichier, j'essaye depuis ce matin, mais pour une raison que j'ignore, les boutons de sélection n'ont pas d'effet.
J'ai placé un if dans chaque bouton pour m'assurer d'appeler la sub de validation que si mes deux choix (mois et année) ont été faits, mais j'ai déclarée ces deux variables à l'exterieur des sub pour qu'elles soient mémorisées.
Fait bizarre, mais surement interessant, ma sub qui déclenche la msgbox de validation (Affichage) n'est pas dans la liste des macros déboguables...
Autre fait particulier, les boutons d'années ne se nomment pas correctement, aléatoirement, ils se renomment 1, 2, 01/0/2019 ou 2018,2019,3 etc... mais pour ce point, je verrais plus tard(je compte utiliser ces boutons pour d'autres choix à faire en fait)
EDIT: et m... encore oublié le fichier...
Bon, actuellement, il dit "bibliotheque d'objets introuvable ou référence manquante", ce qui est un tout petit peu génant mais je suis en pleine recherche de solutions. Celle que j'ai trouvé dit d'aller voir dans Menu/outil/reference et décocher celles marquées manquantes, sauf que je n'en ai a priori aucune marquée manquante… (Re-EDIT: j'ai relancé le PC, et Excel, je n'ai plus cette erreur)
 

Fichiers joints

Dernière édition:

frangy

XLDnaute Occasionnel
Heu ! Tu évoques ton problème en supposant que je connais ton projet et que je peux prendre des raccourcis mais ce n’est pas le cas.

Avant de t’étendre sur ce qui ne fonctionne pas, si tu pouvais expliquer plus simplement ce que tu cherches à faire, ça pourrait aider …
Pour l’instant, je vois un classeur qui comprend plusieurs feuilles, une flopée de boutons et une ribambelle de procédures.

Cordialement.
 

Dim.Reichart

XLDnaute Occasionnel
Oui, pardon.
Je veux créer un planning sur la feuille KPI, la partie qui va chercher les informations est codée et fonctionnelle, mais il manque de quoi sélectionner les dates début et fin du planning.
Les dates seront stockées en AM4 et AN4 pour celle de début (mois et année) et AM5, AN5 pour la date de fin.
Le patron n'aime pas trop les listes déroulantes, donc je voulais faire 12 boutons cliquables pour les mois et trois pour les années (précédente, en cours, suivante).
J'ai créé et numérotés ces boutons "Affichage" de 1 à 3 pour les années, de 4 à 15 pour les mois.

La macro devrait faire apparaitre ces boutons, permettre de faire un choix mois et un choix année pour la date début, recommencer pour la date de fin et après chaque étape, stocker les dates sélectionnées en AM4:AN5.
Puis, avec ces informations, la suite va chercher et copier dans plusieurs boucles les différents plannings afin d'en assembler un complet. (Cette partie fonctionne si tu entres des dates dans les cellules et que tu lances la macro "Compiler")

Est-ce que tu comprends mieux, ou j'ai oublié quelque chose?
N'hésite pas si je ne suis pas clair, je suis déjà content du temps que tu veux bien passer à m'aider, et je m'en veux un peu si tu t'es retrouvé noyé dans mon fichier.
 

Dim.Reichart

XLDnaute Occasionnel
Bonsoir,
J'ai préparé un fichier, j'éspère que mes explications seront plus claires comme cela.

Dans mon exemple, j'ai pris les directions.
Il faut choisir une direction horizontale, ET une direction verticale pour que la suite se déclenche.
On ne peut pas aller seulement en haut, ou seulement à droite, il faut choisir un de chaque, et forcément, on ne peut pas aller à la fois à droite et à gauche...
Ensuite, lorsque ces choix sont faits, on peut déclencher la suite de la macro.

Je suis désolé si je m'explique mal, je découvre encore tout cela, et je n'ai pas l'habitude de présenter un fichier à d'autres, j'ai un peu de mal à savoir ce qu'il faut montrer pour que cela soit "lisible".
(Bon, visiblement, même avec un seul choix, c'est trop compliqué à coder pour moi à minuit, mais j'espere que les explications vous conviennent mieux)
EDIT: J'arrivais pas à dormir, alors j'ai réussi à le remettre correctement.
 

Fichiers joints

Dernière édition:

Dim.Reichart

XLDnaute Occasionnel
Ca y est! J'ai réussi, j'ai eu l'illumination au réveil!
Merci Frangy pour ton fichier, et aussi les remarques, ça m'a permis de décomposer le projet et ses étapes, donc de mieux réflechir..

Donc, voici la méthode (tu me diras si j'ai le bon raisonnement)
-Le bouton test fait apparaitre mes 4 boutons de direction, et disparait lui même, il vide le contenu des cellules servant à stocker les informations
-chaque bouton direction appelle sa procédure, HZL ou VTCL et envoie la valeur de son affichage sous forme de variable V ou H

À partir de là, chaque procédure HZL et VTCL agit de la même façon, en inversant les variables (chacune teste si l'autre est remplie)
-chaque procédure HZL et VTCL stocke la variable V en A1, H en A2, puis teste si l'autre cellule est pleine et récupere sa valeur si oui
- elle déclenche la msgbox de confirmation lorsque l'autre valeur est remplie (si elle même est appelée, sa propre variable est forcément remplie)
-lorsque la msgbox est confirmée, la procédure active cache les boutons de choix, fait réaparaitre le bouton test et la suite peut se déclencher.
-Lorsque le 1er choix est fait, recommencer pour le second choix, à l'interieur d'un if qui vérifie si le 1er choix est validé.

Il faut placer toute la suite de la procédure à l'interieur du IF de confirmation de la msgbox, mais enregistrer la variable dans la cellule avant, pour que l'autre procédure puisse vérifier si elle doit déclencher sa propre msgbox ou pas.
J'ai effectué diffrents essais, je ne crois pas pouvoir passer au second choix sans valider le 1er d'abord, ni modifier le 1er choix une fois validé, sauf abandon de la procédure.
EDIT: je viens d'avoir une erreur si je valide d'abord la verticale en second choix, l'horizontale n'est pas demandée, je corrige ça.

Merci beaucoup, je commence à comprendre comment imbriquer les procédures.
 

Fichiers joints

Dernière édition:

frangy

XLDnaute Occasionnel
Bonjour,

Bravo pour ta ténacité.
A la réflexion, je pense que tu as tout intérêt à utiliser un Userform.
Pour ne pas rester sur une proposition en l'air, je t'ai préparé un classeur qui pourrait constituer un bon début.
A toi de voir ...

Cordialement.
 

Fichiers joints

Dim.Reichart

XLDnaute Occasionnel
rho m...
J'ai réussi a faire ce que je voulais, mais il est trop bien ton usf...
Je le garde sous le coude si j'ai encore du temps pour l'integrer, mais la j'ai plein de petits trucs à corriger un peu partout, et le stage fini lundi.
Au pire, je pourrais toujours décortiquer ton code, c'est pas perdu.
Merci pour le temps passé.

PS: concernant la tenacité, sans vouloir me vanter, je crois que j'en ai à revendre. Le mois dernier, j'ai commencé ce fichier, sans jamais avoir ouvert VBA avant, et là, je suis plutôt content de moi.
 

Fichiers joints

Dernière édition:

Discussions similaires


Haut Bas