Erreur d'exécution '1004'
nana.belk
Messages postés
5
Statut
Membre
-
nana.belk Messages postés 5 Statut Membre -
nana.belk Messages postés 5 Statut Membre -
bonjour! au fait j'ai rédigé un code qui permet de remplir un bon sur une feuille de mon classeur. ça fonctionne mais ça prend un peu de temps alors que ce n'est pas aussi compliqué comme procédure. à la fin de l'exécution je reçois un message "erreur d'exécution '1004'" et je ne vois pas où est le problème. voici mon code
merci de vouloir m'aider svp
Private Sub CommandButton3_Click()
Sheets("bon de sortie").Activate
s = 0
If Sheets("commandes internes").Cells(Rows.Count, 1).End(xlUp).Row = 1 Then
n = 2
Else
n = Sheets("commandes internes").Cells(Rows.Count, 1).End(xlUp).Row
End If
Range("D2").Value = "N°: " + CStr(bsText.Value)
i = 2
j = 14
While i <= n
While j <= 29
If Sheets("commandes internes").Cells(i, 6) = bsText.Value Then
Range("D3").Value = "A RABAT, le " + CStr(Sheets("commandes internes").Cells(i, 7))
Range("C11").Value = "M." + CStr(Sheets("commandes internes").Cells(i, 1))
Cells(j, 2) = s + 1
Cells(j, 3) = Sheets("commandes internes").Cells(i, 3)
Cells(j, 4) = Sheets("commandes internes").Cells(i, 2)
s = s + 1
j = j + 1
End If
i = i + 1
Wend
Wend
End Sub
merci de vouloir m'aider svp
1 réponse
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
1° ajoute "option explicit" en début de module, et traite les avertissements que tu vas probablement recevoir
2° réfléchis à tes deux boucles while imbriquées: que veux-tu obtenir?
3° informe-nous de la ligne qui provoque l'erreur 1004, ainsi que du texte du message d'erreur et es valeurs de i et de n à ce moment-là
4° moi je préciserais: Sheets("commandes internes").Rows.Count-
bonjour, bon j'essaie de chercher quelques informations dans la feuille "commandes internes" pour remplir le bon de sortie, je ne voyais pas comment procéder autrement sans 2 boucles imbriquées. Des boucles while semblent me donner plus de liberté dans mon code par rapport à des boucles for
concernant le message d'erreur explicite le voilà "Erreur '1004' : erreur définie par l'application ou par l'objet" ça provient de cette ligne If Sheets("commandes internes").Cells(i, 6) = bsText.Value Then
A propos des avertissements reçus, il s'agissait au fait des variables utilisées sans être définies je ne pense pas que c'est vraiment un problème
voilà ! merciii -
boucles imbriquées: peut-être plus de liberté, et certainement plus d'occasions de faire des erreurs, surtout quand on débute.
ta double boucle est mal conçue. peux-tu décrire, en français, ce que tu voudrais que ces boucles fassent?
merci de mettre "option explicit", cela permettra d'éliminer des erreurs d'inattention. ensuite, partage ton code corrigé.
quelles sont les valeurs de i et de n au moment de l'erreur?
as-tu appliqué mon point 4? merci de partager le code adapté. -
j'ai deux feuilles : une feuille "commandes internes" où les données sont stockées et une feuille "bon de sortie" qui contient le bon de sortie.Je dois chercher dans chaque ligne i de ma première feuille la commande qui porte le même code 'bsText' une fois trouvée je remplit une ligne j de mon bon de sortie et je continue ma recherche jusqu'à ce qu'à la dernière ligne de la feuille "commandes internes". J'espère avoir été clair!
voici le code corrigé
Option Explicit Private Sub CommandButton3_Click() Sheets("bon de sortie").Activate Dim s As Integer Dim n As Integer Dim i As Double Dim j As Integer s = 0 If Sheets("commandes internes").Cells(Rows.Count, 1).End(xlUp).Row = 1 Then n = 2 Else n = Sheets("commandes internes").Cells(Rows.Count, 1).End(xlUp).Row End If Range("D2").Value = "N°: " + CStr(bsText.Value) i = 2 j = 14 While i <= n While j <= 29 If Sheets("commandes internes").Cells(i, 6) = bsText.Value Then Range("D3").Value = "A RABAT, le " + CStr(Sheets("commandes internes").Cells(i, 7)) Range("C11").Value = "M." + CStr(Sheets("commandes internes").Cells(i, 1)) Cells(j, 2) = s + 1 Cells(j, 3) = Sheets("commandes internes").Cells(i, 3) Cells(j, 4) = Sheets("commandes internes").Cells(i, 2) s = s + 1 j = j + 1 End If i = i + 1 Wend Wend End Sub
Au fait oui j'ai tenté de compter les lignes avec Sheets("commandes internes").Rows.Count mais j'obtiens un autre message d'erreur dès le départ "Erreur d'exécution 6 : Dépassement de capacité" donc j'ai remis mon premier code pour que ça s'exécute
à la fin de l'exécution, j'obtiens le message d'erreur '1004' et les valeurs de i et n respectivement sont:_ bizarrement _1048577 et 7 (correct :le nombre de lignes non vides de ma feuille commandes internes)
maintenant je pense que c'est l'incrémentation du i jusqu'à cette valeur qui cause la lenteur de l'exécution
voilà!
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI
Merci d'y penser dans tes prochains messages. -
en effet, tu incrémentes le i sans vérifier si sa valeur dépasse n.
tu n'as pas encore précisé sur quelle ligne tu avais l'erreur 1004, ni le texte du message d'erreur
je pense que tu n'as aucune raison d'avoir une boucle en j. de plus, tes boucles ne sont pas correctement imbriquées. relis ton texte en #4: où est l'utilité d'une boucle en j? -
Bonjour,
Pour un numéro de ligne, il faut utiliser une variable de type Long : les numéros de ligne varient de 1 à 1048576 mais le Type Integer s'arrête à 32767 ( ce qui explique l'erreur "Erreur d'exécution 6 : Dépassement de capacité"
Édit : Pour faire ta recherche tu devrais utiliser la méthode Find
Cdlt
Patrice
-