Erreur d’exécution '6'

Fermé
DEVPLUS - Modifié le 25 nov. 2017 à 18:38
 DEVPLUS - 26 nov. 2017 à 19:34
Bonjour,
J'ai un Userform U25 Qui contient
-TextBox1
-TextBox2
-ListView1
Je souhaites ajouter des items par le U25 à la feuille excel BDT, ci dessous ce que j'ai écrit mais j'ai comme code d'erreur '6' Dépassement de capacité.

Private Sub BtNouveau_Click()
TextBox1.Enabled = True
TextBox2.Enabled = True
TextBox1.SetFocus
End Sub

Private Sub BtValider_Click()
Dim i As Integer
For i = 1 To Range("a:a").End(xlDown).Row
ActiveCell.End(xlDown).Select
If UCase(TextBox1.Text) = UCase(Cells(i, 1).Text) And TextBox2 = "" Then

MsgBox "Ce Code est Déja Attribué":
TextBox1 = ""
TextBox2 = ""
Exit Sub
Else
If UCase(TextBox1.Text) = UCase(Cells(i, 1).Text) And TextBox2 <> "" Then
Sheets("BDT").Cells(i, 1).Value = Me.TextBox1.Value
Sheets("BDT").Cells(i, 2).Value = Me.TextBox2.Value
MsgBox "Modification Effectué":
TextBox1 = ""
TextBox2 = ""
Exit Sub
End If
End If
Next i
i = 1
Do While Cells(i, 1) <> ""
Cells(i, 1).Offset(1, 1).Select
i = i + 1
Loop
Sheets("BDT").Cells(i, 1).Value = Me.TextBox1.Value
Sheets("BDT").Cells(i, 2).Value = Me.TextBox2.Value

If MsgBox("Confirmez-Vous l'ajout de cet Aricle?", vbYesNo, "Confirmation") = vbYes Then
End If
TextBox1 = ""
TextBox2 = ""
End Sub


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).

Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Jordane45




A voir également:

3 réponses

jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 649
25 nov. 2017 à 18:43
Bonjour,


Pour commencer.. au lieu de chercher une cellule via une boucle de plusieurs milliers de lignes... il serait préférable d'utiliser la méthode FIND
https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel
0
Bonjour,
Je veux remplir une base de donnée par un formulaire "U25"
- quand je tape le code,
1- textbox2="" cela veux dire NOUVEAU
il ya une recherche si le code existe dans la base de donnée "oui ou non".
si c'est oui il m'affiche un message que le code existe déja, si c'est non il me demande si je veux ajouter cet article, si c'est oui il va remplir les cellule de la base de donnée.
2-TEXTBOX2<>"" cela veux MODIFIER
apres modification effectuée sur U25
VALIDER
MESSAGE voulez vous confirmer la modification, si c'est oui elle est reporter sur la base de donnée BDT.
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
25 nov. 2017 à 21:47
bonsoir, sur quelle ligne as-tu l'erreur?
suggestion:
Dim i As Long
0
Bonjour,
Avec Dim i As Integer
l'erreur est sur la ligne:
For i = 1 To Range("a:a").End(xlDown).Row
pour votre suggestion je l'ai déjà essayer le problème est résolu mais il faut attendre 3 minutes pour avoir le message "Confirmez-Vous l'ajout de cet Article?",
Ce que je n'arrive pas à comprendre avec le même code sur une autre base de donnée
et sur le même classeur, ça marche très bien, d'ailleurs j'ai copié et coller le code.
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471 > DEVPLUS
Modifié le 26 nov. 2017 à 17:40
que ne comprends-tu pas?
pourquoi cela prend trois minutes ou pourquoi
Dim i As Integer
pose problème quand il y a plus de 32 767 lignes?
0
ce que je ne comprend pas c'est pourquoi sur une base de donnée identique et sur le même classeur sur la 1st ça marche sans aucun problème et sur la 2nd il y'a cet erreur
0
Désolais, je viens de vérifier, j'ai le même problème sur les deux base de données
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471 > DEVPLUS
26 nov. 2017 à 18:14
l'erreur vient si il faut travailler sur une ligne après la ligne 32 767. c'est la limite d'un Integer, il faut alors passer à un Long.
si tu penses que tu as moins de 32767 lignes de données, il faut peut-être "nettoyer" les données dans ton fichier.
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 649
Modifié le 25 nov. 2017 à 23:31
Re bonjour,

Avec le code suivant, je pense que tu n'auras plus de soucis.

Je l'ai découpé en sub et fonctions histoire de le rendre plus lisible et plus propre...

Private Sub BtValider_Click()
    Dim ligne As Long
    Dim valCh As String
    Dim sh As Worksheet
    Dim valExist As Long
    Set sh = Worksheets("BDT")
    
    valCh = Me.TextBox1.Value
    valExist = chercheVal(sh, valCh)
   
    If valExist Then
        If TextBox2.Value = "" Then
            MsgBox "Ce Code est Déja Attribué":
            Me.TextBox1 = ""
            Me.TextBox2 = ""
        ElseIf TextBox2.Value <> "" Then
            Call modifier(sh, valExist)
        End If
    Else
         Call ajouter(sh)
    End If
End Sub

Function chercheVal(sh As Worksheet, Valeur_Cherchee As String)
    Dim Trouve As Range
    Dim PlageDeRecherche As Range
    
    'On cherche dans la première colonne de la feuille sh
    Set PlageDeRecherche = sh.Columns(1)
    
    'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
    Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)

    'traitement de l'erreur possible : Si on ne trouve rien :
    If Trouve Is Nothing Then
        'ici, traitement pour le cas où la valeur n'est pas trouvée
        chercheVal = False
    Else
        'ici, traitement pour le cas où la valeur est trouvée
        chercheVal = Trouve.Row 'retourne la ligne concernée
    End If
End Function

Sub ajouter(sh As Worksheet)
    Dim LastRow As Long
    LastRow = Derniere_Ligne(sh)
    If MsgBox("Confirmez-Vous l'ajout de cet Aricle?", vbYesNo, "Confirmation") = vbYes Then
        sh.Cells(LastRow + 1, 1).Value = Me.TextBox1.Value
        sh.Cells(LastRow + 1, 2).Value = Me.TextBox2.Value
    End If
End Sub

Sub modifier(sh As Worksheet, ligne As Long)
    sh.Cells(ligne, 1).Value = Me.TextBox1.Value
    sh.Cells(ligne, 2).Value = Me.TextBox2.Value
    MsgBox "Modification Effectuée"
End Sub

Function Derniere_Ligne(sh As Worksheet) As Long '
    Derniere_Ligne = sh.Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
End Function



Cordialement, 
Jordane                                                                 
0
Bonjour,
Merci d'avance pour votre aide, Je viens de tester le code, j'ai comme message d'erreur:
Sub ou Fonction non définie
Derniere_Ligne(sh)
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 649 > DEVPLUS
26 nov. 2017 à 17:35
Tu as copié collé le code complet ?
0
oui avec copier coller
0