Excel VBA : L'indice n'appartient pas à la selection

Bonjour tous le monde,

Débutant en VB, j'ai un petit souci. Désolé pour la longueur. J'ai regardé, mais pas trouvé de solution qui correspond à mon problème.

J'ai deux bout de code qui fonctionne très bien séparément mais quand je les assemble l'erreur apparaît.

J'ai un UserForm pour créer des dossiers.

Tout d'abord à l'ouverture du UserForm je charge mes premiers dossier qui se stock dans ma combox1 pas de problème.

Mais le problème arrive quand je sélectionne mon répertoire, car la macro regarde les dossiers présent et normalement doit me mettre les numéros de dossier libre.

Les dossiers que la macro regarde sont du style 00_XXX, 01_XXX, etc.. Mais le premier dossier rencontrer n'est pas forcement le 00.

Le premier bout de macro est le suivant qui vas lire dans le dossier sélectionner.

Public Sub ComboBox1_Click()
Dim Mypath As String
Dim MyName As String
Dim Test1 As Boolean
Dim NomDossier As String

Parent = Mid(ThisWorkbook.Path, 1, InStrRev(ThisWorkbook.Path, "\") - 1)

ComboBox2.Clear

 Mypath = Parent & "\projets\" & ComboBox1 & "\"   ' Définit le chemin d'accès.
 MyName = Dir(Mypath, vbDirectory)    ' Extrait la première entrée.
  Do While MyName <> ""    ' Commence la boucle.
        ' Ignore le dossier courant et le dossier contenant le dossier courant.
        If MyName <> "." And MyName <> ".." Then ' Utilise une comparaison au niveau du bit pour vérifier que MyName est un dossier.
            If (GetAttr(Mypath & MyName) And vbDirectory) = vbDirectory Then
                'Me.txt_folder.AddItem MyName    ' Affiche l'entrée uniquement si elle représente un dossier
                    NomDossier = Left(MyName, 2)
                  'If IsNumeric(NomDossier) Then
                       MsgBox NomDossier
                    'End If
            End If
MyName = Dir    ' Extrait l'entrée suivante.
  Loop

L'autre bout

Private Sub test_TableauBase()
Dim TableauBase() As String
Dim TableauDossier() As String
Dim TableauAffiche() As String
Dim j As Integer
Dim i As Integer
Dim ii As Integer
Dim jj As Integer
Dim Test1 As Boolean
Dim MyName As String
Dim Texte1 As String

jj = -1
jj = jj + 1

MyName = "01_XXX"
Texte1 = Left(MyName, 2)
If IsNumeric(Texte1) Then
'ReDim Preserve TableauDossier(0 To 1)
ReDim Preserve TableauDossier(0 To jj)
TableauDossier(jj) = Texte1
End If
'MsgBox MyName
'MsgBox Texte1

i = 3
ii = -1
ReDim TableauBase(0 To i)

For j = 0 To i
    If j < 10 Then
        TableauBase(j) = "0" & CStr(j)
    Else
        TableauBase(j) = CStr(j)
    End If

   'ReDim TableauDossier(0 To i)
    Test1 = True
    For i = 0 To i
        If TableauDossier(jj) = TableauBase(j) Then
       ' If TableauDossier(i) = TableauBase(j) Then
            Test1 = False
            Exit For
        End If
    Next i
    If Test1 = True Then
        ii = ii + 1
        ReDim Preserve TableauAffiche(0 To ii)
        TableauAffiche(ii) = TableauBase(j)
    End If
Next j

For j = 0 To UBound(TableauAffiche)
MsgBox TableauAffiche(j)  '==> Remplacement par UserForm1.ComboBox2.AddItem TableauAffiche(j)
Next j

End Sub

Mon but est de réussir à mettre le NomDossier dans le TableauDossier et à mettre les numéros de dossier libre dans la combox2.

Donc Voici le code qui me pose problème

Public Sub ComboBox1_Click()
Dim Mypath As String
Dim MyName As String
Dim TableauBase() As Variant
Dim TableauDossier() As Variant
Dim TableauAffiche() As Variant
Dim j As Integer
Dim i As Integer
Dim ii As Integer
Dim jj As Integer
Dim Test1 As Boolean
Dim NomDossier As String

Parent = Mid(ThisWorkbook.Path, 1, InStrRev(ThisWorkbook.Path, "\") - 1)

ComboBox2.Clear
jj = 0
 i = 15
ii = -1

 Mypath = Parent & "\projets\" & ComboBox1 & "\"   ' Définit le chemin d'accès.
 MyName = Dir(Mypath, vbDirectory)    ' Extrait la première entrée.
  Do While MyName <> ""    ' Commence la boucle.
        ' Ignore le dossier courant et le dossier contenant le dossier courant.
        If MyName <> "." And MyName <> ".." Then ' Utilise une comparaison au niveau du bit pour vérifier que MyName est un dossier.
            If (GetAttr(Mypath & MyName) And vbDirectory) = vbDirectory Then
                'Me.txt_folder.AddItem MyName    ' Affiche l'entrée uniquement si elle représente un dossier
                    NomDossier = Left(MyName, 2)
                    'If IsNumeric(NomDossier) Then
                        ReDim Preserve TableauDossier(jj)
                        TableauDossier(jj) = NomDossier
                         jj = jj + 1
                    'End If
            End If

    ReDim TableauBase(0 To i)

    For j = 0 To i
        If j < 10 Then
            TableauBase(j) = "0" & CStr(j)
        Else
            TableauBase(j) = CStr(j)
        End If
                Test1 = True
        For i = 0 To i
            If TableauDossier(jj) = TableauBase(j) Then ' <======= Ligne posant problème 
                 Test1 = False
                Exit For
            End If
        Next i
         If Test1 = True Then
            ii = ii + 1
            ReDim Preserve TableauAffiche(0 To ii)
            TableauAffiche(ii) = TableauBase(j)
        End If
    Next j
  End If
     MyName = Dir    ' Extrait l'entrée suivante.
  Loop
    If jj = 0 Then
    ReDim Preserve TableauDossier(jj)
    TableauDossier(jj) = "--Aucun Dossier--"
    Else
    End If

For j = 0 To UBound(TableauAffiche)
UserForm1.ComboBox2.AddItem TableauAffiche(j)
Next j

End Sub

Merci de votre aide. En m'expliquant pourquoi ça ne fonctionne pas.

Le fichier joint est un extrait de ce que j'ai fait. Il y a l'UserForm et certains bout de code

4classeur1.xlsm (24.94 Ko)

Bonjour,

P.S. si quelqu'un pouvais mettre en format code je en sais pas comment faire, je suis nouveau sur le forum. Merci

appui sur le bouton "Édition de ton message"

excel pratique bouton edition de message

puis, sélectionne tout le code et appui sur le bouton </> (4ème bouton en partant de la gauche)

et si possible,

fichier excel

Je viens de modifier et de mettre le fichier.

Rechercher des sujets similaires à "vba indice appartient pas selection"