Le programme s'arrête après une itération, sans message d'erreur
Résolu/Fermé
A voir également:
- Application defined or object defined error vba
- Erreur 0x80070643 - Guide
- Recuperer message whatsapp - Guide
- Message d'absence thunderbird - Guide
- Message programmé - Guide
- Diff message ✓ - Forum Mobile
3 réponses
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
523
1 nov. 2013 à 09:54
1 nov. 2013 à 09:54
Bonjour,
Essaie comme cela
A+
Essaie comme cela
Set occupancies = Range(.Cells(i * 35 + 2, 4), .Cells(35 * (i + 1), 4))
A+
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
523
1 nov. 2013 à 10:42
1 nov. 2013 à 10:42
Un exemple sur 6 itérations pour te montrer que le code fonctionne
https://www.cjoint.com/c/CKbkNk1X7dI
et un lien pour voir comment joindre un fichier.
https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers#q=cjoint&cur=1&url=%2F
A+
https://www.cjoint.com/c/CKbkNk1X7dI
et un lien pour voir comment joindre un fichier.
https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers#q=cjoint&cur=1&url=%2F
A+
Oui, tu as raison, cela fonctionne !
Le problème ne vient donc pas de la, mais de la partie interne de mon code... Je trouve cela fou, sachant qu'il fonctionne sans IF!
Voila donc l'excel en question : http://cjoint.com/?0Kbn1N3142I
Ainsi que la macro : http://cjoint.com/?0Kbn6nAXlWn
J'ai à nouveau tout recontrolé, et je ne trouve pas la faute. Je pense toutefois qu'elle se situe au moment de la création de la nouvelle feuille. Les variables utilisées sont peut-être du mauvais type ou au mauvais endroit...
Merci d'avance
Le problème ne vient donc pas de la, mais de la partie interne de mon code... Je trouve cela fou, sachant qu'il fonctionne sans IF!
Voila donc l'excel en question : http://cjoint.com/?0Kbn1N3142I
Ainsi que la macro : http://cjoint.com/?0Kbn6nAXlWn
J'ai à nouveau tout recontrolé, et je ne trouve pas la faute. Je pense toutefois qu'elle se situe au moment de la création de la nouvelle feuille. Les variables utilisées sont peut-être du mauvais type ou au mauvais endroit...
Merci d'avance
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
523
1 nov. 2013 à 15:12
1 nov. 2013 à 15:12
Ton programme est conçu pour fonctionner avec un pas de 34.
Tout se passe bien jusqu'à la ligne 1121 de ta feuille BusOccupancy (bus_Line1_324).
Après le pas de 34 n'est plus respecté. Le bus suivant (bus_Line1_32) se trouve à la ligne 1142 alors qu'il devrait se trouver à la ligne 1156 (pas de 20 au lieu de 34).
Il s'agit donc d'un problème de structuration des données.
A+
Tout se passe bien jusqu'à la ligne 1121 de ta feuille BusOccupancy (bus_Line1_324).
Après le pas de 34 n'est plus respecté. Le bus suivant (bus_Line1_32) se trouve à la ligne 1142 alors qu'il devrait se trouver à la ligne 1156 (pas de 20 au lieu de 34).
Il s'agit donc d'un problème de structuration des données.
A+
Donc tout a fonctionné chez toi jusqu'à la ligne 1121 ?!?! Car dans mon cas, avec exactement les mêmes données que celles que je t'ai envoyé, tout s'arrête après la création de la première feuille de bus...
Comment est-ce possible ? Serait-ce un problème de version Excel ? Ou de réglage mal défini ? J'ai en tout cas toujours le message "Error 1004, Application-defined or Object-defined error" qui apparait...
Merci
Comment est-ce possible ? Serait-ce un problème de version Excel ? Ou de réglage mal défini ? J'ai en tout cas toujours le message "Error 1004, Application-defined or Object-defined error" qui apparait...
Merci
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
523
2 nov. 2013 à 09:13
2 nov. 2013 à 09:13
Effectivement, je ne t'ai pas tout expliqué :D
La première correction à apporter était sur ces lignes de code
Maintenant, on en revient à l'erreur que j'évoquais dans le précédent post.
Dans l'exemple joint, l'erreur survient sur la ligne de code newsheet.Name = nom (surlignée en jaune).
https://www.cjoint.com/c/CKcjkRpLk4Y
Si tu survoles avec la souris la variable "nom", tu vas t'apercevoir qu'elle vaut 22.
Si tu survoles avec la souris la variable i, tu vas t'apercevoir qu'elle vaut 36.
nom = Cells(i * 35 + 1, 1).Value équivaut donc à nom = Cells(1261, 1).Value ce qui correspond bien à la valeur de la cellule A1261, à savoir 22.
Il se pose la question de savoir pourquoi on va chercher le nom sur cette ligne alors qu'on devrait chercher en 1247 (bus_Line1_20 ) ou 1282 (bus_Line1_70).
En cherchant, tu remarques que le décalage débute à la ligne 1121.
Voila, voila ...
A+
La première correction à apporter était sur ces lignes de code
' Create a new sheet with the same name as the busTu remarques que j'ai indiqué explicitement la référence de la feuille sur laquelle doivent s'appliquer les instructions. Si tu ne fais pas cela, elles s'appliquent sur la feuille active, à savoir la feuille nouvellement créée.
With busOccupancy
nom = .Cells(i * 35 + 1, 1).Value
Range(.Cells(i * 35 + 2, 1), .Cells(35 * (i + 1), 7)).Copy
End With
Maintenant, on en revient à l'erreur que j'évoquais dans le précédent post.
Dans l'exemple joint, l'erreur survient sur la ligne de code newsheet.Name = nom (surlignée en jaune).
https://www.cjoint.com/c/CKcjkRpLk4Y
Si tu survoles avec la souris la variable "nom", tu vas t'apercevoir qu'elle vaut 22.
Si tu survoles avec la souris la variable i, tu vas t'apercevoir qu'elle vaut 36.
nom = Cells(i * 35 + 1, 1).Value équivaut donc à nom = Cells(1261, 1).Value ce qui correspond bien à la valeur de la cellule A1261, à savoir 22.
Il se pose la question de savoir pourquoi on va chercher le nom sur cette ligne alors qu'on devrait chercher en 1247 (bus_Line1_20 ) ou 1282 (bus_Line1_70).
En cherchant, tu remarques que le décalage débute à la ligne 1121.
Voila, voila ...
A+
Incroyable ! Merci beaucoup, tout fonctionne à merveille !
Pour le cas du bus à 20 stations (et non 34), cela provient du programme de modélisation routière ayant créé les données, qui s'arrête à un temps donné, sans laisser à ce pauvre bus n°324 le temps de finir son parcours...
Je pense que je vais simplement le supprimer à la main, ou créer une p'tite condition IF supplémentaire... :-)
Encore une fois MERCI, et bon weekend
Pour le cas du bus à 20 stations (et non 34), cela provient du programme de modélisation routière ayant créé les données, qui s'arrête à un temps donné, sans laisser à ce pauvre bus n°324 le temps de finir son parcours...
Je pense que je vais simplement le supprimer à la main, ou créer une p'tite condition IF supplémentaire... :-)
Encore une fois MERCI, et bon weekend
1 nov. 2013 à 10:02
Runtime error '1004':
Method 'Range' of object '_Global' failed
C'est vraiment comme si ma variable 'occupancy' ne pouvait stocker qu'une fois des données, à la 1ère boucle...
Merci beaucoup pour ta réponse
1 nov. 2013 à 10:11
Il faudrait que tu joignes un fichier exemple pour voir les interactions avec les données ou le reste du programme.
A+
1 nov. 2013 à 10:28
Mais le problème vient de tous les cas de cette partie du code. J'ai à nouveau essayé de n'employer que la boucle for, sans IF, et cela a parfaitement fonctionné (tellement que je me suis retrouvé avec 150 nouvelles feuilles... :-) ).
Mais pour ce qui est du fichier de base, il se présente comme suit :
bus1_201
19 45672 45672 0,006993007 0,006993007 1 0
17 45584 45584 0,006993007 0,006993007 1 0
...
8 45188 45188 0,006993007 0,006993007 1 0
bus_Line1_124
19 37170 37173 0,034965035 0,027972028 6 2
...
Les numéros de la 1ère colonne (19, 17, ..., 8) représentent le numéro des stations, et les valeurs qui m'intéressent (le taux d'occupation) est située dans la 4e colonne (0.00699...).
Si nécessaire, je peux t'envoyer par mail le fichier...
Merci encore