Erreur d’exécution 9 Indice n'appartient pas à la selection

En fait,

Steelson, tu n'as pas besoin, car il n'y aura pas toujours 19 pages à afficher. Il peut selon le compte avoir 8,11,13,15,16....

Et aussi c'est une maquette (maquette d'origine) qui comporte d'autres macro (de traitements de données).

L'erreur que j'ai faite dès le départ c'est d'avoir fait ces macros avec le nom des feuilles "en dur".

Du coup je continue dans la même logique car même si les macros d'impression comptent "les onglets (de 1.....19) les autres qui concernent le traitements (calcul et le remplissage) sont en dur donc ça revient au même: on ne pourra pas pour l'instant pas renommer les feuilles.

Donc ne t'embête pas à ce niveau...

ok, je le ferai sans doute un jour pour moi

ce qui est curieux, c'est que ta listbox1 cachée fait justement ce travail !!

Private Sub UserForm_Initialize()
  Dim dLig As Long, Lig As Long
  ' Effacer le contenu de la ListBox avant de la remplir
  Me.ListBox1.Clear
  '
  With ThisWorkbook.Sheets("Params")
    dLig = .Range("A" & Rows.Count).End(xlUp).Row
    For Lig = 2 To dLig
      Me.ListBox1.AddItem .Range("A" & Lig).Value
    Next Lig
  End With
End Sub

donc tu étais pas loin de la solution même si tu voulais utiliser des checkboxes dont il aurait juste fallu changer le caption !

Ton code peut se résumer à ceci (j'ai laissé params mais ce n'est pas utile dans la macro)

Private Sub CommandButton3_Click()
Dim sheetArray() As String
Dim I As Long, k As Long
    For I = 1 To 19
        If Me.Controls("CheckBox" & I) Then
            ReDim Preserve sheetArray(k)
            sheetArray(k) = Me.Controls("CheckBox" & I).Caption
            k = k + 1
        End If
    Next I
    UserForm1.Hide
    If k > 0 Then Sheets(sheetArray()).PrintPreview
    ActiveWindow.SelectedSheets.PrintPreview
End Sub

avec

Private Sub UserForm_Initialize()
  Dim Lig As Long, num As Variant, sh As Worksheet
  ' Effacer le contenu de la ListBox avant de la remplir
  ' Me.ListBox1.Clear
  Lig = 1
    For Each sh In Worksheets
        num = Replace(Left(sh.Name, 2), "_", "")
        If IsNumeric(num) Then
            ' Me.ListBox1.AddItem sh.Name
            Me.Controls("CheckBox" & Lig).Caption = sh.Name
            Lig = Lig + 1
        End If
    Next
End Sub

Steelson,

Merci beaucoup pour ton aide. Tu m'a été d'une grande aide pour finaliser mon travail.

Vanessa.

Rechercher des sujets similaires à "erreur execution indice appartient pas selection"