[excel vba] impossible de charger un userform

Fermé
vb - 21 juin 2007 à 21:10
 vb - 21 juin 2007 à 22:14
Bonjour,

j'ai créer un UserForm et tout fonctionnait. Puis, tout d'un coup, à chaque fois que je tente de le loader ou de l'afficher, je reçois le message 'Erreur d'éxécution '9': L'indice n'appartient pas à la sélection'.

Même si j'essaie en appuyant sur F5 alors que je suis dans la fenêtre du userform dans visual basic, je reçois le même message.

Je n'ai qu'un classeur d'ouvert et un seul userform.

merci d'avance,

vb
A voir également:

1 réponse

mise à jour:

le debug de vba indique toujours la ligne fautive à "Load UserFormASSIGN"

Cependant, en suivant pas à pas, j'ai réaliser qu'il entre dans la macro Initialize du userform et bloque toujours à la même ligne (NBAssign = 1) qui ne pourrait être plus simple...

Private Sub UserForm_Initialize()

Sheets("bd").Activate

i = 1
Do While Cells(1, i) <> ""
    If Cells(1, i) = "ASSIGNATIO" Then Cass = i
    If Cells(1, i) = "LIGNE" Then Cligne = i
    If Cells(1, i) = "DIRECTION" Then Cdir = i
    If Cells(1, i) = "TRACE" Then Ctrace = i
    If Cells(1, i) = "MIN_POSITI" Then Cpos = i
    If Cells(1, i) = "LIEU" Then Clieu = i
    If Cells(1, i) = "LIEU_PR_EC" Then Clieupr = i
    i = i + 1
Loop

Dim ListeAssign(100)
'liste de toutes les assignations
Dim ListePosAss(1000, 5)
'liste des positions par assignation
'0: assignation
'1: ligne
'2: tracé
'3: direction
'4: lieu
'5: lieu pr
'6: position min
NBListe = 1
ListePosAss(1, 0) = Cells(2, Cass)
ListePosAss(1, 1) = Cells(2, Cligne)
ListePosAss(1, 2) = Cells(2, Ctrace)
ListePosAss(1, 3) = Cells(2, Cdir)
ListePosAss(1, 4) = Cells(2, Clieu)
ListePosAss(1, 5) = Cells(2, Clieupr)
ListePosAss(1, 6) = Cells(2, Cpos)
NBAssign = 1  '*********************ICI************
ListeAssign(1) = Cells(2, Cass)
i = 3
Do While Cells(i, Cass) <> ""

    Add = 1
    For j = 1 To NBAssign
        If Cells(i, Cass) = ListeAssign(j) Then Add = 0
    Next j
    If Add = 1 Then
        NBAssign = NBAssign + 1
        ListeAssign(NBAssign) = Cells(i, Cass)
    End If
    
    Add = 1
    For j = 1 To NBListe
        If (Cells(i, Cass) = ListePosAss(j, 0) And _
            Cells(i, Cligne) = ListePosAss(j, 1) And _
            Cells(i, Ctrace) = ListePosAss(j, 2) And _
            Cells(i, Cdir) = ListePosAss(j, 3) And _
            Cells(i, Clieu) = ListePosAss(j, 4)) Or _
            Cells(i, Clieupr) = "" Then Add = 0
    Next j
    If Add = 1 Then
        NBListe = NBListe + 1
        ListePosAss(1, 0) = Cells(i, Cass)
        ListePosAss(1, 1) = Cells(i, Cligne)
        ListePosAss(1, 2) = Cells(i, Ctrace)
        ListePosAss(1, 3) = Cells(i, Cdir)
        ListePosAss(1, 4) = Cells(i, Clieu)
        ListePosAss(1, 5) = Cells(i, Clieupr)
        ListePosAss(1, 6) = Cells(i, Cpos)
    End If
    
    i = i + 1

Loop

For j = 1 To NBAssign
    Me.ComboASSIGN.AddItem ListeAssign(j)
    Me.ListDATA.AddItem ListeAssign(j)
Next j

Me.ComboASSIGN.Value = ListeAssign(NBAssign)

End Sub

0
désolé pour les trois messages consécutifs, ce dvrait être mon dernier.

en fait, le code plante toujours à la même ligne peut importe son contenu...
0
arrgh... j'ai fini par trouver. le débug de vb me faisait chercher à la mauvaise place.

la ligne "Dim ListePosAss(1000, 5)" aurait du être "Dim ListePosAss(1000, 6)"

merci, ca ma fait du bien d'en parler :)
0