XL 2013 Gestion clic bouton UserForm

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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...
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

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,
 
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,
 
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 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,
 
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é,
 
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,
 
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,
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2019 User Form
Réponses
9
Affichages
327
  • Question Question
Microsoft 365 bouton supprimer
Réponses
4
Affichages
116
  • Question Question
Microsoft 365 affichage userform
Réponses
4
Affichages
374
Réponses
5
Affichages
403
  • Question Question
Réponses
6
Affichages
291
Réponses
2
Affichages
93
Réponses
32
Affichages
1 K
Réponses
4
Affichages
169
Réponses
11
Affichages
176
Retour