OVH Cloud OVH Cloud

BOITE de DIALOGUE pour ACCES FEUILLE

1 réponse
Avatar
S3com
Bonjour,

j'ai trouv=E9 ce code g=E9nial sur le net (merci a eux), le seul hic et
que j'ai plus de 40 feuilles.
Et donc la boite qui s'affiche ne comprend qu'une colonne . J'aimerais
qu'il y est plusieur colonnes afin qu'il puisse avoir plus de 100
feuilles.

MErci a tous

Sub AccesSection()
'code diffus=E9 par Ren=E9 Roy, mpfe
' Permet l'affichage d'une bo=EEte de dialogue pour l'acc=E8s
' =E0 la feuille de son choix
Dim i As Integer
Dim TopPos As Integer
Dim SheetCount As Integer
Dim PrintDlg As DialogSheet
Dim CurrentSheet, FeuilleD=E9part As Worksheet
Dim cb As OptionButton
Application.ScreenUpdating =3D False

' Ajoute une feuille de dialogue temporaire
Set CurrentSheet =3D ActiveSheet
Set FeuilleD=E9part =3D ActiveSheet
Set PrintDlg =3D ActiveWorkbook.DialogSheets.Add
PrintDlg.Visible =3D xlSheetHidden

SheetCount =3D 0

' Ajoute les boutons d'option
TopPos =3D 40
For i =3D 1 To ActiveWorkbook.Worksheets.Count
Set CurrentSheet =3D ActiveWorkbook.Worksheets(i)
' Ne tient pas compte des feuilles vide ou masqu=E9es
If Application.CountA(CurrentSheet.Cells) <> 0 And _
CurrentSheet.Visible Then
SheetCount =3D SheetCount + 1
PrintDlg.OptionButtons.Add 78, TopPos, 150, 16.5
PrintDlg.OptionButtons(SheetCount).Text =3D _
CurrentSheet.Name
If CurrentSheet.Name =3D FeuilleD=E9part.Name Then _
PrintDlg.OptionButtons(SheetCount).Value =3D xlOn
TopPos =3D TopPos + 13
End If
Next i

' Positionne les boutons OK et Annuler
PrintDlg.Buttons.Left =3D 240

' Dimensionne la hauteur, la largeur et le titre de la bte de
dialogue
With PrintDlg.DialogFrame
.Height =3D Application.Max _
(68, PrintDlg.DialogFrame.Top + TopPos - 34)
.Width =3D 230
.Caption =3D "A quelle feuille souhaitez-vous acc=E9der ? "
End With

' Change l'ordre de tabulation des boutons OK et Annuler
' afin de donner le focus au premier bouton d'option
PrintDlg.Buttons("Button 2").BringToFront
PrintDlg.Buttons("Button 3").BringToFront

' Affiche la bo=EEte de dialogue
FeuilleD=E9part.Activate
Application.ScreenUpdating =3D True
If SheetCount <> 0 Then
If PrintDlg.Show Then
Application.ScreenUpdating =3D False
For i =3D 1 To SheetCount
If PrintDlg.OptionButtons(i).Value =3D xlOn Then
Worksheets(PrintDlg.OptionButtons(i).Caption).Activate
'autre code selon besoin
End If
Next i
End If
Else
MsgBox "Toutes les feuilles sont vides."
End If

' Supprime la feuille de dialogue temporaire (sans message
d'avertissement)
Application.DisplayAlerts =3D False
PrintDlg.Delete
End Sub

1 réponse

Avatar
isabelle
bonjour S3com,

je l'ai modifié comme ça,

Sub AccesSection()
'code diffusé par René Roy, mpfe
' Permet l'affichage d'une boîte de dialogue pour l'accès
' à la feuille de son choix
Dim i As Integer
Dim TopPos As Integer
Dim SheetCount As Integer
Dim PrintDlg As DialogSheet
Dim CurrentSheet, FeuilleDépart As Worksheet
Dim cb As OptionButton
Application.ScreenUpdating = False

' Ajoute une feuille de dialogue temporaire
Set CurrentSheet = ActiveSheet
Set FeuilleDépart = ActiveSheet
Set PrintDlg = ActiveWorkbook.DialogSheets.Add
PrintDlg.Visible = xlSheetHidden

SheetCount = 0

' Ajoute les boutons d'option
TopPos = 40
colonne = 78
For i = 1 To ActiveWorkbook.Worksheets.Count
x = x + 1 ' x servira à incrémenter le nombre de colonne au besoin
Set CurrentSheet = ActiveWorkbook.Worksheets(i)
' Ne tient pas compte des feuilles vide ou masquées
If Application.CountA(CurrentSheet.Cells) <> 0 And _
CurrentSheet.Visible Then
SheetCount = SheetCount + 1
PrintDlg.OptionButtons.Add colonne, TopPos, 150, 16.5
PrintDlg.OptionButtons(SheetCount).Text = _
CurrentSheet.Name

If CurrentSheet.Name = FeuilleDépart.Name Or Not x >= 40 Then _
PrintDlg.OptionButtons(SheetCount).Value = xlOn
TopPos = TopPos + 13
End If

' vérifie le nombre de bouton sur la colonne et
' incrémente le nombre de colonne au besoin

If x >= 20 Then TopPos = 40: colonne = colonne + 60: x = 0

Next i

' Positionne les boutons OK et Annuler
PrintDlg.Buttons.Left = (150 + (ActiveWorkbook.Worksheets.Count / 20) * 50)

' Dimensionne la hauteur, la largeur et le titre de la bte de
'dialogue
With PrintDlg.DialogFrame
.Height = 300
.Width = 150 + (ActiveWorkbook.Worksheets.Count / 20) * 50
.Caption = "A quelle feuille souhaitez-vous accéder ? "
End With

' Change l'ordre de tabulation des boutons OK et Annuler
' afin de donner le focus au premier bouton d'option
PrintDlg.Buttons("Button 2").BringToFront
PrintDlg.Buttons("Button 3").BringToFront

' Affiche la boîte de dialogue
FeuilleDépart.Activate
Application.ScreenUpdating = True
If SheetCount <> 0 Then
If PrintDlg.Show Then
Application.ScreenUpdating = False
For i = 1 To SheetCount
If PrintDlg.OptionButtons(i).Value = xlOn Then
Worksheets(PrintDlg.OptionButtons(i).Caption).Activate
'autre code selon besoin
End If
Next i
End If
Else
MsgBox "Toutes les feuilles sont vides."
End If

' Supprime la feuille de dialogue temporaire (sans message
'd 'avertissement)
Application.DisplayAlerts = False
PrintDlg.Delete
End Sub



isabelle


Bonjour,

j'ai trouvé ce code génial sur le net (merci a eux), le seul hic et
que j'ai plus de 40 feuilles.
Et donc la boite qui s'affiche ne comprend qu'une colonne . J'aimerais
qu'il y est plusieur colonnes afin qu'il puisse avoir plus de 100
feuilles.

MErci a tous