[VBA] erreur de dépassement

Grace -  
lermite222 Messages postés 9042 Statut Contributeur -
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
Configuration: Windows XP
Internet Explorer 6.0

4 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    essaie avec Dim k As long

    eric
    0
    1. Grace
       
      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
      1. Polux31 Messages postés 7219 Statut Membre 1 204 > Grace
         
        tu l'effaces là :

        TextBox7 = eti

        ;o)
        0
  2. zavenger Messages postés 817 Statut Membre 161
     
    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
    1. Grace
       
      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
    2. Polux31 Messages postés 7219 Statut Membre 1 204 > Grace
       
      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
    3. zavenger Messages postés 817 Statut Membre 161 > Grace
       
      je sais que c'est moins propre, mais je ne declarerais pas k
      0
    4. Polux31 Messages postés 7219 Statut Membre 1 204 > zavenger Messages postés 817 Statut Membre
       
      En tout cas pas en integer ... mais en long

      ;o)
      0
    5. zavenger Messages postés 817 Statut Membre 161 > Polux31 Messages postés 7219 Statut Membre
       
      pas d'accord car While Cells(k, 1) <> TextBox7 est faux (puisque valeur trouvée) donc sort de la boucle ;-)
      0
  3. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
    1. zavenger Messages postés 817 Statut Membre 161
       
      effectivement, la valeur doit etre trouvée sinon ... la macro sort en erreur
      0
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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