A voir également:
- Erreur d’exécution '6'
- Erreur d'execution 1004 - Forum Programmation
- Belote a 6 - Forum Loisirs / Divertissements
- Erreur 1004 vba ✓ - Forum VB / VBA
- Freebox etape 6 ✓ - Forum Freebox
- Erreur d'execution 13 ✓ - Forum Programmation
3 réponses
jordane45
Messages postés
37253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mars 2023
4 551
25 nov. 2017 à 18:43
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
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
yg_be
Messages postés
21304
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 326
25 nov. 2017 à 21:47
25 nov. 2017 à 21:47
bonsoir, sur quelle ligne as-tu l'erreur?
suggestion:
suggestion:
Dim i As Long
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.
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.
yg_be
Messages postés
21304
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 326
>
DEVPLUS
Modifié le 26 nov. 2017 à 17:40
Modifié le 26 nov. 2017 à 17:40
que ne comprends-tu pas?
pourquoi cela prend trois minutes ou pourquoi
pourquoi cela prend trois minutes ou pourquoi
Dim i As Integerpose problème quand il y a plus de 32 767 lignes?
yg_be
Messages postés
21304
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 326
>
DEVPLUS
26 nov. 2017 à 18:14
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.
si tu penses que tu as moins de 32767 lignes de données, il faut peut-être "nettoyer" les données dans ton fichier.
jordane45
Messages postés
37253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mars 2023
4 551
Modifié le 25 nov. 2017 à 23:31
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...
Cordialement,
Jordane
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
jordane45
Messages postés
37253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mars 2023
4 551
>
DEVPLUS
26 nov. 2017 à 17:35
26 nov. 2017 à 17:35
Tu as copié collé le code complet ?
26 nov. 2017 à 17:47
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.