Macro dans Feuil1: OK; Macro dans Module1: KO

TheCRO Messages postés 3 Date d'inscription mercredi 7 janvier 2009 Statut Membre Dernière intervention 8 janvier 2009 - 7 janv. 2009 à 10:18
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 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:

Code:
Sheets(lastSheetName).Range("H16:K32").Copy Destination:=Sheets(currentSheetName).Range("H16")

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.

J'utilise Excel 2003 SP2 sur Windows XP.

Est-ce que vous auriez des idées?

Merci d'avance.

6 réponses

pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
7 janv. 2009 à 10:58
bonjour
mets nous la macro complete pour voir le probleme  car comment t'aider à solutionner un probleme si tu ne nous donne que ce qui fonctionne

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
0
TheCRO Messages postés 3 Date d'inscription mercredi 7 janvier 2009 Statut Membre Derniè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?
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
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
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
7 janv. 2009 à 20:58
Bonjour

TheCro, ton code fonctionne bien chez moi, que ce soit dans un module ou une feuille de calcul. Si tu nous donnais ton code complet (3e demande...) ?


Amicalement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TheCRO Messages postés 3 Date d'inscription mercredi 7 janvier 2009 Statut Membre Derniè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 Function

          Sub CalculerFeuille()
          ...

              Sheets("feuil1").Range("H16:K32").Copy Destination:=Sheets("feuil2").Range("H16")
                      
          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.
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
8 janv. 2009 à 19:36
Top, l'essentiel c'est que le problème soit réglé !
0
Rejoignez-nous