Mon code vba marche une fois sur deux!
Fermé
flateur18
Messages postés
35
Date d'inscription
vendredi 12 février 2010
Statut
Membre
Dernière intervention
4 décembre 2014
-
19 oct. 2010 à 10:50
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 26 oct. 2010 à 11:58
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 26 oct. 2010 à 11:58
A voir également:
- Mon code vba marche une fois sur deux!
- Deux comptes whatsapp - Guide
- Code asci - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Deux ecran pc - Guide
3 réponses
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
24 oct. 2010 à 23:16
24 oct. 2010 à 23:16
Bonsoir,
Difficile de répondre, le code est incomplet !
Le Exit Sub situé avant le End With est probablement un résidu de tentative de débogage.
il manque les labels correspondant à :
On Error GoTo Error_
If .ActiveSheet.Range("A1") = "PO+PN" Then GoTo Type_
Il manque la gestion d'erreur
Il y a une erreur sur la ligne :
.Selection.AutoFill Destination:=xlSh1.Range("A2:A" & _
Range("A2").End(xlDown).Row), Type:=xlFillDefault
Remplacer par
.Selection.AutoFill Destination:=xlSh1.Range("A2:A" & _
xlSh1.Range("A2").End(xlDown).Row), Type:=xlFillDefault
J'espère que cela suffit à régler le problème
Patrice
Difficile de répondre, le code est incomplet !
Le Exit Sub situé avant le End With est probablement un résidu de tentative de débogage.
il manque les labels correspondant à :
On Error GoTo Error_
If .ActiveSheet.Range("A1") = "PO+PN" Then GoTo Type_
Il manque la gestion d'erreur
Il y a une erreur sur la ligne :
.Selection.AutoFill Destination:=xlSh1.Range("A2:A" & _
Range("A2").End(xlDown).Row), Type:=xlFillDefault
Remplacer par
.Selection.AutoFill Destination:=xlSh1.Range("A2:A" & _
xlSh1.Range("A2").End(xlDown).Row), Type:=xlFillDefault
J'espère que cela suffit à régler le problème
Patrice
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
Modifié par Patrice33740 le 25/10/2010 à 23:32
Modifié par Patrice33740 le 25/10/2010 à 23:32
re
flateur18
Messages postés
35
Date d'inscription
vendredi 12 février 2010
Statut
Membre
Dernière intervention
4 décembre 2014
26 oct. 2010 à 10:28
26 oct. 2010 à 10:28
Cher Patrice,
J'ai fait exactement ce que tu m'a dit, donc de référencer tous les .columns, .rows et .cells à mon objet xlSh1, et cela marche parfaitement, le processus se termine sans probleme après l'execution de toutes les commandes, et permet au suivant de s'ouvrir proprement, c'est nikel, j'ai même oté ma fonction "killProcess" car j'ai maintenant confiance en mon code.
Merci infiniment, et à de nouvelles aventures,
Cordialement
Manu
J'ai fait exactement ce que tu m'a dit, donc de référencer tous les .columns, .rows et .cells à mon objet xlSh1, et cela marche parfaitement, le processus se termine sans probleme après l'execution de toutes les commandes, et permet au suivant de s'ouvrir proprement, c'est nikel, j'ai même oté ma fonction "killProcess" car j'ai maintenant confiance en mon code.
Merci infiniment, et à de nouvelles aventures,
Cordialement
Manu
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
26 oct. 2010 à 11:58
26 oct. 2010 à 11:58
Au plaisir de te retrouver sur ce forum
Patrice
Patrice
24 oct. 2010 à 23:21
.ActiveWorkbook.Save devrait se situer juste avant le End With
Modifié par flateur18 le 25/10/2010 à 10:57
En effet, pour la gestion des erreurs, j'ai tronqué les label "Error_:" et "Type_" car trop longs, mais ils sont bien dans mon code d'origine.
Quand je met le "Exit Sub" après "End With", mon code plante quand je ne rentre pas dans le label "AddPOPN:".
J'ai trouvé une "astuce" pour fermer systématiquement et "physiquement" toute application Excel avant de la réutiliser à nouveau, car c'est là d'où vennait le problème, des"objets" restaient actifs malgré la fermeture du processus Excel et la liberation des objets qu'on a créé.
Pour ceux qui sont intéressés voici la fonction à mettre dans un module :
et dans le code VB, écrire avant le "End Sub" de chaque procédure qui appelle Excel :
Ca permet de repartir "Proprement" en ouvrant une autre application Excel.
Chez moi ça marche bien.
===========================================================================
"Ce qu'il y a de plus difficile à apprécier et à comprendre, c'est ce qui ce passe sous nos yeux !!!"
25 oct. 2010 à 15:05
Ce code est intéressant pour éliminer un processus qui ne s'est pas fermé correctement..
Concernant le problème que tu avais évoqué, il est très probable que cela vienne d'une ou plusieurs erreurs dans ton code qui entrainent un plantage du processus et donc l'empêchent de se fermer normalement.
Ta solution est très radicale mais elle ne résout pas l'origine du problème, avec toutes les conséquences que cela peut avoir sur la confiance accordée à ton code.
Après avoir corrigé ton code, je l'ai exécuté des dizaines de fois sans jamais avoir le moindre problème.
Corrections à faire :
- référencer chaque range et column par rapport à l'objet WorkSheet (xlSh1) au lieu de l'objet Application (xlApp1)
- Traiter entièrement le If .ActiveSheet.Range("A1") <> "PO+PN" Then en ajoutant un Else et un End if de façon à ne passer par AddPOPN: (qui devient inutile) que lorsque c'est nécessaire.
- supprimer le Exit Sub qui empêche la destruction des variables instanciées.
Cordialement
Patrice