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
Je viens de modifier et de mettre le fichier.