Traduction Userform => Microsoft Excel Objet Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
K
Kitesurf
Membre habitué
Membre habitué
Messages : 110
Inscrit le : 2 septembre 2016
Version d'Excel : 2016

Message par Kitesurf » 24 novembre 2017, 14:10

Bonjour à tous :)

Il y a quelques temps nous étions parvenu à faire apparaître une partie de mes onglets (en enlevant "PATTERN" et "Main Sheet" dans une combobox sur un Useform et ça marchait nickel :) Le code était le suivant :
Private Sub UserForm_Initialize()
 Dim ER As Worksheet
For Each ER In ThisWorkbook.Worksheets
    If Not ER.Name = "PATTERN" And Not ER.Name = "Main Sheet" Then ONGLET.AddItem ER.Name
Next ER

End Sub

Private Sub ONGLET_Change()
If ONGLET.ListIndex > -1 Then Set Ws = Worksheets(ONGLET.Value)
End Sub
Mais maintenant je n'arrive pas à faire exactement pareil sur une feuille Excel en mettant le code dans la feuille sous Microsoft Object Excel.. J'ai essayé de bidouiller mais je ne suis arrivé à rien. Si besoin du fichier je peux éventuellement déposer une partie ici :wink:

Merci d'avance pour vos futurs conseils.

Kitesurf
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'194
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 24 novembre 2017, 14:26

Bonjour,

Ton code est composé d'une proc. d'initialisation de Userform, laquelle constitue une liste d'onglets pour une ComboBox avant ouverture, et de la procédure déclenchée par sélection d'un élément dans la liste de ladite Combo laquelle utilise le noms sélectionné constituant un nom de feuille pour affecter la référence à la feuille à une variable objet (sans doute déclarée au niveau module de ton userform).

Ces procédures répondent à des évènements liés à des objets, elles ne sauraient fonctionner ailleurs.

A toi de dire ce que tu veux exactement faire !

Cordialement.
K
Kitesurf
Membre habitué
Membre habitué
Messages : 110
Inscrit le : 2 septembre 2016
Version d'Excel : 2016

Message par Kitesurf » 24 novembre 2017, 14:45

Bonjour MFerrand,

Ta phrase était un petit peu longue mais je pense finalement l'avoir compris :roll: . Cependant, je n'ai aucun module (à part celui qui lance l'userform mais rien d'autre de déclaré).

Oui tout à fait c'est pourquoi j'ai essayé de changer les noms des objets pour que ça colle mais je ne savais pas par quoi remplacer le "Userform_Initialize"...

D'accord je vais être précis et concis alors :

Imaginons ma feuille est constitué de 5 onglets

- Une combobox est sur l'onglet 1
- Dans le code je peux exclure l'onglet 2 et 4 (écris manuellement dans le code)
- Je veux pouvoir sélectionner l'onglet 3 et 5 dans ma combobox
- Le nombre d'onglet est destiné à changer alors je souhaiterai que la combobox s'adapte avec les onglets dispo sur le classeur

J'espère avoir été assez explicite et merci pour votre aide.

Kitesurf
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'194
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 24 novembre 2017, 15:50

- Dans le code je peux exclure l'onglet 2 et 4 (écris manuellement dans le code)
Que veux-tu dire par là ?
je n'ai aucun module (à part celui qui lance l'userform mais rien d'autre de déclaré).
Les objets qui apparaissent sous Microsoft Excel Objets dans l'éditeur disposent chacun de leur module dédié, à l'instar d'un Userform.
je ne savais pas par quoi remplacer le "Userform_Initialize"
Initialize n'est pas un évènement de feuille de calcul.
Pour programmer un évènement, on évite de taper la déclaration de procédure : dans le module dédié, la liste déroulante de gauche permet de sélectionner l'objet à programmer (la feuille elle-même puisqu'il s'agit d'un feuille, ou l'un des objets dont les évènements sont programmables contenus dans la feuille).
Si tu cliques sur Worksheet dans cette liste, VBA va inscrire la déclaration de procédure d'évènement par défaut et te positionner entre les deux instructions. A ce moment tu déroules la liste déroulante de droite et tu as accès à tous les évènements programmable de l'objet, tu cliques sur celui souhaité : VBA inscrira de même la déclaration de procédure (et tu effaceras la proc. par défaut inutilisée).

Pour ce que tu veux faire : initialisation de la liste d'une ComboBox, Activate semble le plsu indiqué. En effet, la liste sera alors affectée et donc mise à jour à chaque activation de la feuille.
Cela présente cependant une petite difficulté du fait que cette proc. peut ne pas être déclenchée à l'ouverture du fichier (si la feuille concernée est déjà la feuille active...)
Pour en disposer dans ce cas, tu vas écrire ta procédure d'initialisation indépendamment, en lui donnant le nom que tu veux, et tu la places dans un module Standard.
Ta procédure Worksheet_Activate se contentera d'appeler cette procédure. Et tu feras de même pour WorkbooK_Open dans le module ThisWorkbook pour qu'elle soit également lancée à l'ouverture du classeur.

Cordialement.
K
Kitesurf
Membre habitué
Membre habitué
Messages : 110
Inscrit le : 2 septembre 2016
Version d'Excel : 2016

Message par Kitesurf » 24 novembre 2017, 16:03

MFerrand a écrit :
- Dans le code je peux exclure l'onglet 2 et 4 (écris manuellement dans le code)
Que veux-tu dire par là ?

=> Je voulais dire par là que je souhaite que certaines feuilles commes la 2 et la 4 qui sont utilisées pour autre chose et que je ne veux pas voir apparaître dans ma Combobox :)

=> Je te remercie d'avoir pris le temps de m'expliqué MFerrand c'est rare que les gens prennent le temps et je peux le comprendre. Je vais testé tout de suite :D

OOPS J'ai parlé un peu trop vite (Mes onglets se réajoutent à chaque fois) =>> J'ai plusieurs Onglet 5 par exemple dans ma combobox

En bref, à chaque fois que je réactive ma feuille mon nombre d'onglet augmente d'une série d'onglet car il execute la procédure, il faut que je rajoute de quoi la vider à chaque fois que je la désactive :mrgreen: => Je teste
K
Kitesurf
Membre habitué
Membre habitué
Messages : 110
Inscrit le : 2 septembre 2016
Version d'Excel : 2016

Message par Kitesurf » 24 novembre 2017, 16:26

RESOLU : J'ai redémarré une instruction avec : Worksheet desactivate puis j'ai fais un Onglet.clear et c'est nickel 8-)

Bon weekend à tous et merci à MFerrand
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message