[VBA] erreur de dépassement

Fermé
Grace - 11 juil. 2008 à 11:03
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 11 juil. 2008 à 13:58
Bonjour,

J'ai créer un formulaire qui puisse me permettre de récupérer des données d'un classeur Excel, suite à la saisie d'un numéro dans la textbox7.

J'ai créer mon programme mais quand je l'exécute il m'affiche une erreur "dépassement de capacité". Je ne comprends pas mon erreur.

Le programme est le suivant :

Private Sub recap_Click()

Dim k As Integer
k = 4

If TextBox7.Value <> "" Then
k = 4

Do While Cells(k, 1) <> TextBox7

If Cells(k, 1) = TextBox7 Then
Worksheets("registre").Select
Worksheets("registre").Rows(k).Select
TextBox8.Value = Sheets("Registre").Cell(k, 2)
TextBox9.Value = Sheets("Registre").Cell(k, 3)
TextBox10.Value = Sheets("Registre").Cell(k, 4)
TextBox11.Value = Sheets("Registre").Cell(k, 5)
TextBox12.Value = Sheets("Registre").Cell(k, 6)
TextBox13.Value = Sheets("Registre").Cell(k, 11)
TextBox14.Value = Sheets("Registre").Cell(k, 12)
TextBox15.Value = Sheets("Registre").Cell(k, 9)
TextBox16.Value = Sheets("Registre").Cell(k, 10)

Worksheets("registre").Select

End If
k = k + 1
Loop

End If
End Sub


La partie en gras c'est l'endroit ou il m'indique qu'il y a une erreur (quand je clique sur débogage)

je vous remercie par avance si vous pouvez m'aider.

Bonne journée à vous

Grace

4 réponses

eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 7 235
11 juil. 2008 à 11:16
Bonjour,

essaie avec Dim k As long

eric
0
Merci beaucoup, il ne m'affiche plus d'erreurs!

Private Sub recap_Click()

TextBox7 = eti

Worksheets("registre").Select
Dim k As Long
k = 4

If TextBox7.Value <> "" Then
k = 4

Do While Cells(k, 1) <> eti

If Cells(k, 1) = eti Then
Worksheets("registre").Select
Worksheets("registre").Rows(k).Select
TextBox8.Value = Sheets("Registre").Cell(k, 2)
TextBox9.Value = Sheets("Registre").Cell(k, 3)
TextBox10.Value = Sheets("Registre").Cell(k, 4)
TextBox11.Value = Sheets("Registre").Cell(k, 5)
TextBox12.Value = Sheets("Registre").Cell(k, 6)
TextBox13.Value = Sheets("Registre").Cell(k, 11)
TextBox14.Value = Sheets("Registre").Cell(k, 12)
TextBox15.Value = Sheets("Registre").Cell(k, 9)
TextBox16.Value = Sheets("Registre").Cell(k, 10)

Worksheets("registre").Select

End If
k = k + 1
Loop

End If
End Sub


Maintenant quand je clique sur "récap" il me supprime ce que j'ai saisie dans textBox7!!!! Je ne comprend pas!
Merci d'avance
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204 > Grace
11 juil. 2008 à 11:25
tu l'effaces là :

TextBox7 = eti

;o)
0
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161
11 juil. 2008 à 11:18
Bonjour,

déjà je simplifierais un peu le code (sans garantie que cela solutionne le pb)

Private Sub recap_Click()

Dim k As Integer
k = 4

If TextBox7.Value <> "" Then
k = 3

Do

k = k + 1

If Cells(k, 1) = TextBox7 Then
TextBox8.Value = Sheets("Registre").Cell(k, 2)
TextBox9.Value = Sheets("Registre").Cell(k, 3)
TextBox10.Value = Sheets("Registre").Cell(k, 4)
TextBox11.Value = Sheets("Registre").Cell(k, 5)
TextBox12.Value = Sheets("Registre").Cell(k, 6)
TextBox13.Value = Sheets("Registre").Cell(k, 11)
TextBox14.Value = Sheets("Registre").Cell(k, 12)
TextBox15.Value = Sheets("Registre").Cell(k, 9)
TextBox16.Value = Sheets("Registre").Cell(k, 10)
End If

Loop While Cells(k, 1) <> TextBox7

End If
End Sub
0
ton programme ne marche pas! dsl :-s
Il me met toujours une erreur de depassement!
Pourtant le numéro que je saisie dans le textebo7 existe forcement!
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204 > Grace
11 juil. 2008 à 11:32
alors il faut faire un exit sub quand il est trouvé, sinon la boucle continue ...

...
TextBox16.Value = Sheets("Registre").Cell(k, 10)
Exit Sub
End If


;o)
0
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161 > Grace
11 juil. 2008 à 11:33
je sais que c'est moins propre, mais je ne declarerais pas k
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204 > zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012
11 juil. 2008 à 11:35
En tout cas pas en integer ... mais en long

;o)
0
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161 > Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016
11 juil. 2008 à 11:35
pas d'accord car While Cells(k, 1) <> TextBox7 est faux (puisque valeur trouvée) donc sort de la boucle ;-)
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
11 juil. 2008 à 11:19
Bonjour,

Je ne comprends pas pourquoi ça :
Worksheets("registre").Select
Worksheets("registre").Rows(k).Select
....
TextBox8.Value = Sheets("Registre").Cell(k, 2)
Worksheets("registre").Select


Ensuite pour le dépassement de capacité, tu parcours toutes les cellules différentes de la valeur contenue dans le textbox7. C'est à dire que tu testes même les cellules vides de la colonne jusqu'à la 65536 ème cellule. Si tu déclares k en type long, quand tu arrives à k= 65536 + 1, tu es en dépacement de capacité de la feuille Excel. Si k est de type entier (integer) tu es en dépassement à 32768 ...

;o)
0
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161
11 juil. 2008 à 11:21
effectivement, la valeur doit etre trouvée sinon ... la macro sort en erreur
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
11 juil. 2008 à 13:58
Bonjour le fil...
quand la valeur est trouvée.... Sort de la boucle et ne fait jamais le transfert.
Sheets("Registre").Cells(k, 2)... il faut un S à Cell >> cells(x,y)

Ta macro testée.
Private Sub recap_Click()
Dim eti As Long
Dim k As Long
    If TextBox7.Value = "" Then Exit Sub
    eti = TextBox7.Value
    With Sheets("Registre")
        For k = 1 To .Range("A1").SpecialCells(xlCellTypeLastCell).Row
            If .Cells(k, 1) = eti Then
                TextBox8.Value = .Cells(k, 2)
                TextBox9.Value = .Cells(k, 3)
                TextBox10.Value = .Cells(k, 4)
                TextBox11.Value = .Cells(k, 5)
                TextBox12.Value = .Cells(k, 6)
                TextBox13.Value = .Cells(k, 11)
                TextBox14.Value = .Cells(k, 12)
                TextBox15.Value = .Cells(k, 9)
                TextBox16.Value = .Cells(k, 10)
                Exit Sub
            End If
        Next k
    End With
End Sub

A+
EDIT: j'avais pas lu tout les postes...d'où certaine remarques qui n'ont plus lieu.
0