Erreur d'exécution '1004'

Fermé
nana.belk Messages postés 5 Date d'inscription samedi 8 septembre 2018 Statut Membre Dernière intervention 11 septembre 2018 - Modifié le 9 sept. 2018 à 15:23
nana.belk Messages postés 5 Date d'inscription samedi 8 septembre 2018 Statut Membre Dernière intervention 11 septembre 2018 - 11 sept. 2018 à 14:46
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
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
A voir également:

1 réponse

yg_be Messages postés 23352 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 novembre 2024 Ambassadeur 1 554
Modifié le 8 sept. 2018 à 19:48
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
0
nana.belk Messages postés 5 Date d'inscription samedi 8 septembre 2018 Statut Membre Dernière intervention 11 septembre 2018
8 sept. 2018 à 20:00
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
0
yg_be Messages postés 23352 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 novembre 2024 1 554 > nana.belk Messages postés 5 Date d'inscription samedi 8 septembre 2018 Statut Membre Dernière intervention 11 septembre 2018
Modifié le 8 sept. 2018 à 22:17
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é.
0
nana.belk Messages postés 5 Date d'inscription samedi 8 septembre 2018 Statut Membre Dernière intervention 11 septembre 2018
Modifié le 9 sept. 2018 à 15:24
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.
0
yg_be Messages postés 23352 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 novembre 2024 1 554 > nana.belk Messages postés 5 Date d'inscription samedi 8 septembre 2018 Statut Membre Dernière intervention 11 septembre 2018
9 sept. 2018 à 15:21
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?
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779 > nana.belk Messages postés 5 Date d'inscription samedi 8 septembre 2018 Statut Membre Dernière intervention 11 septembre 2018
Modifié le 10 sept. 2018 à 00:21
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
0