TheCRO
Messages postés3Date d'inscriptionmercredi 7 janvier 2009StatutMembreDernière intervention 8 janvier 2009
-
7 janv. 2009 à 10:18
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 2010
-
8 janv. 2009 à 19:36
Bonjour tout le monde,
j'ai une macro que j'ai écrite dans une feuille de calcul Excel. Elle
fonctionne très bien. J'aurais voulu la déporter vers un Module car
elle va être utilisée par toutes les feuilles de calcul. Le problème
est que la macro ne fonctionne plus quand elle est située dans le
Module. Elle plante à la ligne:
Aucune erreur n'est levée, la copie fonctionne parfaitement mais
la macro s'arrête. Les lignes suivantes ne sont pas exécutées. Le même
plantage est observé quelque soit la ligne située après la ligne sitée.
TheCRO
Messages postés3Date d'inscriptionmercredi 7 janvier 2009StatutMembreDernière intervention 8 janvier 2009 7 janv. 2009 à 11:16
Merci de ta réponse pile_poil.
Pour faire simple, j'ai le code suivant:
currentSheetName = "feuille2"
lastSheetName = "feuille1"
Sheets(lastSheetName).Range("H16:K32").Copy Destination:=Sheets(currentSheetName).Range("H16")
MsgBox "coucou"
Quand j'exécute la macro, elle s'arrête sur la ligne 4 (la copie) et ne passe jamais sur la MsgBox (qui du coup ne s'affiche pas). Ce qui est surprenant c'est que la copie et effectuée et qu'aucune erreur n'est levée. Quand je passe en pas à pas détaillé, la ligne 4 est surlignée, puis plus rien. Que je laisse la gestion d'erreur basique Excel ou que j'essaie de capturer les erreurs, aucune erreur n'est levée. La macro s'arrête simplement au milieu. A noter que ce comportement est le même après reboute du PC.
Est-ce que ça ne pourrait pas être un problème lié au contexte d'exécution du code?
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 7 janv. 2009 à 11:37
dans la feuille1 j'ai mis
Sub macro1()
test
End Sub
et dans le module1
Sub test()
currentSheetName = "feuil2"
lastSheetName = "feuil1"
Sheets(lastSheetName).Range("A1:B3").Copy Destination:=Sheets(currentSheetName).Range("A1")
MsgBox "coucou"
End Sub
et cela fonctionne.
mets nous ton code complet ou au moins la procédure appelante(dans mon exemple macro1) et la procédure appelée(dans mon exemple test) car je ne vois pas pourquoi chez toi ça ne marche pas
[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
TheCRO
Messages postés3Date d'inscriptionmercredi 7 janvier 2009StatutMembreDernière intervention 8 janvier 2009 8 janv. 2009 à 09:41
En fait j'ai fini par faire ce que je voulais en faisant différemment.
Le problème était le suivant:
- la mise en forme automatique de la cellule A1 de la feuille feuil2 appelle la fonction: CalculerCellule
- la feuille feuil2 contient un bouton qui appelle (via la méthode _click qui va bien) la méthode CalculerFeuille
- dans le module1 on trouve les 2 méthodes:
Function CalculerCellule(ByVal monString As String) As Double
Dim workingSheetName As String
workingSheetName = ActiveSheet.Name
... (travail sur la feuille workingSheetName)
End Sub
Avec les choses faites comme ça, la fonction CalculerCellule était appelée automatiquement quand la méthodeCalculerFeuille faisait le copier coller. Or, je ne sais pas pourquoi mais ce copier coller changeait momentanément la feuille active pour devenir "feuil1" alors que je touche pas à la feuille active dans mon code. Bref, la méthode servant à calculer la forme automatique d'une cellule de la feuille "feuil2" était appelée dans le contexte de la feuille "feuil1". C'est très surprenant, mais en aillant vérifié tous mes appels de fonctions et après être passé en pas à pas x fois, c'est la seule explication.
Conclusion: maintenant j'appelle la fonction CalculerCellule via un bouton CalculerFormeCellule et plus via la mise en forme automatique. L'appel bizard n'a pas lieu et tout fonctionne.