Menu

Erreur d'exécution '1004'

nana.belk 5 Messages postés samedi 8 septembre 2018Date d'inscription 11 septembre 2018 Dernière intervention - 8 sept. 2018 à 18:35 - Dernière réponse : nana.belk 5 Messages postés samedi 8 septembre 2018Date d'inscription 11 septembre 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

8 réponses

yg_be 6507 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 24 septembre 2018 Dernière intervention - Modifié par yg_be le 8/09/2018 à 19:48
0
Merci
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
nana.belk 5 Messages postés samedi 8 septembre 2018Date d'inscription 11 septembre 2018 Dernière intervention - 9 sept. 2018 à 13:47
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.
yg_be 6507 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 24 septembre 2018 Dernière intervention > nana.belk 5 Messages postés samedi 8 septembre 2018Date d'inscription 11 septembre 2018 Dernière intervention - 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?
nana.belk 5 Messages postés samedi 8 septembre 2018Date d'inscription 11 septembre 2018 Dernière intervention > yg_be 6507 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 24 septembre 2018 Dernière intervention - 11 sept. 2018 à 14:44
Bonjour! effectivement j'ai utilisé une seule boucle en i et ça fonctionne à merveilles merci énormément pour votre aide!

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
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

End Sub
Patrice33740 7277 Messages postés dimanche 13 juin 2010Date d'inscription 24 septembre 2018 Dernière intervention > nana.belk 5 Messages postés samedi 8 septembre 2018Date d'inscription 11 septembre 2018 Dernière intervention - 10 sept. 2018 à 00:06
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
nana.belk 5 Messages postés samedi 8 septembre 2018Date d'inscription 11 septembre 2018 Dernière intervention > Patrice33740 7277 Messages postés dimanche 13 juin 2010Date d'inscription 24 septembre 2018 Dernière intervention - 11 sept. 2018 à 14:46
Merci pour l'information! Je n'étais pas consciente de l'existence d'une telle fonction
Commenter la réponse de yg_be