XL 2016 Long code dans userform vers un module

Sirberthoult

XLDnaute Occasionnel
Bonjour le forum,

j'ai une question pratico-pratique très bête...mais je ne trouve pas la réponse ...

je dois gérer 32 option buttons d'une certaine facon dans un userform et cela me procure du code ultra long...( surement écrit de façon peu optimal et condensé...mais fonctionnel donc je m'en contente...)
je pensais le mettre dans un module pour éviter de scroller lors de l’écriture de mon projet sur lequel il reste du boulot, et y faire appel ...je lui donne un nom de Sub optionbutton ( ) dans un module et je remplace dans le code de l'userform mon long code par " optionbutton"...

sauf qu'il bug à l'appel de la sub car dans le contenu il y à un Me.combobox1=x, et des références qu'il ne trouve plus car il n'est plus dans l'userform...
bref peut être faut il déclarer public le module ou un truc mais je ne sais pas comment faire exactement ou faire autre chose...
je ne maîtrise pas bien l'environnement vba ...j'arrive a écrire une peu de code et le modifier mais j'ai des lacunes...

merci pour toutes reponses
 

Sirberthoult

XLDnaute Occasionnel
staple1600, pas de soucis avec ton opinion ;)

concernant ma demande, je n'ai pas de base en vba, je cherche du code et modifie à ma convenance... je manque donc cruellement de base et suis stopé par des erreurs qui me semble dérisosire...( a mon sens, peut etre est-ce une erreur )

mais suis surpris qu'un simple couper /coller et un adressage depuis un module soit "long" à me donner la marche suivre...j'ai l'impression que ca ressemble à un enregistrement de macro via excel... mais je dois me tromper.

et biensur je ne sais pas ce qu'est un module de classe par rapport à un module tout court ...meme si j'en ai eu un apercu plus haut.

bref ca me semblais bidon...et apparement ce ne l'ai pas.😓
 

Staple1600

XLDnaute Barbatruc
Re

@Sirberthoult
Voici un petit exemple de module de classe
(A TESTER SUR UN CLASSEUR VIERGE : avec un userform contenant 3 CommandButton (pour l'exemple)
Dans le module de classe
VB:
Option Explicit
Public WithEvents cmButt As MSForms.CommandButton
Private Sub cmButt_Click()
MsgBox "Vous avez cliqué sur : " & cmButt.Name, vbInformation
End Sub

Dans le code de l'Userform
Code:
Option Explicit
Dim TB() As New Classe1
Private Sub UserForm_Initialize()
Dim cmBCount As Integer, c As Control
cmBCount = 0
For Each c In Controls
If TypeName(c) = "CommandButton" Then
cmBCount = cmBCount + 1
ReDim Preserve TB(1 To cmBCount)
Set TB(cmBCount).cmButt = c
End If
Next c
End Sub

Pour tester : afficher l'userform(*) puis clique successivement sur les CommandButton
(*) Depuis VBE, en sélection l'userform puis en appuyant sur F
 

gbinforme

XLDnaute Impliqué
bref le code fonctionne, mais pollu mon code d'userform ...
ps : rien a voir, mais j'ai un bug lorsque l'on choisi le premier nom de la liste filtré
Comme Staple1600 (salut à toi) serait d'accord pour le module de classe j'ai voulu regarder la maternité pour pouvoir l'implanter mais j'ai trouvé le texte d'un roman pour le prochain Goncourt sans pouvoir distinguer la trame du scénario à moins d'y passer des heures et j'ai un autre livre de chevet en cours.

Je suis toujours ébahi que l'on puisse dupliquer autant de lignes qui seront impossibles à maintenir car le code n'a rien de générique avec des textes changeants : pas sûr que je conseillerai cette maternité à une future mère car même si le code est prétendu fonctionnel, j'ai personnellement eu plusieurs plantages pour essayer de comprendre.

Aussi je passe de même le relais car la mise en place d'un module de classe est très simple mais seulement lorsque l'on connait le fonctionnement à obtenir et comme disait Nicolas Boileau Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément mais je ne comprend pas la conception pourtant préalable nécessaire à la maternité.:)

Bon courage pour la suite.
 

Sirberthoult

XLDnaute Occasionnel
Bonjour le forum, staple1600, gbinforme

j'ai beau tenter d'adapter le morceau de code transmit...je ne vois pas comment faire...je manque de savoir faire. et donc je doute toujours que le module de classe soit la solution...mais j'y connais rien ...

pour tenter de me faire bien comprendre j'ai modifier mon code et j'ai créer dans "Sub Checkbutton" tout à la fin de mon projet dans l'userform 2, le morceau que je voulais deplacer dans un module. j'y fais appel quand j'en ai besoin ailleurs... ca fonctionne.

je souhaitai juste mettre "sub checkbutton" dans un module. pour eviter de scroller dans le code de mon userform.
 

Pièces jointes

  • les eti en neo 2 avec Bruno jumeau.xls
    719 KB · Affichages: 2

Sirberthoult

XLDnaute Occasionnel
Merci beaucoup pour ta solution gbinforme

même si j'ai des erreurs sur le filtre des noms...que je n'avait pas ...( peut etre une histoire de version d'excel...)

des "." qui ont disparu dans mon code ...

comme

If Not .AutoFilterMode Then .[A1].AutoFilter
If .FilterMode = True Then .ShowAllData

mais sans les points...

sinon l'interet ?

foncierement ca change pas le fonctionnement de mon truc c'est sur...
en fait je voulais "savoir" comment on fait puisque quand j'ai essayé je n'y suis pas arrivé...j'avais des erreurs puisqu'il ne trouvais plus les references aux combobox et aux checkboxs...

d'ailleur j'imagine que ca fonctionne chez toi ...donc quel est le principe pour faire ca?
il fallait declarer quelque chose ou precisé une propriété au module ou à l'userform ?

bref l'interet était d'apprendre🤓. ( même si a ton sens, j'imagine que je devrais me consacrer à apprendre d'autre facette d'excel... vu la tronche de mon code🤕)

merci encore, si jamais tu as encore un peu de patience avec moi.
 

gbinforme

XLDnaute Impliqué
même si j'ai des erreurs sur le filtre des noms...que je n'avait pas ...des "." qui ont disparu dans mon code ...
Sans doute une mauvaise manip de ma part : il y a tellement de code :)

il fallait declarer quelque chose ou precisé une propriété au module ou à l'userform ?
Les propriétés sont toujours associées à un objet et donc il faut bien sûr que l'objet auquel elles appartiennent soit explicitement précisé comme tu peux le constater dans ma modification qui contraitement à ce que tu croyais n'ait pas un simple couper / coller.

Ton code est très verbeux et de ce fait absolument impossible à maintenir. Si tu veux apprendre comme tu dis il faut conceptualiser les fonctions que tu souhaites réaliser et écrire du code plus concis et efficace. Cela demande de réfléchir aux propriétés et méthodes propres à un ensemble d'objets comme cela fonctionne dans un module de classe et tu peux ainsi par exemple mettre à jour plusieurs feuilles à jour à partir de la même procédure.

Bonne continuation.
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
313 310
Messages
2 097 037
Membres
106 816
dernier inscrit
Garry972