Mettre/remplacer nom dans un control par VBA

  • Initiateur de la discussion Initiateur de la discussion es83000
  • Date de début Date de début

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 !

E

es83000

Guest
Bonjour,

Je cherche à mettre un nom dans un contrôle en fonction de la colonne -2 . Pour l'instant j'utilise des commandbutton (mais suis pas certain que ce soit le "bon" choix…), avec des nom de bureaux, je souhaiterai que lorsque je clique sur le N° du bureau, au lieu qu'il m'affiche le N° du bureau, il me mette le nom de l'activité qui se situe dans la pré-pré-précédente colonne….

peut-être pas clair, mais la PJ le sera un peu plus….(avec photo et Userform et explications…)

merci pour votre aide,

Eric
 

Pièces jointes

Dernière modification par un modérateur:
Re : Mettre/remplacer nom dans un control par VBA

merci Dranreb,

Oui, cela veut dire qu'ils ont une activité, mais pas de bureau, ou alors, nous mettons "Autre" (dans le bureau) ou vide, nous permettant d'identifier les collègues à qui nous devons affecter un bureau.

Et oui, les noms des collègues sont par ordre alphabétique, pour des raisons de confidentialité, j'ai mis "Collègue1", 2,3,4, etc….

Merci pour votre aide,
 
Dernière modification par un modérateur:
Re : Mettre/remplacer nom dans un control par VBA

Allez y donc. Je regarderai ce que vous aurez fait. Tâchez de faire du code plus performant que ce que vous aviez écrit pour votre tableau avec les croix. Chargez carrément toute la UsedRange tans un tableau par exemple, au moins à partir de la ligne 4, comme j'ai fait pour TBur avec PlgBur mais en prenant toutes les colonnes, et ne travaillez plus qu'avec ce tableau.
 
Re : Mettre/remplacer nom dans un control par VBA

Merci Dranreb,

J'ai essayé de modifier l'USF en fonction de votre idée, si je l'ai bien compris…et rajouté dans l'affichage du CommandButton le bureau + l'activité (effectivement c'est plus clair et lisible.)

En fait, il suffirait de choisir la 1/2 journée, et la liste des collègues sans bureaux s'afficherait dans le combobox, il faut que je clique sur le collègue, puis dans la Textbox, son activité apparait, et il ne me resterait plus que le bureau à choisir….puis la Combobox se met à jour (=enleve le collègue à qui on vient d'attribuer le bureau)

Et effectivement, pas de nécessité de visualiser la feuille "planning"….

J'ai essayé de mettre en forme tout cela, mais je n'ai pas trouvé comment alimenter la Combobox….

Merci pour votre aide,
 

Pièces jointes

Dernière modification par un modérateur:
Re : Mettre/remplacer nom dans un control par VBA

Comme dit il faudrait charger tout le planning dans un tableau. Pour alimenter la ComboBox le mieux serait de construire une image de sa List dans un second tableau. Prévoir aussi une table As Long globale pour les numéros des lignes correspondants dans le planning. La renseigner d'abord, même: ça donnera le nombre de lignes pour le Redim du tableau image de List. Je m'attendais à ce que ces contrôles figurent à gauche des boutons de Bureaux dans la mesure où ces choix doivent être effectués d'abord.
 
Re : Mettre/remplacer nom dans un control par VBA

Merci Dranreb,

Si j'ai bien compris, il faut que je modifie la déclaration des variables Integer par Long ?

Concernant la visualisation, j'ai mis Bureau + Activité dans le CommandButton, simplement pour que l'on puisse garder le "plan d'implantation" du site : le N° du bureau et l'activité que l'on a mis dedans, juste pour information (=cela évite l'affichage en rouge dont je parlais précédemment : destination du bureau).

Concernant l'alimentation de la Combobox, il faudrait créer une feuille supplémentaire ? un peu comme mon code "simplification" ?

Et concernant la présentation de l'USF, c'est à cela que vous pensiez dans vos précédents post ?

En vous remerciant,

merci,
 
Dernière modification par un modérateur:
Re : Mettre/remplacer nom dans un control par VBA

déclaration des variables Integer par Long
Je prends toujours Long pour les entiers, sauf si c'est à fournir en Integer à une API par exemple. De toute façon dans les registres de la CPU, même avec du Byte, c'est toujours du Long alors… Enfin avec les architectures 64bits je ne suis plus sûr de rien.
Concernant l'alimentation de la Combobox, il faudrait créer une feuille supplémentaire ?
Non, certainement pas. Ce seront des procédure de ce style :
VB:
Private Sub LbxDemiJ_Click()
CAc = 4 + 2 * LbxDemiJ.ListIndex: CBu = CAc + 1
RempListe
End Sub

Private Sub RempListe()
Dim TLst(), Ls&, Le&
ReDim TLgn(0 To UBound(TPlan) - 1)
Ls = -1
For Le = 1 To UBound(TPlan)
   If TPlan(Le, CAc) = "" Or TPlan(Le, CBu) = "" Then
       Ls = Ls + 1: TLgn(Ls) = Le: End If: Next Le
ReDim Preserve TLgn(0 To Ls): ReDim TLst(0 To Ls, 1 To 1)
For Ls = 0 To UBound(TLst): TLst(Ls, 1) = TPlan(TLgn(Ls), 1): Next Ls
Me.CbxCollèg.List = TLst
…
End Sub
Mais c'est pas fini, il faut encore embrayer sur le traitement actuellement effectué par la Public Sub Afficher, laquelle disparaîtra. Tout change complètement. Mais gardez une organisation modulaire, cloisonnée.
 
Dernière édition:
Re : Mettre/remplacer nom dans un control par VBA

Merci Dranreb,

Ok, j'utiliserai Long plutôt qu'Intèger, j'ai compris la raison (pour l'instant, j'avais utilisé Long que lorsque les données dépassaient 30000 lignes, car j'avais remarqué qu'il y avait un blocage du code, maintenant, je sais pourquoi…merci,

Je vous remercie pour vos conseils ("organisation modulaire, cloisonnée"), je comprends le principe, mais suis absolument incapable de créer un code tel que le votre….vous avez pu remarqué que je suis assez débutant en VBA, j'arrive à comprendre la logique, fais des essais, ce qui me permet de modifier 2-3 choses (cf nom du CommandButton), mais je vous avoue être incapable de créer le code que vous m'aviez réalisé + celui que vous venez de poster…malheureusement pour moi, il me reste encore beaucoup de choses à acquérir….
J'ai essayé de mettre votre code dans l'USF, dans le Combobox, mais cela n'a pas fonctionné, pourtant j'ai changé le nom : au lieu de Combobox1, j'ai mis "LbxDemiJ", j'ai aussi essayé en mettant "CbxCollèg", mais idem…cela doit certainement avoir un lien avec ce que vous notiez :
il faut encore embrayer sur le traitement actuellement effectué par la Public Sub Afficher, laquelle disparaîtra

Je vous remercie pour votre aide,

merci,
 
Re : Mettre/remplacer nom dans un control par VBA

Au final ça n'a pas l'air si compliqué. Les TAct(L, 1) et TBur(L, 1) sont à remplacer partout par TPlan(L, CAc) et TPlan(L, CBu) … en gros… Mais continuez, pendant que je finalise ma correction finale. Vous aurez la satisfaction de l'avoir fait et vous aurez moins de mal à la comprendre. Le plus gros du Afficher se mettra dans LbxDemiJ_Click et non dans RempListe comme le suggérait mes points de suspension. Sauf le positionnement de LCou qui se fera dans une :
VB:
Private Sub CbxCollèg_Change()
Dim BB As TypeBtnBur
LCou = TLgn(CbxCollèg.ListIndex)
Me.TbxActi.Text = TPlan(LCou, CAc)
End Sub
 
Re : Mettre/remplacer nom dans un control par VBA

Merci Dranreb,

Je commence à comprendre la logique de votre futur code, je vais effectuer les changements tels que vous me l'avez suggéré, mais je suis vraiment impressionné !! surtout lorsque vous me dites que
ça n'a pas l'air si compliqué
….😉

Je vous remercie d'ores et déjà car, à force d'utilisation des Tbl, je commence à mieux comprendre leur fonctionnement….

Merci pour votre aide,

merci,
 
Dernière modification par un modérateur:
Re : Mettre/remplacer nom dans un control par VBA

Bonjour.
je comprends le principe, mais suis absolument incapable de créer un code tel que le votre…
Peut être devriez vous essayer avant d'examiner mon code, pour ne pas louper une occasion de progresser.
Montrez moi par exemple comment vous avez appliqué ce que je vous ai suggéré, et complété par ce qu'il faut ailleurs…
J'ai terminé de mon coté en utilisant les contrôles que vous aviez mis. Il n'y avait pas de case à cocher pour afficher tous les collègues. Le seul moyen de changer son bureau sera donc de commencer par le désaffecter en cliquant sur son bouton sans qu'aucun collègue ne soit sélectionné afin que celui auquel il était attribué soit réintégré dans la liste.
 
Dernière édition:
Re : Mettre/remplacer nom dans un control par VBA

Merci Dranreb,

Ne voyez aucune flagornerie dans mes différents propos….

Comme je vous l'ai indiqué dans un de mes précédent post, je suis vraiment débutant dans la programmation (comme vous avez pu le remarquer avec mon code "Simplification"). En fait, je suis un complet autodidacte (élevé dans ma jeunesse par le Basic…), et en fait, j'ai réussi à "progresser" en allant sur les forums, en regardant les codes créés, en essayant de les analyser, en essayant 2-3 choses pour voir la "réaction" du code, et donc de comprendre….et je me garde en mémoire ces différents essais que je "remobilise" lorsque je cherche à créer un autre code.

Pour exemple, votre précédent code "RempListe()", je pense comprendre la logique : vous créez un tableau, vous regardez si une case est vide, et vous affichez dans un USF nommé "CbxCollèg.List", le résultat…les lignes étant incrémentées par "Ls". C'est par exemple un code que je vais copier/coller, et le faire "tourner" (par différents essais) pour qu'il remplace mon code "Simplification".

Pour notre cas présent, j'ai beaucoup cherché des tutus pouvant m'aider (Silkyroad dans DVP, le site de Boisgontier Jacques, pour ne citer qu'eux…), dérivant de mon incapacité de créer "directement" le code, j'essaye de le comprendre, voir la logique et essaye de les reproduire….et bien souvent, je copie/colle un code, et essaye de le modifier en fonction du cas que je dois traiter…


J'ai remplacé les variables comme vous me l'aviez indiqué, mais comme je ne sais pas où positionner le code (cf mon précédent post), le code se bloque ne connaissant pas la variable CBu (par exemple).

Concernant
Il n'y avait pas de case à cocher pour afficher tous les collègues
, j'avais mis une Combobox1, qui m'apparaissait plus facile : liste des collègues sans bureaux, retranscrite dans cette Combobox….

En vous remerciant à nouveau,

Merci,
 
Dernière modification par un modérateur:
Re : Mettre/remplacer nom dans un control par VBA

Comprends pas ce que vous dites à propos du ComboBox. Ça convient, mais puisqu'il n'y a pas de case "Afficher tout" on ne peut donc y afficher strictement que les collègues qui n'ont pas de bureau. Il est par conséquent impossible d'en sélectionner un dont on voudrait le changer, puisqu'il n'y figure plus. Alors que dans la feuille on pouvait sélectionner un bureau affecté pour le changer.

Bon, je le joins, mais je pense que vous ne comprendrez jamais à fond sans essayer de le faire vous même pour apprendre ce qui manque pour que ça marche.
 

Pièces jointes

Dernière édition:
Re : Mettre/remplacer nom dans un control par VBA

Wouf……,

Merci Dranreb,

Merci pour les explications mises dans le code, mais il va me falloir quelques heures pour comprendre la logique….

Mais merci, cela fonctionne parfaitement !!!

J'étais loin de me douter qu'un simple rajout de la Combobox et de la TextBox allaient modifier autant le code….mais d'après les premiers éléments que j'ai pu assimiler, c'est la logique qui est changée…je vais y passer quelques heures….😱 mais merci, le code est vraiment top !

Par contre, je n'ai pas compris le code "CorrigerClassFonctions" et "CorrigerClassFonctionsClass", quelle est l'utilité et ou fonction ?

Merci,

Je prends bien note de votre remarque sur l'apprentissage, si vous aviez des adresses de Tuto pour que je puisse continuer mon apprentissage, je vous remercie par avance.

Merci,
merci,
 
Re : Mettre/remplacer nom dans un control par VBA

Ah, oui. Oh ça ne sert à rien, c'était avec, dans le module Utilit de OutIdx, parce qu'il a aussi des fonctions permettant d'utiliser les dictionnaires arborescents dans des cellules. Vous pouvez le déplacer vers un autre classeur dédié à des manip particulières. Quand on utilise pour la première fois dans une cellule une fonction personnalisée (càd une Function VBA), il garde la casse tapée (en général des minuscules) au lieu d'appliquer celle du nom de la Function. Ces procédures permettent de réparer cela.
 
Re : Mettre/remplacer nom dans un control par VBA

Merci Dranreb,

Vous pouvez le déplacer vers un autre classeur dédié à des manip particulières
, je n'ai pas compris…ce code va chercher dans le C:/ un Scrrun.dll, J'ai essayé de comprendre ce que vous m'avez écrit, mais…je n'ai pas compris….surtout que lorsque j'ai enlevé toute la partie du code, votre code continue de fonctionner….

Je suis toujours sur l'analyse de votre code…..vraiment impressionnant…merci,

J'essaye de voir la logique, de comprendre, merci pour les explications que vous avez mis.

Merci,
Merci,
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

F
Réponses
7
Affichages
1 K
A
Réponses
17
Affichages
4 K
Abdenour
A
Retour