C'est un problème classique de construction d'objets, tu viens de révéler un bug dans Excel. (Mais en fait, c'est plus un choix délibéré qu'un bug.)
un classeur est composé de feuilles, de fiches et de modules. Lorsqu'il se construit (au sens
programmation objet) en mémoire à partir du fichier XLS, il construit aussi ses feuilles, ses fiches et ses modules. Selon l'ordre dans lequel cela est fait - et tu n'as pas la main la dessus, certaines méthodes (constructeurs) sont appelées avant ou après d'autres. Dans ces constructeurs, il existe ce genre de code :
Sub WorkBook_Constructor
Construire ( Moi )
Construire ( MesFeuilles )
Construire ( MesFiches )
Construire ( MesModules )
If Exists ( Workbook_Open ) Then Workbook_Open
End Sub
Le code de construction d'une feuille :
Sub WorkBook_Constructor
Construire ( Moi )
Construire ( MesCellules )
If Exists ( WorkSheet_Open ) Then WorkSheet_Open
End Sub
Si pour une raison x ou y, l'ordre des appels n'est pas celui-là, si les fiches sont construites avant les feuilles, avant les cellules, si l'appel des xxxxx_Open n'est pas dans cette ordre, ou que sais-je encore, tu peux te retrouver dans une situation où l'un n'est pas créer alors qu'on appelle déjà.
De plus, en forçant l'affichage d'une fiche, tu demandes peut-être à ce que la fiche soit créée avant la feuille mais il faut que la feuille soit créée avant pour que ton textbox soit rempli
(Tout ceci ne vient pas du code source d'Excel - je ne l'ai pas à disposition
![;) ;)]()
- mais d'un avis personnel)
As-tu compris un seul mot de ce que je viens de dire ?
Non ?! Ce n'est pas grave. Je te propose une solution :
Sub Workbook_Open()
UserForm1.TextBox1.ControlSource = "Feuil1!A2"
UserForm1.Show
End Sub