XL 2013 Gestion clic bouton UserForm

M.Ben

XLDnaute Junior
Bonjour tous le monde,

J'ai un soucis dans un programme que je ne cesse de faire évoluer au dès que j'ai un moment pour.
J'ai un bouton qui m'ouvre un Userform (avec multiPage), sur la première page l'utilisateur a la possibilité de cliquer sur 3 boutons.
Chaque bouton amène l'utilisateur sur une page dédié, jusque la pas de problème.

Pour le moment, je me suis concentré à développer le 1er bouton "Gestion des actionneurs", qui ouvre la page suivante :
1682055177381.png

Arrivé ici, l'utilisateur va sélectionner ce qu'il souhaite faire (Actuellement seulement "Ajouter actionneurs" est en développement).
En fonction de son choix le frame grandi et laisse apparaitre d'autres éléments.
Rubrique concerné par ce topic le bouton "Actionneur suivant" quand la checkbox "Créer les lignes 1 à 1" est coché.

Scénario:
L'utilisateur complète les champs et il clique sur le bouton "Actionneur suivant", quand il clique sur ce bouton, les valeurs qui sont renseignées dans les champs sont copier dans les cellules correspondantes de la feuille nommée "LAC", les champs de l'userForm se vide est on passe à l'actionneur suivant est ceux jusqu'à avoir complété x actionneur (x étant le nombre renseigné dans la case "Nombre d'actionneur à ajouter).
Le bouton Créer lignes restantes permet à l'utilisateur de créer comme son nom l'indique les ligne restante dans la LAC (Exemple: on renseigne que nous voulons ajouter 5 actionneur, l'utilisateur complète les champs pour 3 actionneurs mais il ne veut pas remplir les champs des 2 actionneurs restant, alors il clique sur le bouton et les 2 lignes manquant s'ajoute dans la LAC et reste vide. On pourra les remplir plus tard directement dans le LAC).

Mon blocage:

Dans mon VBE, j'ai une module nommé "GestionLAC" qui fait un certain nombre d'action liées aux choix fait par l'utilisateur. Le problème que j'ai, c'est que j'arrive pas à lier mon bouton actionneur suivant à celui-ci. J'aimerai que mon programme se mette en pause lorsque qu'il rentre dans une certaine fonction et que le clic sur le bouton incrémente une variable qui sera lié à une boucle (pour résumer exécuter une boucle en pas à pas avec ce bouton).

J'ai essayer d'afficher le résultat de ce compteur (qui représenterai ma variable) à une cellule pour tester la fonction mais je n'arrive pas à lier mon bouton.
J'ai passer des heures sur des forums pour trouver une solution, j'ai essayé d'adapter ce que je trouvais mais sans succès.

Désolé pour ce roman, j'espère que ma demande est assez compréhensive.

J'ai joint mon fichier pour faciliter les échanges.

Je vous remercie d'avance pour votre aide,

M.Ben
 

Pièces jointes

  • Fichier allégé.xlsm
    219.5 KB · Affichages: 11
Solution
Je suis entièrement d'accord avec ce que vous dites.

Alors le problème vient de ma demande initiale qui est mal posé.
Je m'excuse, j'ai l'impression d'être long à la détente.

Ce que je cherche à obtenir, c'est que ma boucle soit dépendante de l'action sur le bouton.
Quand je clique sur le bouton, je rentre dans ma boucle pour exécuter des opérations (pour le moment je n'ai pas encore écrit les actions à faire).

L'actionneur en question sera de prendre les valeurs dans les différents champs et les coller dans la LAC. et s'il n'y a pas assez de ligner de créer une ligne puis coller les valeurs des champs dans les cellules correspondantes.

Je ne sais pas si je suis plus claire, ou si au contraire je rend la chose encore plus...

M.Ben

XLDnaute Junior
Bon, j'ai essayé tous ce que j'ai pu pour arriver à mes fins, mais sans succès.

J'ai l'impression que je sort directement de ma fonction car mon programme m'affiche mon message Box avant d'avoir cliqué sur mon bouton pour atteindre la valeur cible.

Alors que je souhaite qu'il reste dans ce programme tant qu'il n'a pas atteint la valeur cible.

Lorsque la valeur Act_Suivant = Actuator_Number_Add, alors et seulement à ce moment la il sort de ma function et peut afficher mon message.
 

Pièces jointes

  • Fichier allégé.xlsm
    194.5 KB · Affichages: 5

Gégé-45550

XLDnaute Accro
Bon, j'ai essayé tous ce que j'ai pu pour arriver à mes fins, mais sans succès.

J'ai l'impression que je sort directement de ma fonction car mon programme m'affiche mon message Box avant d'avoir cliqué sur mon bouton pour atteindre la valeur cible.

Alors que je souhaite qu'il reste dans ce programme tant qu'il n'a pas atteint la valeur cible.

Lorsque la valeur Act_Suivant = Actuator_Number_Add, alors et seulement à ce moment la il sort de ma function et peut afficher mon message.
DSL mais je ne comprends pas ce que vous cherchez à faire.
Dans ces conditions, il m'est difficile de vous aider davantage.
Cordialement,
 

M.Ben

XLDnaute Junior
DSL mais je ne comprends pas ce que vous cherchez à faire.
Dans ces conditions, il m'est difficile de vous aider davantage.
Cordialement,
Je me doute bien, vous avez passé énormément de temps à essayer de comprendre ma demande et également de m'aider à solutionner mon problème.

A mon grand regret, pour le moment, je ne vois pas comment formuler autrement mon besoin.

Je pourrai essayer de dérouler un petit scénario de ce que je cherche à faire, mais j'ai peur que ça reste abscons et que ça n'agace plus qu'autre chose.

Vous avez fait preuve de beaucoup de patience et je vous en remercie.

Cordialement,
 

M.Ben

XLDnaute Junior
Bonjour,

Je fais une dernière tentative pour expliciter ce que je cherche à faire (en espérant que se soit le plus claire possible).

Pour la partie Actionneur:

1) L'utilisateur choisie s'il veut ajouter ou supprimer des actionneurs à la liste LAC,
2) Il renseigne dans le Champs "Nbr Actionneur" le nombre qu'il veut ajouter ou supprimer (pour le moment pour ce Topic, je désire gérer la partie ajouter),
3)L'utilisateur sélection soit l'Option créer ligne 1 à 1, soit créer les lignes en 1 fois (L'option lignes en 1 fois est déjà gérée dans mon programme).
4)L'option Créer ligne 1 à 1 est coché, alors la frame avec les champs et les boutons "Actionneur suivant" et "Créer ligne restantes" apparaissent.
5) Un Msgbox avec la question suivante apparait "Commencez-vous une nouvelle LAC ?", si l'utilisateur répond OUI, cela signifie que les champs qu'il va renseigner, débuteront à la première ligne du tableau de la rubrique actionneur. Si la réponse est NON, elles se rajouteront à la suite.

Le plus compliqué dans mon explication commence maintenant je pense:

Dans mon module "GestionLAC", dans mon MAIN j'appelle un sous programme en fonction de la réponse à la question "Commencez-vous une nouvelle LAC ?".
Je cherche que lorsque je rentre dans ce sous programme j'y reste, jusqu'à ce que j'ai fini d'ajouter mes actionneurs 1 à 1 (grâce au bouton "Actionneur suivant").
Le clic sur le bouton suivant, me permet de revenir au début de ce sous-programme pour refaire les opération de copier_coller ou insertion ligne + copier_coller.

Lorsque j'ai atteint la valeur renseignée dans le champ "Nbr actionneur", je sors de ce sous-programme et je reviens dans mon main.

Actuellement de mon main je vais vers mon sous-programme et j'en sort directement.

Mon userform reste ouvert et je peux incrémenter ma variable qui est sensée me faire revenir en début de mon sous-programme.

J'espère que mon explication cette fois si est plus compréhensible sur ce que je cherche à faire.

Cordialement,
 

Gégé-45550

XLDnaute Accro
Bonjour,

Je fais une dernière tentative pour expliciter ce que je cherche à faire (en espérant que se soit le plus claire possible).

Pour la partie Actionneur:

1) L'utilisateur choisie s'il veut ajouter ou supprimer des actionneurs à la liste LAC,
2) Il renseigne dans le Champs "Nbr Actionneur" le nombre qu'il veut ajouter ou supprimer (pour le moment pour ce Topic, je désire gérer la partie ajouter),
3)L'utilisateur sélection soit l'Option créer ligne 1 à 1, soit créer les lignes en 1 fois (L'option lignes en 1 fois est déjà gérée dans mon programme).
4)L'option Créer ligne 1 à 1 est coché, alors la frame avec les champs et les boutons "Actionneur suivant" et "Créer ligne restantes" apparaissent.
5) Un Msgbox avec la question suivante apparait "Commencez-vous une nouvelle LAC ?", si l'utilisateur répond OUI, cela signifie que les champs qu'il va renseigner, débuteront à la première ligne du tableau de la rubrique actionneur. Si la réponse est NON, elles se rajouteront à la suite.

Le plus compliqué dans mon explication commence maintenant je pense:

Dans mon module "GestionLAC", dans mon MAIN j'appelle un sous programme en fonction de la réponse à la question "Commencez-vous une nouvelle LAC ?".
Je cherche que lorsque je rentre dans ce sous programme j'y reste, jusqu'à ce que j'ai fini d'ajouter mes actionneurs 1 à 1 (grâce au bouton "Actionneur suivant").
Le clic sur le bouton suivant, me permet de revenir au début de ce sous-programme pour refaire les opération de copier_coller ou insertion ligne + copier_coller.

Lorsque j'ai atteint la valeur renseignée dans le champ "Nbr actionneur", je sors de ce sous-programme et je reviens dans mon main.

Actuellement de mon main je vais vers mon sous-programme et j'en sort directement.

Mon userform reste ouvert et je peux incrémenter ma variable qui est sensée me faire revenir en début de mon sous-programme.

J'espère que mon explication cette fois si est plus compréhensible sur ce que je cherche à faire.

Cordialement,
Bonjour,
Je pense que j'avais à peu près compris tout ça.
Ce que je ne comprends pas, c'est pourquoi vous n'avancez pas.
Il vous faut maintenant développer la suite de votre procédure 'Actionneur_en_1a1_Premiere_LAC' en complétant le code à la place des commentaires en gras et rouge (lors d'un clic sur le bouton 'Actionneur suivant', enregistrement des valeurs de tous les champs 'Actionneur' là où vous le souhaitez, remise à zéro de ces champs, redonner la main pour saisie par l'utilisateur, etc. ... jusqu'au nombre d'actionneurs choisis, puis l'action ou les actions à exécuter lorsque ce nombre est atteint)
VB:
Function Actionneur_en_1a1_Premiere_LAC()
Dim i&, derlig&, retour&
    With Sheets("LAC")
        .Unprotect
        Debug.Print "Act_Suivant = " & Act_Suivant
        Debug.Print "Actuator_Number_Add = " & Actuator_Number_Add
'        derlig = .Cells(Rows.Count, 15).End(xlUp).Row       'calcule le numéro de la dernière ligne non vide de la 15e colonne (colonne O)
'        For i = 1 To derlig
'            .Range("O" & i) = ""                                         'Efface les résultats précédents
        Select Case Act_Suivant
            Case Is <= Actuator_Number_Add
                '[B][COLOR=rgb(226, 80, 65)]Code pour les différentes actions a exécuter[/COLOR][/B]
                .Range("O1") = Act_Suivant
              
            Case Is > Actuator_Number_Add
               [B][COLOR=rgb(226, 80, 65)] 'code de sortie[/COLOR][/B]
         End Select

     End With

End Function
Pour l'instant et tant que vous n'aurez pas écrit ces procédures, vous tournez en rond.
Cordialement,
 

M.Ben

XLDnaute Junior
Autant pour moi, le blocage doit venir de moi alors.

Je vais suivre votre conseil et continuer à développer mon sous-programme "Function Actionneur_en_1a1_Premiere_LAC".
Une fois que j'aurai fait cela, en fonction du résultat je reviendrais cloturer le sujet.

Merci Gégé,
 

Gégé-45550

XLDnaute Accro
Autant pour moi, le blocage doit venir de moi alors.

Je vais suivre votre conseil et continuer à développer mon sous-programme "Function Actionneur_en_1a1_Premiere_LAC".
Une fois que j'aurai fait cela, en fonction du résultat je reviendrais cloturer le sujet.

Merci Gégé,
Effectivement, il serait grandement préférable (indispensable ?) de transformer cette fonction ("Function Actionneur_en_1a1_Premiere_LAC") en sous-programme ("Sub Actionneur_en_1a1_Premiere_LAC"). En général, on utilise une fonction pour retourner une valeur, pas pour effectuer des actions.
Cordialement,
 

M.Ben

XLDnaute Junior
Merci Gégé, je pense avoir enfin compris ce que vous essayez de m'expliquer depuis quelques commentaires maintenant.

Je n'ai pas besoin de revenir dans mon Main, lorsque j'appelle le sous-programme, je fais mes actions dans celui-ci et quand j'ai ajouté les actionneurs que j'ai besoin, je sors de ce sous-programme.

Je n'ai pas besoin de revenir dans mon main, ça n'avais aucun sens.

Il m'aura fallu du temps mais merci.

Passez une bonne fin de journée.

Cordialement,
 

Discussions similaires

Statistiques des forums

Discussions
314 095
Messages
2 105 823
Membres
109 436
dernier inscrit
alex.972