Avec USF Multipage, pas (trop) de problèmes pour piloter le classeur,
- On change d'onglet sur le Multipage et la feuille concernée est activée.
- mais...
Je me demandais s'il était possible de faire changer l'onglet du multipage si l'utilisateur décide de changer de feuille "manuellement"?
(je n'ai pas joint le fichier, car ce dernier est très volumineux et contient beaucoup de données confidentielles, mais si c'est nécessaire, je l'épure volontiers)
Sub USF()
Dim a, i&
a = Array("Feuil1", "Feuil2", "Feuil3") 'CodeNames
i = Application.Match(ActiveSheet.CodeName, a, 0)
If IsNumeric(i) Then UserForm1.MultiPage1.Value = i - 1
UserForm1.Show 0 'non modal
End Sub
Et dans ThisWorkbook :
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim a, i As Variant
a = Array("Feuil1", "Feuil2", "Feuil3") 'CodeNames
i = Application.Match(Sh.CodeName, a, 0)
If IsNumeric(i) Then UserForm1.MultiPage1.Value = i - 1
End Sub
'sur chaques feuilles ecrit l'index de la page de 0 à 2 et insère le code
Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
Application.Goto Range("a1")
UserForm1.Show
UserForm1.MultiPage1.Value = ActiveCell
End Sub
Et pour rajouter une page avec nouvelle feuille, en prenant l'exemple donné par job,
Code:
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim a, i As Variant
Application.ScreenUpdating = False
a = Array(Sh.CodeName) 'CodeNames
i = Application.Match(Sh.CodeName, a, 0)
If IsNumeric(i) Then UserForm1.MultiPage1.Pages.Add
End Sub
Bonsoir Job75, le forum,
APrès une panne de chauffage, une panne de courant, ... me revoilà (tendu)
Ton code fonctionne bien je te remercie.
Un doute subsiste, je dois cliquer deux fois sur l'onglet de page, le premier me renvoie automatiquement à ma "Feuil2" qui est la première de la série.
Une idée ?
@++
Lio
En ce qui concerne l'exeple de job75; tu ajoute un module standard et tu y met la Sub(), dans la feuille de Thisworkbook tu met le code correspondant. Tu ajoute un bouton sur la première feuille et tu fais appel à la Sub().
Dans les propriétés du Formulaire, tu met ShowModal à False. dans les deux macros, tu peux ajouter Application.ScreenUpdating = False, après Dim a et i .
Un doute subsiste, je dois cliquer deux fois sur l'onglet de page, le premier me renvoie automatiquement à ma "Feuil2" qui est la première de la série.
Une idée ?
En effet nous n'avons pas encore parlé du code de l'UserForm :
Code:
Private Sub MultiPage1_Change()
Static flag As Boolean
If flag Then Exit Sub
flag = True
Select Case MultiPage1.Value
Case 0: Feuil1.Activate
Case 1: Feuil2.Activate
Case 2: Feuil3.Activate
End Select
flag = False
End Sub
L'ordre des feuilles doit être le même que celui des "Array" a que que j'ai mis dans les autres macros.
<Bonsoir Job,
Merci pour ton dévouement et ta patience,
je suis contraint de regarder ça demain, le chauffage ne fonctionne toujours qu'a moitié.
12°C dans la pièce, c'est pas terrible pour bosser (et les moufles sur le clavier non plus )
Bonjour Job75, le forum,
19°C au salon, je peux pianoter sans grelotter...
Ca fonctionne à merveille, je te remercie. Je n'ai pas encore compris la finesse de toutes les subtilités de ton code, mais j'étudie et j'apprends.
Merci Beaucoup
A plus tard
Lio
J'avais introduit la variable flag par précaution mais en re-testant il semble bien qu'elle soit inutile.
Si je remplace l'instruction If flag Then Exit Sub par If flag Then MsgBox "a": Exit Sub
la MsgBox n'apparaît jamais chez moi sur Excel 2013, même si l'on se trompe dans l'ordre des feuilles.
Donc a priori il suffit d'utiliser :
Code:
Private Sub MultiPage1_Change()
Select Case MultiPage1.Value
Case 0: Feuil1.Activate
Case 1: Feuil2.Activate
Case 2: Feuil3.Activate
End Select
End Sub
Edit : fichier joint pour ceux qui veulent tester.
à tester. Mettre le formulaire en showmodal false dans les propriétés.
Code:
Option Explicit
Dim flag As Boolean, x
Private Sub MultiPage1_Change()
x = MultiPage1.SelectedItem.Index + 1
flag = True
If flag = True Then
Select Case MultiPage1.Value
Case 0: Feuil1.Activate
Case 1: Feuil2.Activate
Case 2: Feuil3.Activate
End Select
MsgBox "Feuil" & x
Else
flag = False
End If
End Sub
avec MsgBox "a" resultat = a. J'ai aussi effectué un test avec 6 feuilles; test concluant.