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
A voir également:
- Erreur d'exécution '1004'
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
- J'aime par erreur facebook notification - Forum Facebook
1 réponse
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
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
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
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
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é.
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 SubAu 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à!
Explications disponibles ici : ICI
Merci d'y penser dans tes prochains messages.
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?
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