[excel vba] impossible de charger un userform

vb -  
 vb -
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
Configuration: Windows XP
Internet Explorer 6.0

1 réponse

  1. vb
     
    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
    1. vb
       
      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
      1. vb > vb
         
        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