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 :
J'ai mis les 2 tests, avec des lettres ou des chiffres en dernier caractère, dans le fichier.
Merci de votre aide.
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 iD'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 jPour 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 ?