Probleme de ubound list

Bonjour le forum,

Je comprends rien à ces listes en array capricieuses,

Je n'arrive pas à passer à la classe suivante avec des listes de classes avec des lettres, de la CE1B à la CEIC.

Avec des chiffres çà le fait, mais je peux plus changer.

A moins que vous m'aidiez

Voilà ce que çà me donne :

image

J'ai mis les 2 tests, avec des lettres ou des chiffres en dernier caractère, dans le fichier.

Merci de votre aide.

17forum.xltm (29.50 Ko)

Bonjour,

ton erreur est là :
If i = 141 And Mid(ws5.Cells(i + 1, 1).Value, 1, 4) = list1(j) & list2(k + 1) Then MsgBox "ok"
k=2, +1=3 et list2(0 to 2), à toi de voir pourquoi

N'utilise pas de Goto, ça rend le code difficile voir impossible à suivre. On peut toujours s'en passer.
Et possiblement des erreurs de structure.
On ne doit utiliser Goto que dans un traitement d'erreur On Error Goto ...

Pour sortir d'un For tu as Exit For.
Ex :

    Dim b_ok2 As Boolean, i As Long, j As Long
    Dim test1, test2, ok ' variables bidons représentant un test pour l'exemple
    For i = 0 To 10
        If test1 = ok Then Exit Sub ' sortie boucle i
        For j = 0 To 10
            If test2 = ok Then b_ok2 = True: Exit For ' sortie boucle j + flag b_ok2 pour sortie boucle i
        Next j
        If b_ok2 Then Exit For ' sortie boucle j
    Next i

D'ailleurs, plus d'erreur quand on l'applique à ton code.
Apprend à déboguer en faisant du pas à pas avec F8, en mettant le curseur sur une variable ou sur une expression sélectionnée pour voir leur valeur.
Ajoute et utilise la fenêtre Espions. Il suffit de glisser une variable ou un expression dedans pour tout savoir dessus.
eric

Bonjour eric,

Merci pour ta réponse.

D'abord j'essayais de trier une liste déjà triée, donc je me trompais de probléme.

Mais ce code permet de trier des classes avec le dernier caractère comme chiffre ou lettre.

        '"""""""""""""""""""""""""""""""""""""
        'tri classe par classe 
        x = 2
        For j = 0 To UBound(list1)
            For k = 0 To UBound(list2)
                For i = 2 To dico1.Count + 1
                    'On Error Resume Next
                    'si derniere classe 3 , 1ere classe niveau d'aprés
                    If Mid(ws5.Cells(i, 1).Value, 1, 5) = list1(j) & list2(k) Then
                        ws5.Cells(x, 2).Value = ws5.Cells(i, 1).Value
                        x = x + 1
                    End If
                Next i
            Next k
        Next j

Pour la gestion des erreurs, voici mes remarques :

- Exit for ne permet pas de rester dans une boucle, et un goto est parfois plus fort, voir dans cet exemple. La variable booléenne c'est mieux.

Je me sers du goto à la place de l'exit sub, çà marche trés bien pour aller à la fin de la macro et respecter le Application.ScreenUpdating = True

Le F8, c'est joli en jaune, je découvre mais çà ne donne pas de valeur, apprends à expliquer un peu mieux, même chose pour la fenêtre espions.

Bonne nuit

Bon, bah continue comme ça alors

apprends à expliquer un peu mieux

Tu as besoin de mots clés pour ta recherche google sur débogage vba ?

Rechercher des sujets similaires à "probleme ubound list"