XL 2016 [RESOLU] lancer macro "change" à l'ouverture du fichier

dupuy.mathias

XLDnaute Nouveau
Bonjour
J'ai une feuille (OUTIL) dans laquelle il y a 3 ComboBox qui affichent chacun une liste issue d'une autre feuille (TELEPHONIE) :

Private Sub ComboBox1_Change()
Dim Plage1 As Range
With Sheets("TELEPHONIE")
Set Plage1 = .Range("A2:A" & .Range("A2000").End(xlUp).Row)
End With
ComboBox1.List = Plage1.Value
End Sub


Private Sub ComboBox2_Change()
Dim Plage2 As Range
With Sheets("TELEPHONIE")
Set Plage2 = .Range("B2:B" & .Range("B2000").End(xlUp).Row)
End With
ComboBox2.List = Plage2.Value
End Sub


Private Sub ComboBox3_Change()
Dim Plage3 As Range
With Sheets("TELEPHONIE")
Set Plage3 = .Range("H2:H" & .Range("H2000").End(xlUp).Row)
End With
ComboBox3.List = Plage3.Value
End Sub


Je suis obligé à l'heure actuelle de lancer les macros pour afficher les listes respectives

Je voudrais qu' elles "s'initialisent" (je ne sais pas si c'est le bon terme) au lancement du fichier.

J'ai essayé de les mettre dans "ThisWorkbook" mais ça ne fonctionne pas. (Erreur 438 : propriété ou méthode non gérée par cet objet)


Private Sub Workbook_Open()

Call Sheets("OUTIL").ComboBox1_Change
Call Sheets("OUTIL").ComboBox2_Change
Call Sheets("OUTIL").ComboBox3_Change

End Sub


Pourriez vous m'y aider svp ?

Merci
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, dupuy.mathias

=>dupuy.mathias
Tu peux essayer en les mettant dans la procédure Activate de la feuille TELEPHONIE
Exemple pour la Combobox1
VB:
Private Sub Worksheet_Activate()
ComboBox1.List = Range([A2], Cells(Rows.Count, 1).End(3)).Value
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

=>mapomme
Pourquoi le reinit n'est pas immédiat?
VB:
Private Sub Worksheet_Activate()
Dim f As Worksheet: Set f = Sheets("TELEPHONIE")
Application.ScreenUpdating = False
ComboBox1.Value = Null
ComboBox1.List = f.Range(f.[A2], f.Cells(Rows.Count, 1).End(3)).Value
Application.ScreenUpdating = True
End Sub
Idem si j'utilise DeActivate
 

juvaxe

XLDnaute Occasionnel
Bonjour

1 - Dans le Userform la partie Userform_Initialize n'est-elle pas faite pour remplir le ou les ComboBox à l'ouverture ?

2 - Avant d'ouvrir le Userform, c'est-à-dire de faire le Userform.Show, il est possible d'écrire :

Userform.ComboxBox = .... ; si on a procédé à une telle initialisation il faut écrire le Userform_Initialize en conséquence pour ne pas écraser ce qui a déjà été mis.

Bonne réception
 

Staple1600

XLDnaute Barbatruc
Re

=>mapomme
Je suis sur la feuille OUTIL je le sélectionne une valeur dans la combobox1
Je change d'onglet
Je reviens sur la feuille OUTIL
Normalement je ne devrais pas voir la valeur précédemment sélectionnée non ?
(Et ce que je mette ce bout de code dans Activate ou Deactivate)
ComboBox1.Value = Null
Ce que j'appelle la réinit, se fait bien, mais pas immédiatement.
Suis-je plus clair?
;)
 

dupuy.mathias

XLDnaute Nouveau
Bonjour le fil, dupuy.mathias

=>dupuy.mathias
Tu peux essayer en les mettant dans la procédure Activate de la feuille TELEPHONIE
Exemple pour la Combobox1
VB:
Private Sub Worksheet_Activate()
ComboBox1.List = Range([A2], Cells(Rows.Count, 1).End(3)).Value
End Sub

Bonjour Staple
J'ai essayé cette solution mais ça n'a pas fonctionné
Il fallait bien mettre ce code dans la feuille TELEPHONIE et adapter pour les autres combobox, n'est ce pas ?
Faut il garder quand même le code suivant dans la feuille OUTIL (pour moi ça fait doublon) ?
VB:
Private Sub ComboBox1_Change()
Dim Plage1 As Range
With Sheets("TELEPHONIE")
Set Plage1 = .Range("A2:A" & .Range("A2000").End(xlUp).Row)
End With
ComboBox1.List = Plage1.Value
End Sub
...

=> mapomme, J'ai essayé ta solution : elle fonctionne

Merci beaucoup à tous les deux ( et aussi à juvaxe ;-) )pour le temps que vous m'avez accordé

A bientôt
 

Staple1600

XLDnaute Barbatruc
Re

=>dupuy.mathias
Désolé, j'ai fait une erreur de copier/coller
La procédure Activate doit sur la feuille OUTIL
(en clair sur la feuille où sont les ComboBox1)
Donc le code complet serait
VB:
Private Sub Worksheet_Activate()
Dim f As Worksheet: Set f = Sheets("TELEPHONIE")
Application.ScreenUpdating = False
ComboBox1.Value = Null
ComboBox1.List = f.Range(f.[A2], f.Cells(Rows.Count, 1).End(3)).Value
ComboBox2.Value = Null
ComboBox2.List = f.Range(f.[B2], f.Cells(Rows.Count, 2).End(3)).Value
ComboBox3.Value = Null
ComboBox3.List = f.Range(f.[H2], f.Cells(Rows.Count, 8).End(3)).Value
Application.ScreenUpdating = True
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

De rien pour le complément.
Mais est-ce que tu as testé la proposition du message#11?
Car elle prends moins de place que le code VBA du message#1, non ?

NB: Oui, j'avais oublié de précisé que pour tester, il faut supprimer (ou mettre en commentaire) le code qu'on peut lire dans ton message#1
 

Discussions similaires

Réponses
1
Affichages
159
Réponses
6
Affichages
122

Statistiques des forums

Discussions
312 084
Messages
2 085 192
Membres
102 809
dernier inscrit
Sandrine83